diff options
Diffstat (limited to 'js/src/tests/js1_5')
725 files changed, 167381 insertions, 0 deletions
diff --git a/js/src/tests/js1_5/Array/11.1.4.js b/js/src/tests/js1_5/Array/11.1.4.js new file mode 100644 index 000000000..7f39c9305 --- /dev/null +++ b/js/src/tests/js1_5/Array/11.1.4.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 260106; +var summary = 'Elisons in Array literals should not be enumed'; +var actual = ''; +var expect = ''; +var status; +var prop; +var array; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' [,1] '; +array = [,1]; +actual = ''; +expect = '1'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' [,,1] '; +array = [,,1]; +actual = ''; +expect = '2'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' [1,] '; +array = [1,]; +actual = ''; +expect = '0'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(4) + ' [1,,] '; +array = [1,,]; +actual = ''; +expect = '0'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Array/array-001.js b/js/src/tests/js1_5/Array/array-001.js new file mode 100644 index 000000000..26e1ae256 --- /dev/null +++ b/js/src/tests/js1_5/Array/array-001.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 24 September 2001 + * + * SUMMARY: Truncating arrays that have decimal property names. + * From correspondence with Igor Bukanov <igor@icesoft.no>: + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Truncating arrays that have decimal property names'; +var BIG_INDEX = 4294967290; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var arr = Array(BIG_INDEX); +arr[BIG_INDEX - 1] = 'a'; +arr[BIG_INDEX - 10000] = 'b'; +arr[BIG_INDEX - 0.5] = 'c'; // not an array index - but a valid property name +// Truncate the array - +arr.length = BIG_INDEX - 5000; + + +// Enumerate its properties with for..in +var s = ''; +for (var i in arr) +{ + s += arr[i]; +} + + +/* + * We expect s == 'cb' or 'bc' (EcmaScript does not fix the order). + * Note 'c' is included: for..in includes ALL enumerable properties, + * not just array-index properties. The bug was: Rhino gave s == ''. + */ +status = inSection(1); +actual = sortThis(s); +expect = 'bc'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function sortThis(str) +{ + var chars = str.split(''); + chars = chars.sort(); + return chars.join(''); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/browser.js b/js/src/tests/js1_5/Array/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Array/browser.js diff --git a/js/src/tests/js1_5/Array/regress-101964.js b/js/src/tests/js1_5/Array/regress-101964.js new file mode 100644 index 000000000..ae3adb72d --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-101964.js @@ -0,0 +1,86 @@ +// |reftest| random -- bogus perf test (bug 467263) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + +/* + * Date: 27 September 2001 + * + * SUMMARY: Performance: truncating even very large arrays should be fast! + * See http://bugzilla.mozilla.org/show_bug.cgi?id=101964 + * + * Adjust this testcase if necessary. The FAST constant defines + * an upper bound in milliseconds for any truncation to take. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 101964; +var summary = 'Performance: truncating even very large arrays should be fast!'; +var BIG = 10000000; +var LITTLE = 10; +var FAST = 50; // array truncation should be 50 ms or less to pass the test +var MSG_FAST = 'Truncation took less than ' + FAST + ' ms'; +var MSG_SLOW = 'Truncation took '; +var MSG_MS = ' ms'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + + +status = inSection(1); +var arr = Array(BIG); +var start = new Date(); +arr.length = LITTLE; +actual = elapsedTime(start); +expect = FAST; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function elapsedTime(startTime) +{ + return new Date() - startTime; +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = isThisFast(actual); + expectedvalues[UBound] = isThisFast(expect); + UBound++; +} + + +function isThisFast(ms) +{ + if (ms <= FAST) + return MSG_FAST; + return MSG_SLOW + ms + MSG_MS; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-107138.js b/js/src/tests/js1_5/Array/regress-107138.js new file mode 100644 index 000000000..ff865b550 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-107138.js @@ -0,0 +1,177 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 29 October 2001 + * + * SUMMARY: Regression test for bug 107138 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=107138 + * + * The bug: arr['1'] == undefined instead of arr['1'] == 'one'. + * The bug was intermittent and did not always occur... + * + * The cnSTRESS constant defines how many times to repeat this test. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var cnSTRESS = 10; +var cnDASH = '-'; +var BUGNUMBER = 107138; +var summary = 'Regression test for bug 107138'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var arr = ['zero', 'one', 'two', 'three', 'four', 'five', + 'six', 'seven', 'eight', 'nine', 'ten']; + + +// This bug was intermittent. Stress-test it. +for (var j=0; j<cnSTRESS; j++) +{ + status = inSection(j + cnDASH + 1); + actual = arr[0]; + expect = 'zero'; + addThis(); + + status = inSection(j + cnDASH + 2); + actual = arr['0']; + expect = 'zero'; + addThis(); + + status = inSection(j + cnDASH + 3); + actual = arr[1]; + expect = 'one'; + addThis(); + + status = inSection(j + cnDASH + 4); + actual = arr['1']; + expect = 'one'; + addThis(); + + status = inSection(j + cnDASH + 5); + actual = arr[2]; + expect = 'two'; + addThis(); + + status = inSection(j + cnDASH + 6); + actual = arr['2']; + expect = 'two'; + addThis(); + + status = inSection(j + cnDASH + 7); + actual = arr[3]; + expect = 'three'; + addThis(); + + status = inSection(j + cnDASH + 8); + actual = arr['3']; + expect = 'three'; + addThis(); + + status = inSection(j + cnDASH + 9); + actual = arr[4]; + expect = 'four'; + addThis(); + + status = inSection(j + cnDASH + 10); + actual = arr['4']; + expect = 'four'; + addThis(); + + status = inSection(j + cnDASH + 11); + actual = arr[5]; + expect = 'five'; + addThis(); + + status = inSection(j + cnDASH + 12); + actual = arr['5']; + expect = 'five'; + addThis(); + + status = inSection(j + cnDASH + 13); + actual = arr[6]; + expect = 'six'; + addThis(); + + status = inSection(j + cnDASH + 14); + actual = arr['6']; + expect = 'six'; + addThis(); + + status = inSection(j + cnDASH + 15); + actual = arr[7]; + expect = 'seven'; + addThis(); + + status = inSection(j + cnDASH + 16); + actual = arr['7']; + expect = 'seven'; + addThis(); + + status = inSection(j + cnDASH + 17); + actual = arr[8]; + expect = 'eight'; + addThis(); + + status = inSection(j + cnDASH + 18); + actual = arr['8']; + expect = 'eight'; + addThis(); + + status = inSection(j + cnDASH + 19); + actual = arr[9]; + expect = 'nine'; + addThis(); + + status = inSection(j + cnDASH + 20); + actual = arr['9']; + expect = 'nine'; + addThis(); + + status = inSection(j + cnDASH + 21); + actual = arr[10]; + expect = 'ten'; + addThis(); + + status = inSection(j + cnDASH + 22); + actual = arr['10']; + expect = 'ten'; + addThis(); +} + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-108440.js b/js/src/tests/js1_5/Array/regress-108440.js new file mode 100644 index 000000000..d83c4164a --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-108440.js @@ -0,0 +1,77 @@ +// |reftest| skip-if(Android) -- bug - nsIDOMWindow.crypto throws NS_ERROR_NOT_IMPLEMENTED on Android +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 October 2001 + * SUMMARY: Regression test for bug 108440 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=108440 + * + * We shouldn't crash trying to add an array as an element of itself (!) + * + * Brendan: "...it appears that Array.prototype.toString is unsafe, + * and what's more, ECMA-262 Edition 3 has no helpful words about + * avoiding recursive death on a cycle." + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 108440; +var summary = "Shouldn't crash trying to add an array as an element of itself"; +var self = this; +var temp = ''; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/* + * Explicit test: + */ +var a=[]; +temp = (a[a.length]=a); + +/* + * Implicit test (one of the properties of |self| is |a|) + */ +a=[]; +for(var prop in self) +{ + temp = prop; + temp = (a[a.length] = self[prop]); +} + +/* + * Stressful explicit test + */ +a=[]; +for (var i=0; i<10; i++) +{ + a[a.length] = a; +} + +/* + * Test toString() + */ +a=[]; +for (var i=0; i<10; i++) +{ + a[a.length] = a.toString(); +} + +/* + * Test toSource() - but Rhino doesn't have this, so try...catch it + */ +a=[]; +try +{ + for (var i=0; i<10; i++) + { + a[a.length] = a.toSource(); + } +} +catch(e) +{ +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Array/regress-154338.js b/js/src/tests/js1_5/Array/regress-154338.js new file mode 100644 index 000000000..73b8a7f4b --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-154338.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 26 June 2002 + * SUMMARY: Testing array.join() when separator is a variable, not a literal + * See http://bugzilla.mozilla.org/show_bug.cgi?id=154338 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 154338; +var summary = 'Test array.join() when separator is a variable, not a literal'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Note that x === 'H' and y === 'ome'. + * + * Yet for some reason, using |x| or |y| as the separator + * in arr.join() was causing out-of-memory errors, whereas + * using the literals 'H', 'ome' was not - + * + */ +var x = 'Home'[0]; +var y = ('Home'.split('H'))[1]; + + +status = inSection(1); +var arr = Array('a', 'b'); +actual = arr.join('H'); +expect = 'aHb'; +addThis(); + +status = inSection(2); +arr = Array('a', 'b'); +actual = arr.join(x); +expect = 'aHb'; +addThis(); + +status = inSection(3); +arr = Array('a', 'b'); +actual = arr.join('ome'); +expect = 'aomeb'; +addThis(); + +status = inSection(4); +arr = Array('a', 'b'); +actual = arr.join(y); +expect = 'aomeb'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-157652.js b/js/src/tests/js1_5/Array/regress-157652.js new file mode 100644 index 000000000..9d77802ca --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-157652.js @@ -0,0 +1,122 @@ +// |reftest| skip-if(xulRuntime.XPCOMABI.match(/x86_64|aarch64|ppc64|ppc64le|s390x/)||Android) -- No test results +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 16 July 2002 + * SUMMARY: Testing that Array.sort() doesn't crash on very large arrays + * See http://bugzilla.mozilla.org/show_bug.cgi?id=157652 + * + * How large can a JavaScript array be? + * ECMA-262 Ed.3 Final, Section 15.4.2.2 : new Array(len) + * + * This states that |len| must be a a uint32_t (unsigned 32-bit integer). + * Note the UBound for uint32's is 2^32 -1 = 0xFFFFFFFF = 4,294,967,295. + * + * Check: + * js> var arr = new Array(0xFFFFFFFF) + * js> arr.length + * 4294967295 + * + * js> var arr = new Array(0x100000000) + * RangeError: invalid array length + * + * + * We'll try the largest possible array first, then a couple others. + * We're just testing that we don't crash on Array.sort(). + * + * Try to be good about memory by nulling each array variable after it is + * used. This will tell the garbage collector the memory is no longer needed. + * + * As of 2002-08-13, the JS shell runs out of memory no matter what we do, + * when trying to sort such large arrays. + * + * We only want to test that we don't CRASH on the sort. So it will be OK + * if we get the JS "out of memory" error. Note this terminates the test + * with exit code 3. Therefore we put + * + * |expectExitCode(3);| + * + * The only problem will arise if the JS shell ever DOES have enough memory + * to do the sort. Then this test will terminate with the normal exit code 0 + * and fail. + * + * Right now, I can't see any other way to do this, because "out of memory" + * is not a catchable error: it cannot be trapped with try...catch. + * + * + * FURTHER HEADACHE: Rhino can't seem to handle the largest array: it hangs. + * So we skip this case in Rhino. Here is correspondence with Igor Bukanov. + * He explains that Rhino isn't actually hanging; it's doing the huge sort: + * + * Philip Schwartau wrote: + * + * > Hi, + * > + * > I'm getting a graceful OOM message on trying to sort certain large + * > arrays. But if the array is too big, Rhino simply hangs. Note that ECMA + * > allows array lengths to be anything less than Math.pow(2,32), so the + * > arrays I'm sorting are legal. + * > + * > Note below, I'm getting an instantaneous OOM error on arr.sort() for LEN + * > = Math.pow(2, 30). So shouldn't I also get one for every LEN between + * > that and Math.pow(2, 32)? For some reason, I start to hang with 100% CPU + * > as LEN hits, say, Math.pow(2, 31) and higher. SpiderMonkey gives OOM + * > messages for all of these. Should I file a bug on this? + * + * Igor Bukanov wrote: + * + * This is due to different sorting algorithm Rhino uses when sorting + * arrays with length > Integer.MAX_VALUE. If length can fit Java int, + * Rhino first copies internal spare array to a temporary buffer, and then + * sorts it, otherwise it sorts array directly. In case of very spare + * arrays, that Array(big_number) generates, it is rather inefficient and + * generates OutOfMemory if length fits int. It may be worth in your case + * to optimize sorting to take into account array spareness, but then it + * would be a good idea to file a bug about ineficient sorting of spare + * arrays both in case of Rhino and SpiderMonkey as SM always uses a + * temporary buffer. + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 157652; +var summary = "Testing that Array.sort() doesn't crash on very large arrays"; +var expect = 'No Crash'; +var actual = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +expectExitCode(0); +expectExitCode(5); + +var IN_RHINO = inRhino(); + +try +{ + if (!IN_RHINO) + { + var a1=Array(0xFFFFFFFF); + a1.sort(); + a1 = null; + } + + var a2 = Array(0x40000000); + a2.sort(); + a2=null; + + var a3=Array(0x10000000/4); + a3.sort(); + a3=null; +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-178722.js b/js/src/tests/js1_5/Array/regress-178722.js new file mode 100644 index 000000000..950b1e759 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-178722.js @@ -0,0 +1,130 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 November 2002 + * SUMMARY: arr.sort() should not output |undefined| when |arr| is empty + * See http://bugzilla.mozilla.org/show_bug.cgi?id=178722 + * + * ECMA-262 Ed.3: 15.4.4.11 Array.prototype.sort (comparefn) + * + * 1. Call the [[Get]] method of this object with argument "length". + * 2. Call ToUint32(Result(1)). + * 3. Perform an implementation-dependent sequence of calls to the [[Get]], + * [[Put]], and [[Delete]] methods of this object, etc. etc. + * 4. Return this object. + * + * + * Note that sort() is done in-place on |arr|. In other words, sort() is a + * "destructive" method rather than a "functional" method. The return value + * of |arr.sort()| and |arr| are the same object. + * + * If |arr| is an empty array, the return value of |arr.sort()| should be + * an empty array, not the value |undefined| as was occurring in bug 178722. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 178722; +var summary = 'arr.sort() should not output |undefined| when |arr| is empty'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var arr; + + +// create empty array or pseudo-array objects in various ways +var arr1 = Array(); +var arr2 = new Array(); +var arr3 = []; +var arr4 = [1]; +arr4.pop(); + + +status = inSection(1); +arr = arr1.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr1; +expect = true; +addThis(); + +status = inSection(2); +arr = arr2.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr2; +expect = true; +addThis(); + +status = inSection(3); +arr = arr3.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr3; +expect = true; +addThis(); + +status = inSection(4); +arr = arr4.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr4; +expect = true; +addThis(); + +// now do the same thing, with non-default sorting: +function g() {return 1;} + +status = inSection('1a'); +arr = arr1.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr1; +expect = true; +addThis(); + +status = inSection('2a'); +arr = arr2.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr2; +expect = true; +addThis(); + +status = inSection('3a'); +arr = arr3.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr3; +expect = true; +addThis(); + +status = inSection('4a'); +arr = arr4.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr4; +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-255555.js b/js/src/tests/js1_5/Array/regress-255555.js new file mode 100644 index 000000000..e4b2814b2 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-255555.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 255555; +var summary = 'Array.prototype.sort(comparefn) never passes undefined to comparefn'; +var actual = 'not undefined'; +var expect = 'not undefined'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function comparefn(a,b) +{ + if (typeof a == 'undefined') + { + actual = 'undefined'; + return 1; + } + if (typeof b == 'undefined') + { + actual = 'undefined'; + return -1; + } + return a - b; +} + +var arry = [ 1, 2, undefined ].sort(comparefn) + + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-299644.js b/js/src/tests/js1_5/Array/regress-299644.js new file mode 100644 index 000000000..6a19cf54b --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-299644.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 299644; +var summary = 'Arrays with holes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +actual = (new Array(10).concat()).length; +expect = 10; +reportCompare(expect, actual, '(new Array(10).concat()).length == 10'); + +var a = new Array(10); +actual = true; +expect = true; +for (var p in a) +{ + actual = false; + break; +} +reportCompare(expect, actual, 'Array holes are not enumerable'); diff --git a/js/src/tests/js1_5/Array/regress-300858.js b/js/src/tests/js1_5/Array/regress-300858.js new file mode 100644 index 000000000..278937557 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-300858.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 300858; +var summary = 'Do not crash when sorting array with holes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var arry = []; +arry[6] = 'six'; +arry[8] = 'eight'; +arry[9] = 'nine'; +arry[13] = 'thirteen'; +arry[14] = 'fourteen'; +arry[21] = 'twentyone'; +arry.sort(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-310351.js b/js/src/tests/js1_5/Array/regress-310351.js new file mode 100644 index 000000000..40401c536 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-310351.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310351; +var summary = 'Convert host "list" objects to arrays'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var nodeList = []; +if (typeof document != 'undefined') +{ + nodeList = document.getElementsByTagName('*'); +} +else +{ + printStatus('test using dummy array since no document available'); +} + +var array = Array.prototype.slice.call(nodeList, 0); + +expect = 'Array'; +actual = array.constructor.name; + +// nodeList is live and may change +var saveLength = nodeList.length; + +reportCompare(expect, actual, summary + ': constructor test'); + +expect = saveLength; +actual = array.length; + +reportCompare(expect, actual, summary + ': length test'); +expect = true; +actual = true; + +for (var i = 0; i < saveLength; i++) +{ + if (array[i] != nodeList[i]) + { + actual = false; + summary += ' Comparison failed: array[' + i + ']=' + array[i] + + ', nodeList[' + i + ']=' + nodeList[i]; + break; + } +} + +reportCompare(expect, actual, summary + ': identical elements test'); + diff --git a/js/src/tests/js1_5/Array/regress-311515.js b/js/src/tests/js1_5/Array/regress-311515.js new file mode 100644 index 000000000..c6d4928ce --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-311515.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311515; +var summary = 'Array.sort should skip holes and undefined during sort'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var a = [, 1, , 2, undefined]; + +actual = a.sort().toString(); +expect = '1,2,,,'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-313153.js b/js/src/tests/js1_5/Array/regress-313153.js new file mode 100644 index 000000000..e6c9c979c --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-313153.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313153; +var summary = 'generic native method dispatcher extra actual arguments'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = '1,2,3'; +actual = (function (){return Array.concat.apply([], arguments)})(1,2,3).toString(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-315509-01.js b/js/src/tests/js1_5/Array/regress-315509-01.js new file mode 100644 index 000000000..7d29c5946 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-315509-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 315509; +var summary = 'Array.prototype.unshift on Arrays with holes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var a = [0,1,2,3,4]; +delete a[1]; + +expect = '0,,2,3,4'; +actual = a.toString(); + +reportCompare(expect, actual, summary); + +a.unshift('a','b'); + +expect = 'a,b,0,,2,3,4'; +actual = a.toString(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-330812.js b/js/src/tests/js1_5/Array/regress-330812.js new file mode 100644 index 000000000..c48f4c886 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-330812.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(xulRuntime.XPCOMABI.match(/x86_64|aarch64|ppc64|ppc64le|s390x/)||Android) -- No test results +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330812; +var summary = 'Making Array(1<<29).sort() less problematic'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(3); + +printStatus('This test passes if the browser does not hang or crash'); +printStatus('This test expects exit code 0 or 3 to indicate out of memory'); + +try +{ + var result = Array(1 << 29).sort(); +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-345961.js b/js/src/tests/js1_5/Array/regress-345961.js new file mode 100644 index 000000000..8c2e03c20 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-345961.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 345961; +var summary = 'Array.prototype.shift should preserve holes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = false; + + var array = new Array(2); + array.shift(); + actual = array.hasOwnProperty(0); + reportCompare(expect, actual, summary); + + array=Array(1); + array.shift(1); + actual = array.hasOwnProperty(1); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-348810.js b/js/src/tests/js1_5/Array/regress-348810.js new file mode 100644 index 000000000..d5bd2070d --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-348810.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 348810; +var summary = 'Do not crash when sorting an array of holes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = Array(1); + a.sort(); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-350256-01.js b/js/src/tests/js1_5/Array/regress-350256-01.js new file mode 100644 index 000000000..5f68522f9 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-350256-01.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350256; +var summary = 'Array.apply maximum arguments'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(Math.pow(2, 16)); +//----------------------------------------------------------------------------- + +function test(length) +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var a = new Array(); + a[length - 2] = 'length-2'; + a[length - 1] = 'length-1'; + + var b = Array.apply(null, a); + + expect = length + ',length-2,length-1'; + actual = b.length + "," + b[length - 2] + "," + b[length - 1]; + reportCompare(expect, actual, summary); + + function f() { + return arguments.length + "," + arguments[length - 2] + "," + + arguments[length - 1]; + } + + expect = length + ',length-2,length-1'; + actual = f.apply(null, a); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-350256-02.js b/js/src/tests/js1_5/Array/regress-350256-02.js new file mode 100644 index 000000000..81472faa9 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-350256-02.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350256; +var summary = 'Array.apply maximum arguments'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); +reportCompare(true, true, ""); + +//----------------------------------------------------------------------------- +if (this.getMaxArgs) + test(getMaxArgs()); + +//----------------------------------------------------------------------------- + +function test(length) +{ + enterFunc ('test'); + + var a = new Array(); + a[length - 2] = 'length-2'; + a[length - 1] = 'length-1'; + + var b = Array.apply(null, a); + + expect = length + ',length-2,length-1'; + actual = b.length + "," + b[length - 2] + "," + b[length - 1]; + reportCompare(expect, actual, summary); + + function f() { + return arguments.length + "," + arguments[length - 2] + "," + + arguments[length - 1]; + } + + expect = length + ',length-2,length-1'; + actual = f.apply(null, a); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-360681-01.js b/js/src/tests/js1_5/Array/regress-360681-01.js new file mode 100644 index 000000000..ac22e45b4 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-360681-01.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360681; +var summary = 'Regression from bug 224128'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + var a = Array(3); + a[0] = 1; + a[1] = 2; + a.sort(function () { gc(); return 1; }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-360681-02.js b/js/src/tests/js1_5/Array/regress-360681-02.js new file mode 100644 index 000000000..4ff9ac9cc --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-360681-02.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360681; +var summary = 'Regression from bug 224128'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + var N = 1000; + +// Make an array with a hole at the end + var a = Array(N); + for (i = 0; i < N - 1; ++i) + a[i] = 1; + +// array_sort due for array with N elements with allocates a temporary vector +// with 2*N. Lets create strings that on 32 and 64 bit CPU cause allocation +// of the same amount of memory + 1 word for their char arrays. After we GC +// strings with a reasonable malloc implementation that memory will be most +// likely reused in array_sort for the temporary vector. Then the bug causes +// accessing the one-beyond-the-aloocation word and re-interpretation of +// 0xFFF0FFF0 as GC thing. + + var str1 = Array(2*(2*N + 1) + 1).join(String.fromCharCode(0xFFF0)); + var str2 = Array(4*(2*N + 1) + 1).join(String.fromCharCode(0xFFF0)); + gc(); + str1 = str2 = null; + gc(); + + var firstCall = true; + a.sort(function (a, b) { + if (firstCall) { + firstCall = false; + gc(); + } + return a - b; + }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-364104.js b/js/src/tests/js1_5/Array/regress-364104.js new file mode 100644 index 000000000..05d8953b6 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-364104.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "364104"; +var summary = "Array.prototype.indexOf, Array.prototype.lastIndexOf issues " + + "with the optional second fromIndex argument"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +try +{ + // indexOf + if ([2].indexOf(2) != 0) + throw "indexOf: not finding 2!?"; + if ([2].indexOf(2, 0) != 0) + throw "indexOf: not interpreting explicit second argument 0!"; + if ([2].indexOf(2, 1) != -1) + throw "indexOf: ignoring second argument with value equal to array length!"; + if ([2].indexOf(2, 2) != -1) + throw "indexOf: ignoring second argument greater than array length!"; + if ([2].indexOf(2, 17) != -1) + throw "indexOf: ignoring large second argument!"; + if ([2].indexOf(2, -5) != 0) + throw "indexOf: calculated fromIndex < 0, should search entire array!"; + if ([2, 3].indexOf(2, -1) != -1) + throw "indexOf: not handling index == (-1 + 2), element 2 correctly!"; + if ([2, 3].indexOf(3, -1) != 1) + throw "indexOf: not handling index == (-1 + 2), element 3 correctly!"; + + // lastIndexOf + if ([2].lastIndexOf(2) != 0) + throw "lastIndexOf: not finding 2!?"; + if ([2].lastIndexOf(2, 1) != 0) + throw "lastIndexOf: not interpreting explicit second argument 1!?"; + if ([2].lastIndexOf(2, 17) != 0) + throw "lastIndexOf: should have searched entire array!"; + if ([2].lastIndexOf(2, -5) != -1) + throw "lastIndexOf: -5 + 1 < 0, so array shouldn't be searched!"; + if ([2].lastIndexOf(2, -2) != -1) + throw "lastIndexOf: -2 + 1 < 0, so array shouldn't be searched!"; + if ([2, 3].lastIndexOf(2, -1) != 0) + throw "lastIndexOf: not handling index == (-1 + 2), element 2 correctly!"; + if ([2, 3].lastIndexOf(3, -1) != 1) + throw "lastIndexOf: not handling index == (-1 + 2), element 3 correctly!"; + if ([2, 3].lastIndexOf(2, -2) != 0) + throw "lastIndexOf: not handling index == (-2 + 2), element 2 correctly!"; + if ([2, 3].lastIndexOf(3, -2) != -1) + throw "lastIndexOf: not handling index == (-2 + 2), element 3 correctly!"; + if ([2, 3].lastIndexOf(2, -3) != -1) + throw "lastIndexOf: calculated fromIndex < 0, shouldn't search array for 2!"; + if ([2, 3].lastIndexOf(3, -3) != -1) + throw "lastIndexOf: calculated fromIndex < 0, shouldn't search array for 3!"; +} +catch (e) +{ + failed = e; +} + + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Array/regress-422286.js b/js/src/tests/js1_5/Array/regress-422286.js new file mode 100644 index 000000000..afd18cbe1 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-422286.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 422286; +var summary = 'Array slice when array\'s length is assigned'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Array(10000).slice(1); + a = Array(1); + a.length = 10000; + a.slice(1); + a = Array(1); + a.length = 10000; + a.slice(-1); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-424954.js b/js/src/tests/js1_5/Array/regress-424954.js new file mode 100644 index 000000000..fa7b59cc5 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-424954.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 424954; +var summary = 'Do not crash with [].concat(null)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + [].concat(null); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-451483.js b/js/src/tests/js1_5/Array/regress-451483.js new file mode 100644 index 000000000..662f31292 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-451483.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451483; +var summary = '[].splice.call(0) == []'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = true; + var result = [].splice.call(0); + print('[].splice.call(0) = ' + result); + actual = result instanceof Array && result.length == 0; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-451906.js b/js/src/tests/js1_5/Array/regress-451906.js new file mode 100644 index 000000000..64d65692f --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-451906.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451906; +var summary = 'Index array by numeric string'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 1; + var s=[1,2,3]; + actual = s['0']; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-456845.js b/js/src/tests/js1_5/Array/regress-456845.js new file mode 100644 index 000000000..dc34935f5 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-456845.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456845; +var summary = 'JIT: popArrs[a].pop is not a function'; +var actual = 'No Error'; +var expect = 'No Error'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + try + { + var chars = '0123456789abcdef'; + var size = 1000; + var mult = 100; + + var arr = []; + var lsize = size; + while (lsize--) { arr.push(chars); } + + var popArrs = []; + for (var i=0; i<mult; i++) { popArrs.push(arr.slice()); } + + + for(var a=0;a<mult;a++) { + var x; while (x = popArrs[a].pop()) { } + } + + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-465980-01.js b/js/src/tests/js1_5/Array/regress-465980-01.js new file mode 100644 index 000000000..fd36febd4 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-465980-01.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465980; +var summary = 'Do not crash @ InitArrayElements'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + var a = new Array(4294967294); + a.push("foo", "bar"); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-465980-02.js b/js/src/tests/js1_5/Array/regress-465980-02.js new file mode 100755 index 000000000..08bab06d4 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-465980-02.js @@ -0,0 +1,170 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465980; +var summary = 'Do not crash @ InitArrayElements'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function describe(name, startLength, pushArgs, expectThrow, expectLength) + { + return name + "(" + startLength + ", " + + "[" + pushArgs.join(", ") + "], " + + expectThrow + ", " + + expectLength + ")"; + } + + var push = Array.prototype.push; + var unshift = Array.prototype.unshift; + + function testArrayPush(startLength, pushArgs, expectThrow, expectLength) + { + print("running testArrayPush(" + + startLength + ", " + + "[" + pushArgs.join(", ") + "], " + + expectThrow + ", " + + expectLength + ")..."); + var a = new Array(startLength); + try + { + push.apply(a, pushArgs); + if (expectThrow) + { + throw "expected to throw for " + + describe("testArrayPush", startLength, pushArgs, expectThrow, + expectLength); + } + } + catch (e) + { + if (!(e instanceof RangeError)) + { + throw "unexpected exception type thrown: " + e + " for " + + describe("testArrayPush", startLength, pushArgs, expectThrow, + expectLength); + } + if (!expectThrow) + { + throw "unexpected exception " + e + " for " + + describe("testArrayPush", startLength, pushArgs, expectThrow, + expectLength); + } + } + + if (a.length !== expectLength) + { + throw "unexpected modified-array length for " + + describe("testArrayPush", startLength, pushArgs, expectThrow, + expectLength); + } + + for (var i = 0, sz = pushArgs.length; i < sz; i++) + { + var index = i + startLength; + if (a[index] !== pushArgs[i]) + { + throw "unexpected value " + a[index] + + " at index " + index + " (" + i + ") during " + + describe("testArrayPush", startLength, pushArgs, expectThrow, + expectLength) + ", expected " + pushArgs[i]; + } + } + } + + function testArrayUnshift(startLength, unshiftArgs, expectThrow, expectLength) + { + print("running testArrayUnshift(" + + startLength + ", " + + "[" + unshiftArgs.join(", ") + "], " + + expectThrow + ", " + + expectLength + ")..."); + var a = new Array(startLength); + try + { + unshift.apply(a, unshiftArgs); + if (expectThrow) + { + throw "expected to throw for " + + describe("testArrayUnshift", startLength, unshiftArgs, expectThrow, + expectLength); + } + } + catch (e) + { + if (!(e instanceof RangeError)) + { + throw "unexpected exception type thrown: " + e + " for " + + describe("testArrayUnshift", startLength, unshiftArgs, expectThrow, + expectLength); + } + if (!expectThrow) + { + throw "unexpected exception " + e + " for " + + describe("testArrayUnshift", startLength, unshiftArgs, expectThrow, + expectLength); + } + } + + if (a.length !== expectLength) + { + throw "unexpected modified-array length for " + + describe("testArrayUnshift", startLength, unshiftArgs, expectThrow, + expectLength); + } + + for (var i = 0, sz = unshiftArgs.length; i < sz; i++) + { + if (a[i] !== unshiftArgs[i]) + { + throw "unexpected value at index " + i + " during " + + describe("testArrayUnshift", startLength, unshiftArgs, expectThrow, + expectLength); + } + } + } + + var failed = true; + + try + { + var foo = "foo", bar = "bar", baz = "baz"; + + testArrayPush(4294967294, [foo], false, 4294967295); + testArrayPush(4294967294, [foo, bar], true, 4294967295); + testArrayPush(4294967294, [foo, bar, baz], true, 4294967295); + testArrayPush(4294967295, [foo], true, 4294967295); + testArrayPush(4294967295, [foo, bar], true, 4294967295); + testArrayPush(4294967295, [foo, bar, baz], true, 4294967295); + + testArrayUnshift(4294967294, [foo], false, 4294967295); + testArrayUnshift(4294967294, [foo, bar], true, 4294967294); + testArrayUnshift(4294967294, [foo, bar, baz], true, 4294967294); + testArrayUnshift(4294967295, [foo], true, 4294967295); + testArrayUnshift(4294967295, [foo, bar], true, 4294967295); + testArrayUnshift(4294967295, [foo, bar, baz], true, 4294967295); + + } + catch (e) + { + actual = e + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-474529.js b/js/src/tests/js1_5/Array/regress-474529.js new file mode 100644 index 000000000..ee2cb21c1 --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-474529.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 474529; +var summary = 'Do not assert: _buf->_nextPage'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function main() { + + function timeit(N, buildArrayString) { + return Function("N", + "var d1 = +new Date;" + + "while (N--) var x = " + buildArrayString + + "; return +new Date - d1")(N); + } + + function reportResults(size, N, literalMs, newArrayMs, arrayMs) { + print(Array.join(arguments, "\t")); + } + + var repetitions = [ 9000, 7000, 4000, 2000, 2000, 2000, 800, 800, 800, 300, 100, 100 ] + for (var zeros = "0, ", i = 0; i < repetitions.length; ++i) { + var N = repetitions[i]; + reportResults((1 << i) + 1, N, + timeit(N, "[" + zeros + " 0 ]"), + timeit(N, "new Array(" + zeros + " 0)"), + timeit(N, "Array(" + zeros + " 0)")); + zeros += zeros; + } + } + + gc(); + print("Size\t\Rep.\t\Literal\tnew Arr\tArray()"); + print("====\t=====\t=======\t=======\t======="); + main(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/regress-94257.js b/js/src/tests/js1_5/Array/regress-94257.js new file mode 100644 index 000000000..ab95dd3ef --- /dev/null +++ b/js/src/tests/js1_5/Array/regress-94257.js @@ -0,0 +1,86 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 30 October 2001 + * + * SUMMARY: Regression test for bug 94257 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=94257 + * + * Rhino used to crash on this code; specifically, on the line + * + * arr[1+1] += 2; + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 94257; +var summary = "Making sure we don't crash on this code -"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var arr = new Array(6); +arr[1+1] = 1; +arr[1+1] += 2; + + +status = inSection(1); +actual = arr[1+1]; +expect = 3; +addThis(); + +status = inSection(2); +actual = arr[1+1+1]; +expect = undefined; +addThis(); + +status = inSection(3); +actual = arr[1]; +expect = undefined; +addThis(); + + +arr[1+2] = 'Hello'; + + +status = inSection(4); +actual = arr[1+1+1]; +expect = 'Hello'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Array/shell.js b/js/src/tests/js1_5/Array/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Array/shell.js diff --git a/js/src/tests/js1_5/Date/browser.js b/js/src/tests/js1_5/Date/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Date/browser.js diff --git a/js/src/tests/js1_5/Date/regress-188211.js b/js/src/tests/js1_5/Date/regress-188211.js new file mode 100644 index 000000000..663611b81 --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-188211.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 188211; +var summary = 'Date.prototype.toLocaleString() error on future dates'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var dt; + +dt = new Date(208e10); +printStatus(dt+''); +expect = true; +actual = dt.toLocaleString().indexOf('2035') >= 0; +reportCompare(expect, actual, summary + ': new Date(208e10)'); + +dt = new Date(209e10); +printStatus(dt+''); +expect = true; +actual = dt.toLocaleString().indexOf('2036') >= 0; +reportCompare(expect, actual, summary + ': new Date(209e10)'); diff --git a/js/src/tests/js1_5/Date/regress-301738-01.js b/js/src/tests/js1_5/Date/regress-301738-01.js new file mode 100644 index 000000000..8f5ae7d30 --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-301738-01.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 301738; +var summary = 'Date parse compatibilty with MSIE'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* + Case 1. The input string contains an English month name. + The form of the string can be month f l, or f month l, or + f l month which each evaluate to the same date. + If f and l are both greater than or equal to 70, or + both less than 70, the date is invalid. + The year is taken to be the greater of the values f, l. + If the year is greater than or equal to 70 and less than 100, + it is considered to be the number of years after 1900. +*/ + +var month = 'January'; +var f; +var l; + +f = l = 0; +expect = true; + +actual = isNaN(new Date(month + ' ' + f + ' ' + l)); +reportCompare(expect, actual, 'January 0 0 is invalid'); + +actual = isNaN(new Date(f + ' ' + l + ' ' + month)); +reportCompare(expect, actual, '0 0 January is invalid'); + +actual = isNaN(new Date(f + ' ' + month + ' ' + l)); +reportCompare(expect, actual, '0 January 0 is invalid'); + +f = l = 70; + +actual = isNaN(new Date(month + ' ' + f + ' ' + l)); +reportCompare(expect, actual, 'January 70 70 is invalid'); + +actual = isNaN(new Date(f + ' ' + l + ' ' + month)); +reportCompare(expect, actual, '70 70 January is invalid'); + +actual = isNaN(new Date(f + ' ' + month + ' ' + l)); +reportCompare(expect, actual, '70 January 70 is invalid'); + +f = 100; +l = 15; + +// year, month, day +expect = new Date(f, 0, l).toString(); + +actual = new Date(month + ' ' + f + ' ' + l).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = new Date(f + ' ' + l + ' ' + month).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = new Date(f + ' ' + month + ' ' + l).toString(); +reportCompare(expect, actual, 'f month l'); + +f = 80; +l = 15; + +// year, month, day +expect = (new Date(f, 0, l)).toString(); + +actual = (new Date(month + ' ' + f + ' ' + l)).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = (new Date(f + ' ' + l + ' ' + month)).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = (new Date(f + ' ' + month + ' ' + l)).toString(); +reportCompare(expect, actual, 'f month l'); + +f = 2040; +l = 15; + +// year, month, day +expect = (new Date(f, 0, l)).toString(); + +actual = (new Date(month + ' ' + f + ' ' + l)).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = (new Date(f + ' ' + l + ' ' + month)).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = (new Date(f + ' ' + month + ' ' + l)).toString(); +reportCompare(expect, actual, 'f month l'); + diff --git a/js/src/tests/js1_5/Date/regress-309925-01.js b/js/src/tests/js1_5/Date/regress-309925-01.js new file mode 100644 index 000000000..ee6daaffc --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-309925-01.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 309925; +var summary = 'Correctly parse Date strings with HH:MM'; +var actual = new Date('Sep 24, 11:58 105') + ''; +var expect = new Date('Sep 24, 11:58:00 105') + ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Date/regress-309925-02.js b/js/src/tests/js1_5/Date/regress-309925-02.js new file mode 100644 index 000000000..60bbfc33b --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-309925-02.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 309925; +var summary = 'Correctly parse Date strings with HH:MM(comment)'; +var actual = new Date('Sep 24, 11:58(comment) 105') + ''; +var expect = new Date('Sep 24, 11:58:00 (comment) 105') + ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Date/regress-346027.js b/js/src/tests/js1_5/Date/regress-346027.js new file mode 100644 index 000000000..0910c5c7e --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-346027.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346027; +var summary = 'Date.prototype.setFullYear()'; +var actual = ''; +var expect = true; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var d = new Date(); + d.setFullYear(); + actual = isNaN(d.getFullYear()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Date/regress-346363.js b/js/src/tests/js1_5/Date/regress-346363.js new file mode 100644 index 000000000..a4f44b5df --- /dev/null +++ b/js/src/tests/js1_5/Date/regress-346363.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346363; +var summary = 'Date.prototype.setFullYear()'; +var actual = ''; +var expect = true; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var d = new Date(); + d.setFullYear(); + d.setFullYear(2006); + actual = d.getFullYear() == 2006; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Date/shell.js b/js/src/tests/js1_5/Date/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Date/shell.js diff --git a/js/src/tests/js1_5/Error/browser.js b/js/src/tests/js1_5/Error/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Error/browser.js diff --git a/js/src/tests/js1_5/Error/constructor-ordering.js b/js/src/tests/js1_5/Error/constructor-ordering.js new file mode 100644 index 000000000..dbcc2e604 --- /dev/null +++ b/js/src/tests/js1_5/Error/constructor-ordering.js @@ -0,0 +1,17 @@ +var order = 0; +function assertOrdering(ordering) { + assertEq(order, ordering); + order++; +} + +// Spec mandates that the prototype is looked up /before/ we toString the +// argument. +var handler = { get() { assertOrdering(0); return Error.prototype } }; +var errorProxy = new Proxy(Error, handler); + +var toStringable = { toString() { assertOrdering(1); return "Argument"; } }; + +new errorProxy(toStringable); + +if (typeof reportCompare === 'function') + reportCompare(0,0,"OK"); diff --git a/js/src/tests/js1_5/Error/regress-354246.js b/js/src/tests/js1_5/Error/regress-354246.js new file mode 100644 index 000000000..a2178c913 --- /dev/null +++ b/js/src/tests/js1_5/Error/regress-354246.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354246; +var summary = 'calling Error constructor with object with bad toString'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '13'; + + actual += '1'; + try + { + new Error({toString: function() { x.y } }); + } + catch(e) + { + } + actual += '3'; + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Error/regress-412324.js b/js/src/tests/js1_5/Error/regress-412324.js new file mode 100644 index 000000000..d9debaa89 --- /dev/null +++ b/js/src/tests/js1_5/Error/regress-412324.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 412324; +var summary = 'Allow function Error(){} for the love of Pete'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function Error() {} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Error/regress-465377.js b/js/src/tests/js1_5/Error/regress-465377.js new file mode 100644 index 000000000..4b8800621 --- /dev/null +++ b/js/src/tests/js1_5/Error/regress-465377.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465377; +var summary = 'instanceof relations between Error objects'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Exception'; + + try + { + var list = [ + "Error", + "InternalError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + var instances = []; + + for (var i = 0; i != list.length; ++i) { + var name = list[i]; + var constructor = this[name]; + var tmp = constructor.name; + if (tmp !== name) + throw "Bad value for "+name+".name: "+uneval(tmp); + instances[i] = new constructor(); + } + + for (var i = 0; i != instances.length; ++i) { + var instance = instances[i]; + var name = instance.name; + var constructor = instance.constructor; + if (constructor !== this[name]) + throw "Bad value of (new "+name+").constructor: "+uneval(tmp); + var tmp = constructor.name; + if (tmp !== name) + throw "Bad value for constructor.name: "+uneval(tmp); + if (!(instance instanceof Object)) + throw "Bad instanceof Object for "+name; + if (!(instance instanceof Error)) + throw "Bad instanceof Error for "+name; + if (!(instance instanceof constructor)) + throw "Bad instanceof constructor for "+name; + if (instance instanceof Function) + throw "Bad instanceof Function for "+name; + for (var j = 1; j != instances.length; ++j) { + if (i != j && instance instanceof instances[j].constructor) { + throw "Unexpected (new "+name+") instanceof "+ instances[j].name; + } + } + } + + print("OK"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Error/shell.js b/js/src/tests/js1_5/Error/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Error/shell.js diff --git a/js/src/tests/js1_5/Exceptions/browser.js b/js/src/tests/js1_5/Exceptions/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/browser.js diff --git a/js/src/tests/js1_5/Exceptions/catchguard-002-n.js b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js new file mode 100644 index 000000000..64c8ea081 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "var in catch clause should have caused an error."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard var declaration negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (var e) + { + actual = e + ''; + } + + reportCompare(expect, actual, DESCRIPTION); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/Exceptions/catchguard-003-n.js b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js new file mode 100644 index 000000000..e9e99eb49 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "Illegally constructed catchguard should have thrown an exception."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test #2."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) + { + actual = e + ': 1'; + } + catch (e) /* two non-guarded catch statements should generate an error */ + { + actual = e + ': 2'; + } + + reportCompare(expect, actual, DESCRIPTION); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/Exceptions/errstack-001.js b/js/src/tests/js1_5/Exceptions/errstack-001.js new file mode 100644 index 000000000..834ce037b --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/errstack-001.js @@ -0,0 +1,245 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 28 Feb 2002 + * SUMMARY: Testing that Error.stack distinguishes between: + * + * A) top-level calls: myFunc(); + * B) no-name function calls: function() { myFunc();} () + * + * The stack frame for A) should begin with '@' + * The stack frame for B) should begin with '()' + * + * This behavior was coded by Brendan during his fix for bug 127136. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=127136#c13 + * + * Note: our function getStackFrames(err) orders the array of stack frames + * so that the 0th element will correspond to the highest frame, i.e. will + * correspond to a line in top-level code. The 1st element will correspond + * to the function that is called first, and so on... + * + * NOTE: At present Rhino does not have an Error.stack property. It is an + * ECMA extension, see http://bugzilla.mozilla.org/show_bug.cgi?id=123177 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Error.stack'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var myErr = ''; +var stackFrames = ''; + + +function A(x,y) +{ + return B(x+1,y+1); +} + +function B(x,z) +{ + return C(x+1,z+1); +} + +function C(x,y) +{ + return D(x+1,y+1); +} + +function D(x,z) +{ + try + { + throw new Error('meep!'); + } + catch (e) + { + return e; + } +} + + +myErr = A(44,13); +stackFrames = getStackFrames(myErr); +status = inSection(1); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(2); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(3); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(4); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(5); +actual = stackFrames[4].substring(0,2); +expect = 'D@'; +addThis(); + + + +myErr = A('44:foo','13:bar'); +stackFrames = getStackFrames(myErr); +status = inSection(6); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(7); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(8); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(9); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(10); +actual = stackFrames[4].substring(0,2); +expect = 'D@';; +addThis(); + + + +/* + * Make the first frame occur in a function with an empty name - + */ +myErr = function() { return A(44,13); } (); +stackFrames = getStackFrames(myErr); +status = inSection(11); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(12); +actual = stackFrames[1].substring(0,7); +expect = 'myErr<@'; +addThis(); + +status = inSection(13); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make the first frame occur in a function with name 'anonymous' - + */ +var f = Function('return A(44,13);'); +myErr = f(); +stackFrames = getStackFrames(myErr); +status = inSection(14); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(15); +actual = stackFrames[1].substring(0,10); +expect = 'anonymous@'; +addThis(); + +status = inSection(16); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make a user-defined error via the Error() function - + */ +var message = 'Hi there!'; var fileName = 'file name'; var lineNumber = 0; +myErr = Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(17); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + +/* + * Now use the |new| keyword. Re-use the same params - + */ +myErr = new Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(18); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Split the string |err.stack| along its '\n' delimiter. + * As of 2002-02-28 |err.stack| ends with the delimiter, so + * the resulting array has an empty string as its last element. + * + * Pop that useless element off before doing anything. + * Then reverse the array, for convenience of indexing - + */ +function getStackFrames(err) +{ + var arr = err.stack.split('\n'); + arr.pop(); + return arr.reverse(); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-121658.js b/js/src/tests/js1_5/Exceptions/regress-121658.js new file mode 100644 index 000000000..8da92a7ec --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-121658.js @@ -0,0 +1,124 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 24 Jan 2002 + * SUMMARY: "Too much recursion" errors should be safely caught by try...catch + * See http://bugzilla.mozilla.org/show_bug.cgi?id=121658 + * + * In the cases below, we expect i>0. The bug was filed because we + * were getting i===0; i.e. |i| did not retain the value it had at the + * location of the error. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 121658; +var msg = '"Too much recursion" errors should be safely caught by try...catch'; +var TEST_PASSED = 'i retained the value it had at location of error'; +var TEST_FAILED = 'i did NOT retain this value'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var i; + + +function f() +{ + ++i; + + // try...catch should catch the "too much recursion" error to ensue + try + { + f(); + } + catch(e) + { + } +} + +i=0; +f(); +status = inSection(1); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in function scope - +function g() +{ + f(); +} + +i=0; +g(); +status = inSection(2); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in eval scope - +var sEval = 'function h(){++i; try{h();} catch(e){}}; i=0; h();'; +eval(sEval); +status = inSection(3); +actual = (i>0); +expect = true; +addThis(); + + + +// Try in eval scope and mix functions up - +sEval = 'function a(){++i; try{h();} catch(e){}}; i=0; a();'; +eval(sEval); +status = inSection(4); +actual = (i>0); +expect = true; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = formatThis(actual); + expectedvalues[UBound] = formatThis(expect); + UBound++; +} + + +function formatThis(bool) +{ + return bool? TEST_PASSED : TEST_FAILED; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(msg); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-123002.js b/js/src/tests/js1_5/Exceptions/regress-123002.js new file mode 100644 index 000000000..ab9d73b60 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-123002.js @@ -0,0 +1,93 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 01 Feb 2002 + * SUMMARY: Testing Error.length + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123002 + * + * NOTE: Error.length should equal the length of FormalParameterList of the + * Error constructor. This is currently 1 in Rhino, 3 in SpiderMonkey. + * + * The difference is due to http://bugzilla.mozilla.org/show_bug.cgi?id=50447. + * As a result of that bug, SpiderMonkey has extended ECMA to allow two new + * parameters to Error constructors: + * + * Rhino: new Error (message) + * SpiderMonkey: new Error (message, fileName, lineNumber) + * + * NOTE: since we have hard-coded the length expectations, this testcase will + * have to be changed if the Error FormalParameterList is ever changed again. + * + * To do this, just change the two LENGTH constants below - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 123002; +var summary = 'Testing Error.length'; +var QUOTE = '"'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var LENGTH_EXPECTED = 1; + +/* + * The various NativeError objects; see ECMA-262 Edition 3, Section 15.11.6 + */ +var errObjects = [new Error(), new EvalError(), new RangeError(), + new ReferenceError(), new SyntaxError(), new TypeError(), new URIError()]; + + +for (var i in errObjects) +{ + var err = errObjects[i]; + status = inSection(quoteThis(err.name)); + actual = Error.length; + expect = LENGTH_EXPECTED; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function quoteThis(text) +{ + return QUOTE + text + QUOTE; +} diff --git a/js/src/tests/js1_5/Exceptions/regress-257751.js b/js/src/tests/js1_5/Exceptions/regress-257751.js new file mode 100644 index 000000000..f95dedff4 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-257751.js @@ -0,0 +1,92 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 257751; +var summary = 'RegExp Syntax Errors should have lineNumber and fileName'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; +var re; + +status = summary + ' ' + inSection(1) + ' RegExp("\\\\") '; +try +{ + expect = 'Pass'; + re = RegExp('\\'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' RegExp(")") '; +try +{ + expect = 'Pass'; + re = RegExp(')'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' /\\\\/ '; +try +{ + expect = 'Pass'; + re = eval('/\\/'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(4) + ' /)/ '; +try +{ + expect = 'Pass'; + re = eval('/)/'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Exceptions/regress-273931.js b/js/src/tests/js1_5/Exceptions/regress-273931.js new file mode 100644 index 000000000..000b5f310 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-273931.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 273931; +var summary = 'Pop scope chain in exception handling'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' '; +try +{ + with ({foo:"bar"}) + throw 42; +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' '; +try +{ + with ({foo:"bar"}) + eval("throw 42"); +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' '; +try +{ + var s = "throw 42"; + with ({foo:"bar"}) + eval(s); +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Exceptions/regress-315147.js b/js/src/tests/js1_5/Exceptions/regress-315147.js new file mode 100644 index 000000000..49b49ae5f --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-315147.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 315147; +var summary = 'Error JSMSG_UNDEFINED_PROP should be JSEXN_REFERENCEERR'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var o = {}; + +try +{ + o.foo; + actual = 'no error'; +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Exceptions/regress-332472.js b/js/src/tests/js1_5/Exceptions/regress-332472.js new file mode 100644 index 000000000..df17f2ebe --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-332472.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 332472; +var summary = 'new RegExp() ignores string boundaries when throwing exceptions'; +var actual = ''; +var expect = true; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str1 = "?asdf\nAnd you really shouldn't see this!"; +var str2 = str1.substr(0, 5); +try { + new RegExp(str2); +} +catch(ex) { + printStatus(ex); + actual = ex instanceof SyntaxError; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Exceptions/regress-333728.js b/js/src/tests/js1_5/Exceptions/regress-333728.js new file mode 100644 index 000000000..bf6f4ea34 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-333728.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 333728; +var summary = 'Throw ReferenceErrors for typeof(...undef)'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + actual = typeof (0, undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (0, undef)'); + +try +{ + actual = typeof (0 || undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (0 || undef)'); + +try +{ + actual = typeof (1 && undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (1 && undef)'); + +/* + try + { + actual = typeof (0 ? 0 : undef); + } + catch(ex) + { + actual = ex.name; + } + + reportCompare(expect, actual, summary + ': typeof (0 ? 0 : undef)'); +*/ + +/* + try + { + actual = typeof (1 ? undef : 0); + } + catch(ex) + { + actual = ex.name; + } + + reportCompare(expect, actual, summary + ': typeof (1 ? undef : 0)'); +*/ + +try +{ + actual = typeof (!this ? 0 : undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (!this ? 0 : undef)'); diff --git a/js/src/tests/js1_5/Exceptions/regress-342359.js b/js/src/tests/js1_5/Exceptions/regress-342359.js new file mode 100644 index 000000000..af5e2647f --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-342359.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 342359; +var summary = 'Overriding ReferenceError should stick'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// work around bug 376957 +var SavedReferenceError = ReferenceError; + +try +{ + ReferenceError = 5; +} +catch(ex) +{ +} + +try +{ + foo.blitz; +} +catch(ex) +{ +} + +if (SavedReferenceError == ReferenceError) +{ + actual = expect = 'Test ignored due to bug 376957'; +} +else +{ + expect = 5; + actual = ReferenceError; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Exceptions/regress-347674.js b/js/src/tests/js1_5/Exceptions/regress-347674.js new file mode 100644 index 000000000..63bc36616 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-347674.js @@ -0,0 +1,63 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "347674"; +var summary = "ReferenceError thrown when accessing exception bound in a " + + "catch block in a try block within that catch block"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +function foo() +{ + try + { + throw "32.9"; + } + catch (e) + { + try + { + var errorCode = /^(\d+)\s+.*$/.exec(e)[1]; + } + catch (e2) + { + void("*** internal error: e == " + e + ", e2 == " + e2); + throw e2; + } + } +} + +try +{ + try + { + foo(); + } + catch (ex) + { + if (!(ex instanceof TypeError)) + throw "Wrong value thrown!\n" + + " expected: a TypeError ('32.9' doesn't match the regexp)\n" + + " actual: " + ex; + } +} +catch (e) +{ + failed = e; +} + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Exceptions/regress-350650-n.js b/js/src/tests/js1_5/Exceptions/regress-350650-n.js new file mode 100644 index 000000000..aafb6734a --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-350650-n.js @@ -0,0 +1,31 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350650; +var summary = 'js reports "uncaught exception'; +var actual = 'Error'; +var expect = 'Error'; + +expectExitCode(3); + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exc() { this.toString = function() { return "EXC"; } } + throw new exc(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-350837.js b/js/src/tests/js1_5/Exceptions/regress-350837.js new file mode 100644 index 000000000..f15cba4d0 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-350837.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350837; +var summary = 'clear cx->throwing in finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'F'; + + function f() + { + actual = "F"; + } + + try + { + try { + throw 1; + } finally { + f.call(this); + } + } + catch(ex) + { + reportCompare(1, ex, summary); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/shell.js b/js/src/tests/js1_5/Exceptions/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/shell.js diff --git a/js/src/tests/js1_5/Expressions/browser.js b/js/src/tests/js1_5/Expressions/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Expressions/browser.js diff --git a/js/src/tests/js1_5/Expressions/regress-192288.js b/js/src/tests/js1_5/Expressions/regress-192288.js new file mode 100644 index 000000000..da4e35824 --- /dev/null +++ b/js/src/tests/js1_5/Expressions/regress-192288.js @@ -0,0 +1,85 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 07 February 2003 + * SUMMARY: Testing 0/0 inside functions + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=192288 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 192288; +var summary = 'Testing 0/0 inside functions '; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() +{ + return 0/0; +} + +status = inSection(1); +actual = isNaN(f()); +expect = true; +addThis(); + +status = inSection(2); +actual = isNaN(f.apply(this)); +expect = true; +addThis(); + +status = inSection(3); +actual = isNaN(eval("f.apply(this)")); +expect = true; +addThis(); + +status = inSection(4); +actual = isNaN(Function('return 0/0;')()); +expect = true; +addThis(); + +status = inSection(5); +actual = isNaN(eval("Function('return 0/0;')()")); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Expressions/regress-394673.js b/js/src/tests/js1_5/Expressions/regress-394673.js new file mode 100644 index 000000000..8b22e65f6 --- /dev/null +++ b/js/src/tests/js1_5/Expressions/regress-394673.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 394673; +var summary = 'Parsing long chains of "&&" or "||"'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var N = 70*1000; +var counter; + +counter = 0; +var x = build("&&")(); +if (x !== true) + throw "Unexpected result: x="+x; +if (counter != N) + throw "Unexpected counter: counter="+counter; + +counter = 0; +var x = build("||")(); +if (x !== true) + throw "Unexpected result: x="+x; +if (counter != 1) + throw "Unexpected counter: counter="+counter; + +function build(operation) +{ + var counter; + var a = []; + a.push("return f()"); + for (var i = 1; i != N - 1; ++i) + a.push("f()"); + a.push("f();"); + return new Function(a.join(operation)); +} + +function f() +{ + ++counter; + return true; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Expressions/regress-96526-argsub.js b/js/src/tests/js1_5/Expressions/regress-96526-argsub.js new file mode 100644 index 000000000..e78c2d2b1 --- /dev/null +++ b/js/src/tests/js1_5/Expressions/regress-96526-argsub.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 29 Oct 2002 + * SUMMARY: Testing "use" and "set" operations on expressions like a[i][j][k] + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526#c52 + * + * Brendan: "The idea is to cover all the 'use' and 'set' (as in modify) + * operations you can do on an expression like a[i][j][k], including variations + * where you replace |a| with arguments (literally) and |i| with 0, 1, 2, etc. + * (to hit the optimization for arguments[0]... that uses JSOP_ARGSUB)." + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 96526; +var summary = 'Testing "use" and "set" ops on expressions like a[i][j][k]'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var z='magic'; +Number.prototype.magic=42; + +status = inSection(1); +actual = f(2,1,[1,2,[3,4]]); +expect = 42; +addThis(); + + +function f(j,k) +{ + status = inSection(2); + actual = formatArray(arguments[2]); + expect = formatArray([1,2,[3,4]]); + addThis(); + + status = inSection(3); + actual = formatArray(arguments[2][j]); + expect = formatArray([3,4]); + addThis(); + + status = inSection(4); + actual = arguments[2][j][k]; + expect = 4; + addThis(); + + status = inSection(5); + actual = arguments[2][j][k][z]; + expect = 42; + addThis(); + + return arguments[2][j][k][z]; +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Expressions/regress-96526-delelem.js b/js/src/tests/js1_5/Expressions/regress-96526-delelem.js new file mode 100644 index 000000000..d66faed4e --- /dev/null +++ b/js/src/tests/js1_5/Expressions/regress-96526-delelem.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 29 Oct 2002 + * SUMMARY: Testing "use" and "set" operations on expressions like a[i][j][k] + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526#c52 + * + * Brendan: "The idea is to cover all the 'use' and 'set' (as in modify) + * operations you can do on an expression like a[i][j][k], including variations + * where you replace |a| with arguments (literally) and |i| with 0, 1, 2, etc. + * (to hit the optimization for arguments[0]... that uses JSOP_ARGSUB)." + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 96526; +var summary = 'Testing "use" and "set" ops on expressions like a[i][j][k]'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var z='magic'; +Number.prototype.magic=42; +f(2,1,[-1,0,[1,2,[3,4]]]); + +function f(j,k,a) +{ + status = inSection(1); + actual = formatArray(a[2]); + expect = formatArray([1,2,[3,4]]); + addThis(); + + status = inSection(2); + actual = formatArray(a[2][j]); + expect = formatArray([3,4]); + addThis(); + + status = inSection(3); + actual = a[2][j][k]; + expect = 4; + addThis(); + + status = inSection(4); + actual = a[2][j][k][z]; + expect = 42; + addThis(); + + delete a[2][j][k]; + + status = inSection(5); + actual = formatArray(a[2][j]); + expect = '[3, ,]'; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Expressions/regress-96526-noargsub.js b/js/src/tests/js1_5/Expressions/regress-96526-noargsub.js new file mode 100644 index 000000000..3b25ab312 --- /dev/null +++ b/js/src/tests/js1_5/Expressions/regress-96526-noargsub.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 29 Oct 2002 + * SUMMARY: Testing "use" and "set" operations on expressions like a[i][j][k] + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526#c52 + * + * Brendan: "The idea is to cover all the 'use' and 'set' (as in modify) + * operations you can do on an expression like a[i][j][k], including variations + * where you replace |a| with arguments (literally) and |i| with 0, 1, 2, etc. + * (to hit the optimization for arguments[0]... that uses JSOP_ARGSUB)." + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 96526; +var summary = 'Testing "use" and "set" ops on expressions like a[i][j][k]'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var z='magic'; +Number.prototype.magic=42; + +status = inSection(1); +actual = f(2,1,[-1,0,[1,2,[3,4]]]); +expect = 42; +addThis(); + + +function f(j,k,a) +{ + status = inSection(2); + actual = formatArray(a[2]); + expect = formatArray([1,2,[3,4]]); + addThis(); + + status = inSection(3); + actual = formatArray(a[2][j]); + expect = formatArray([3,4]); + addThis(); + + status = inSection(4); + actual = a[2][j][k]; + expect = 4; + addThis(); + + status = inSection(5); + actual = a[2][j][k][z]; + expect = 42; + addThis(); + + return a[2][j][k][z]; +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Expressions/shell.js b/js/src/tests/js1_5/Expressions/shell.js new file mode 100644 index 000000000..de97dad87 --- /dev/null +++ b/js/src/tests/js1_5/Expressions/shell.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 07 February 2001 + * + * Functionality common to Array testing - + */ +//----------------------------------------------------------------------------- + + +var CHAR_LBRACKET = '['; +var CHAR_RBRACKET = ']'; +var CHAR_QT_DBL = '"'; +var CHAR_QT = "'"; +var CHAR_NL = '\n'; +var CHAR_COMMA = ','; +var CHAR_SPACE = ' '; +var TYPE_STRING = typeof 'abc'; + + +/* + * If available, arr.toSource() gives more detail than arr.toString() + * + * var arr = Array(1,2,'3'); + * + * arr.toSource() + * [1, 2, "3"] + * + * arr.toString() + * 1,2,3 + * + * But toSource() doesn't exist in Rhino, so use our own imitation, below - + * + */ +function formatArray(arr) +{ + try + { + return arr.toSource(); + } + catch(e) + { + return toSource(arr); + } +} + + + +/* + * Imitate SpiderMonkey's arr.toSource() method: + * + * a) Double-quote each array element that is of string type + * b) Represent |undefined| and |null| by empty strings + * c) Delimit elements by a comma + single space + * d) Do not add delimiter at the end UNLESS the last element is |undefined| + * e) Add square brackets to the beginning and end of the string + */ +function toSource(arr) +{ + var delim = CHAR_COMMA + CHAR_SPACE; + var elt = ''; + var ret = ''; + var len = arr.length; + + for (i=0; i<len; i++) + { + elt = arr[i]; + + switch(true) + { + case (typeof elt === TYPE_STRING) : + ret += doubleQuote(elt); + break; + + case (elt === undefined || elt === null) : + break; // add nothing but the delimiter, below - + + default: + ret += elt.toString(); + } + + if ((i < len-1) || (elt === undefined)) + ret += delim; + } + + return CHAR_LBRACKET + ret + CHAR_RBRACKET; +} + + +function doubleQuote(text) +{ + return CHAR_QT_DBL + text + CHAR_QT_DBL; +} + + +function singleQuote(text) +{ + return CHAR_QT + text + CHAR_QT; +} + diff --git a/js/src/tests/js1_5/Function/10.1.6-01.js b/js/src/tests/js1_5/Function/10.1.6-01.js new file mode 100644 index 000000000..fbb98616e --- /dev/null +++ b/js/src/tests/js1_5/Function/10.1.6-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 293782; +var summary = 'Local variables should not be enumerable properties of the function'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() +{ + var x,y + } + +var p; +actual = ''; + +for (p in f) +{ + actual += p + ','; +} +expect = ''; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/10.1.6.js b/js/src/tests/js1_5/Function/10.1.6.js new file mode 100644 index 000000000..504001cb1 --- /dev/null +++ b/js/src/tests/js1_5/Function/10.1.6.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 293782; +var summary = 'Local variables can cause predefined function object properties to be undefined'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() +{ + var name=1; +} + +expect = 'f'; +actual = f.name; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/browser.js b/js/src/tests/js1_5/Function/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Function/browser.js diff --git a/js/src/tests/js1_5/Function/regress-123371.js b/js/src/tests/js1_5/Function/regress-123371.js new file mode 100644 index 000000000..58294c6a0 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-123371.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 123371; +var summary = 'Do not crash when newline separates function name from arglist'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus +('function call succeeded'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-178389.js b/js/src/tests/js1_5/Function/regress-178389.js new file mode 100644 index 000000000..e1735adf8 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-178389.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 178389; +var summary = 'Function.prototype.toSource should not override Function.prototype.toString'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() +{ + var g = function (){}; +} + +expect = f.toString(); + +Function.prototype.toSource = function () { return ''; }; + +actual = f.toString(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-222029-001.js b/js/src/tests/js1_5/Function/regress-222029-001.js new file mode 100644 index 000000000..18d9abfca --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-222029-001.js @@ -0,0 +1,126 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 13 Oct 2003 + * SUMMARY: Make our f.caller property match IE's wrt f.apply and f.call + * See http://bugzilla.mozilla.org/show_bug.cgi?id=222029 + * + * Below, when gg calls f via |f.call|, we have this call chain: + * + * calls calls + * gg() ---------> Function.prototype.call() ---------> f() + * + * + * The question this bug addresses is, "What should we say |f.caller| is?" + * + * Before this fix, SpiderMonkey said it was |Function.prototype.call|. + * After this fix, SpiderMonkey emulates IE and says |gg| instead. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 222029; +var summary = "Make our f.caller property match IE's wrt f.apply and f.call"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() +{ + return f.caller.p ; +} + + +/* + * Call |f| directly + */ +function g() +{ + return f(); +} +g.p = "hello"; + + +/* + * Call |f| via |f.call| + */ +function gg() +{ + return f.call(this); +} +gg.p = "hello"; + + +/* + * Call |f| via |f.apply| + */ +function ggg() +{ + return f.apply(this); +} +ggg.p = "hello"; + + +/* + * Shadow |p| on |Function.prototype.call|, |Function.prototype.apply|. + * In Sections 2 and 3 below, we no longer expect to recover this value - + */ +Function.prototype.call.p = "goodbye"; +Function.prototype.apply.p = "goodbye"; + + + +status = inSection(1); +actual = g(); +expect = "hello"; +addThis(); + +status = inSection(2); +actual = gg(); +expect = "hello"; +addThis(); + +status = inSection(3); +actual = ggg(); +expect = "hello"; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Function/regress-222029-002.js b/js/src/tests/js1_5/Function/regress-222029-002.js new file mode 100644 index 000000000..e5d88aa94 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-222029-002.js @@ -0,0 +1,135 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 13 Oct 2003 + * SUMMARY: Make our f.caller property match IE's wrt f.apply and f.call + * See http://bugzilla.mozilla.org/show_bug.cgi?id=222029 + * + * Below, when gg calls f via |f.call|, we have this call chain: + * + * calls calls + * gg() ---------> Function.prototype.call() ---------> f() + * + * + * The question this bug addresses is, "What should we say |f.caller| is?" + * + * Before this fix, SpiderMonkey said it was |Function.prototype.call|. + * After this fix, SpiderMonkey emulates IE and says |gg| instead. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 222029; +var summary = "Make our f.caller property match IE's wrt f.apply and f.call"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +/* + * Try to confuse the engine by adding a |p| property to everything! + */ +var p = 'global'; +var o = {p:'object'}; + + +function f(obj) +{ + return f.caller.p ; +} + + +/* + * Call |f| directly + */ +function g(obj) +{ + var p = 'local'; + return f(obj); +} +g.p = "hello"; + + +/* + * Call |f| via |f.call| + */ +function gg(obj) +{ + var p = 'local'; + return f.call(obj, obj); +} +gg.p = "hello"; + + +/* + * Call |f| via |f.apply| + */ +function ggg(obj) +{ + var p = 'local'; + return f.apply(obj, [obj]); +} +ggg.p = "hello"; + + +/* + * Shadow |p| on |Function.prototype.call|, |Function.prototype.apply|. + * In Sections 2 and 3 below, we no longer expect to recover this value - + */ +Function.prototype.call.p = "goodbye"; +Function.prototype.apply.p = "goodbye"; + + + +status = inSection(1); +actual = g(o); +expect = "hello"; +addThis(); + +status = inSection(2); +actual = gg(o); +expect = "hello"; +addThis(); + +status = inSection(3); +actual = ggg(o); +expect = "hello"; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Function/regress-292215.js b/js/src/tests/js1_5/Function/regress-292215.js new file mode 100644 index 000000000..c264b7417 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-292215.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 292215; +var summary = 'Set arguments'; +var actual = ''; +var expect = '00012'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function zeroArguments () { + arguments[1] = '0'; + actual += arguments[1]; +} + +function oneArgument (x) { + arguments[1] = '1'; + actual += arguments[1]; +} + +function twoArguments (x,y) { + arguments[1] = '2'; + actual += arguments[1]; +} + +zeroArguments(); +zeroArguments(1); +zeroArguments('a', 'b'); +oneArgument(); +twoArguments(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-338001.js b/js/src/tests/js1_5/Function/regress-338001.js new file mode 100644 index 000000000..d8b2b772f --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-338001.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android) silentfail skip -- disabled pending bug 657444 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338001; +var summary = 'integer overflow in jsfun.c:Function'; +var actual = 'No Crash'; +var expect = /No Crash|InternalError: allocation size overflow/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var fe="f"; + +try +{ + for (i=0; i<25; i++) + fe += fe; + + var fu=new Function( + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + "done" + ); +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + actual = ex + ''; +} + +print('Done: ' + actual); + +reportMatch(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-338121-01.js b/js/src/tests/js1_5/Function/regress-338121-01.js new file mode 100644 index 000000000..3271c38af --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-338121-01.js @@ -0,0 +1,32 @@ +// |reftest| skip-if(Android) silentfail skip -- disabled pending bug 657444 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338121; +var summary = 'Issues with JS_ARENA_ALLOCATE_CAST'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var fe="v"; + +for (i=0; i<25; i++) + fe += fe; + +var fu=new Function( + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + "done" + ); + +print('Done'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-338121-02.js b/js/src/tests/js1_5/Function/regress-338121-02.js new file mode 100644 index 000000000..f051c00ce --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-338121-02.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(Android) silentfail skip -- disabled pending bug 657444 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338121; +var summary = 'Issues with JS_ARENA_ALLOCATE_CAST'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var fe="vv"; + +for (i=0; i<24; i++) + fe += fe; + +var fu=new Function( + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + "done" + ); + +//alert("fu="+fu); +//print("fu="+fu); +var fuout = 'fu=' + fu; + +print('Done'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-338121-03.js b/js/src/tests/js1_5/Function/regress-338121-03.js new file mode 100644 index 000000000..b7f656af7 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-338121-03.js @@ -0,0 +1,38 @@ +// |reftest| skip-if(Android) silentfail skip -- disabled pending bug 657444 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338121; +var summary = 'Issues with JS_ARENA_ALLOCATE_CAST'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var fe="vv"; + +for (i=0; i<24; i++) + fe += fe; + +var fu=new Function( + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, fe, + fe, fe, fe, + "done" + ); + +//alert("fu="+fu); +//print("fu="+fu); +var fuout = 'fu=' + fu; + +print('Done'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Function/regress-344052.js b/js/src/tests/js1_5/Function/regress-344052.js new file mode 100644 index 000000000..ce07f37b4 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-344052.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344052; +var summary = 'Function prototype - simple shared property'; +var actual = ''; +var expect = 'true'; + +Function.prototype.foo = true; +function y(){}; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + actual = String(y.foo); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Function/regress-364023.js b/js/src/tests/js1_5/Function/regress-364023.js new file mode 100644 index 000000000..4a5cbb761 --- /dev/null +++ b/js/src/tests/js1_5/Function/regress-364023.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 364023; +var summary = 'Do not crash in JS_GetPrivate'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var code = ""; + for(var i = 0; i < 0x10000; i++) { + if(i == 125) { + code += "void 0x10000050505050;\n"; + } else { + code += "void " + (0x10000000000000 + i) + ";\n"; + } + } + code += "function foo() {}\n"; + eval(code); + } + exploit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Function/shell.js b/js/src/tests/js1_5/Function/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Function/shell.js diff --git a/js/src/tests/js1_5/GC/browser.js b/js/src/tests/js1_5/GC/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/GC/browser.js diff --git a/js/src/tests/js1_5/GC/regress-104584.js b/js/src/tests/js1_5/GC/regress-104584.js new file mode 100644 index 000000000..4148b6915 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-104584.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 October 2001 + * + * SUMMARY: Regression test for Bugzilla bug 104584 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=104584 + * + * Testing that we don't crash on this code. The idea is to + * call F,G WITHOUT providing an argument. This caused a crash + * on the second call to obj.toString() or print(obj) below - + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 104584; +var summary = "Testing that we don't crash on this code -"; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +F(); +G(); + +reportCompare('No Crash', 'No Crash', ''); + +function F(obj) +{ + if(!obj) + obj = {}; + obj.toString(); + gc(); + obj.toString(); +} + + +function G(obj) +{ + if(!obj) + obj = {}; + print(obj); + gc(); + print(obj); +} diff --git a/js/src/tests/js1_5/GC/regress-203278-2.js b/js/src/tests/js1_5/GC/regress-203278-2.js new file mode 100644 index 000000000..e2433f485 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-203278-2.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 203278; +var summary = 'Don\'t crash in recursive js_MarkGCThing'; +var actual = 'FAIL'; +var expect = 'PASS'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// Prepare array to test DeutschSchorrWaite implementation +// and its reverse pointer scanning performance + +var a = new Array(1000 * 1000); + +var i = a.length; +while (i-- != 0) { + switch (i % 11) { + case 0: + a[i] = { }; + break; + case 1: + a[i] = { a: true, b: false, c: 0 }; + break; + case 2: + a[i] = { 0: true, 1: {}, 2: false }; + break; + case 3: + a[i] = { a: 1.2, b: "", c: [] }; + break; + case 4: + a[i] = [ false ]; + break; + case 6: + a[i] = []; + break; + case 7: + a[i] = false; + break; + case 8: + a[i] = "x"; + break; + case 9: + a[i] = new String("x"); + break; + case 10: + a[i] = 1.1; + break; + case 10: + a[i] = new Boolean(); + break; + } +} + +printStatus("DSF is prepared"); + +// Prepare linked list that causes recursion during GC with +// depth O(list size) +// Note: pass "-S 500000" option to the shell to limit stack quota +// available for recursion + +for (i = 0; i != 50*1000; ++i) { + a = [a, a, {}]; + a = [a, {}, a]; + +} + +printStatus("Linked list is prepared"); + +gc(); + +actual = 'PASS'; + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/GC/regress-203278-3.js b/js/src/tests/js1_5/GC/regress-203278-3.js new file mode 100644 index 000000000..3ac6d4c91 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-203278-3.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 203278; +var summary = 'Don\'t crash in recursive js_MarkGCThing'; +var actual = 'FAIL'; +var expect = 'PASS'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// Prepare array a to cause O(a.length^2) behaviour in the current +// DeutschSchorrWaite implementation + +var a = new Array(1000 * 100); + +var i = a.length; +while (i-- != 0) +{ + a[i] = {}; +} + +// Prepare linked list that causes recursion during GC with +// depth O(list size) + +for (i = 0; i != 50*1000; ++i) +{ + a = [a, a.concat()]; +} + +if (typeof gc == 'function') +{ + gc(); +} + +actual = 'PASS'; + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/GC/regress-278725.js b/js/src/tests/js1_5/GC/regress-278725.js new file mode 100644 index 000000000..47df5950f --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-278725.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by James Ross <silver@warwickcompsoc.co.uk> +var BUGNUMBER = 278725; +var summary = 'Don\'t Crash during GC'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var results = []; +for (var k = 0; k < 600000; k++) { + if (! (k %100000)) { + printStatus('hi'); + if (0) { + results.length = 0; + gc(); + } + } + results.push({}); +} + +actual = 'No Crash'; +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-306788.js b/js/src/tests/js1_5/GC/regress-306788.js new file mode 100644 index 000000000..d6e130679 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-306788.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306788; +var summary = 'Do not crash sorting Arrays due to GC'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var array = new Array(); + +for (var i = 0; i < 5000; i++) +{ + array[i] = new Array('1', '2', '3', '4', '5'); +} + +array.sort(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-311497.js b/js/src/tests/js1_5/GC/regress-311497.js new file mode 100644 index 000000000..21905a7fd --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-311497.js @@ -0,0 +1,61 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311497; +var summary = 'Root pivots in js_HeapSort'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function force_gc() +{ + if (this.gc) gc(); + for (var i = 0; i != 30000; ++i) { + var tmp = Math.sin(i); + tmp = null; + } +} + +var array = new Array(10); +for (var i = 0; i != array.length; ++i) { + array[i] = String.fromCharCode(i, i, i); +} + +function cmp(a, b) +{ + for (var i = 0; i != array.length; ++i) { + array[i] = null; + } + force_gc(); + return 0; +} + +array.sort(cmp); + +// Verify that array contains either null or original strings + +var null_count = 0; +var original_string_count = 0; +for (var i = 0; i != array.length; ++i) { + var elem = array[i]; + if (elem === null) { + ++null_count; + } else if (typeof elem == "string" && elem.length == 3) { + var code = elem.charCodeAt(0); + if (0 <= code && code < array.length) { + if (code === elem.charCodeAt(1) && code == elem.charCodeAt(2)) + ++original_string_count; + } + } +} + +var expect = array.length; +var actual = null_count + original_string_count; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-313276.js b/js/src/tests/js1_5/GC/regress-313276.js new file mode 100644 index 000000000..7f622fa3f --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-313276.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313276; +var summary = 'Root strings'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { + toString: function() { + return "*TEST*".substr(1, 4); + } +}; + +var TMP = 1e200; + +var likeZero = { + valueOf: function() { + if (typeof gc == "function") gc(); + for (var i = 0; i != 40000; ++i) { + var tmp = 2 / TMP; + tmp = null; + } + return 0; + } +} + + expect = "TEST"; +actual = String.prototype.substr.call(obj, likeZero); + +printStatus("Substring length: "+actual.length); +printStatus((expect === actual).toString()); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-313479.js b/js/src/tests/js1_5/GC/regress-313479.js new file mode 100644 index 000000000..a13dba3ff --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-313479.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313479; +var summary = 'Root access in jsnum.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var prepared_string = String(1); +String(2); // To remove prepared_string from newborn + +var likeString = { + toString: function() { + var tmp = prepared_string; + prepared_string = null; + return tmp; + } +}; + +var likeNumber = { + valueOf: function() { + gc(); + return 10; + } +} + + var expect = 1; +var actual = parseInt(likeString, likeNumber); +printStatus("expect="+expect+" actual="+actual); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-316885-01.js b/js/src/tests/js1_5/GC/regress-316885-01.js new file mode 100644 index 000000000..da814bbae --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-316885-01.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str_with_num = "0.1"; + +var obj = { + get elem() { + return str_with_num; + }, + set elem(value) { + gc(); + } + +}; + +expect = Number(str_with_num); +actual = obj.elem++; + +gc(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-316885-02.js b/js/src/tests/js1_5/GC/regress-316885-02.js new file mode 100644 index 000000000..2cdda6006 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-316885-02.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str = "test"; + +var lval = { + valueOf: function() { + return str+"1"; + } +}; + +var ONE = 1; + +var rval = { + valueOf: function() { + // Make sure that the result of the previous lval.valueOf + // is not GC-rooted. + var tmp = "x"+lval; + if (typeof gc == "function") + gc(); + for (var i = 0; i != 40000; ++i) { + tmp = 1e100 / ONE; + } + return str; + } +}; + +expect = (str+"1" > str); +actual = (lval > rval); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-316885-03.js b/js/src/tests/js1_5/GC/regress-316885-03.js new file mode 100644 index 000000000..93f632e78 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-316885-03.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str = "test"; + +var lval = { + valueOf: function() { + return str+"1"; + } +}; + +var ONE = 1; + +var rval = { + valueOf: function() { + // Make sure that the result of the previous lval.valueOf + // is not GC-rooted. + var tmp = "x"+lval; + if (typeof gc == "function") + gc(); + for (var i = 0; i != 40000; ++i) { + tmp = 1e100 / ONE; + } + return str; + } +}; + +expect = (str+"1")+str; +actual = lval+rval; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-319980-01.js b/js/src/tests/js1_5/GC/regress-319980-01.js new file mode 100644 index 000000000..e9e696c8d --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-319980-01.js @@ -0,0 +1,127 @@ +// |reftest| skip-if(!xulRuntime.shell) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 319980; +var summary = 'GC not called during non-fatal out of memory'; +var actual = ''; +var expect = 'Normal Exit'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print ('This test should never fail explicitly. ' + + 'You must view the memory usage during the test. ' + + 'This test fails if memory usage for each subtest grows'); + +var timeOut = 45 * 1000; +var interval = 0.01 * 1000; +var testFuncWatcherId; +var testFuncTimerId; +var maxTests = 5; +var currTest = 0; + +if (typeof setTimeout == 'undefined') +{ + setTimeout = function() {}; + clearTimeout = function() {}; + actual = 'Normal Exit'; + reportCompare(expect, actual, summary); +} +else +{ + // delay start until after js-test-driver-end runs. + // delay test driver end + gDelayTestDriverEnd = true; + + setTimeout(testFuncWatcher, 1000); +} + +function testFuncWatcher() +{ + a = null; + + gc(); + + clearTimeout(testFuncTimerId); + testFuncWatcherId = testFuncTimerId = null; + if (currTest >= maxTests) + { + actual = 'Normal Exit'; + reportCompare(expect, actual, summary); + printStatus('Test Completed'); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + return; + } + ++currTest; + + print('Executing test ' + currTest + '\n'); + + testFuncWatcherId = setTimeout("testFuncWatcher()", timeOut); + testFuncTimerId = setTimeout(testFunc, interval); +} + + +var a; +function testFunc() +{ + + var i; + + switch(currTest) + { + case 1: + a = new Array(100000); + for (i = 0; i < 100000; i++ ) + { + a[i] = i; + } + break; + + case 2: + a = new Array(100000); + for (i = 0; i < 100000; i++) + { + a[i] = new Number(); + a[i] = i; + } + break; + + case 3: + a = new String() ; + a = new Array(100000); + for ( i = 0; i < 100000; i++ ) + { + a[i] = i; + } + + break; + + case 4: + a = new Array(); + a[0] = new Array(100000); + for (i = 0; i < 100000; i++ ) + { + a[0][i] = i; + } + break; + + case 5: + a = new Array(); + for (i = 0; i < 100000; i++ ) + { + a[i] = i; + } + break; + } + + if (testFuncTimerId) + { + testFuncTimerId = setTimeout(testFunc, interval); + } +} + + diff --git a/js/src/tests/js1_5/GC/regress-324278.js b/js/src/tests/js1_5/GC/regress-324278.js new file mode 100644 index 000000000..56996994d --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-324278.js @@ -0,0 +1,63 @@ +// |reftest| skip -- slow, obsoleted by 98409 fix +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 324278; +var summary = 'GC without recursion'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// Number to push native stack size beyond 10MB if GC recurses generating +// segfault on Fedora Core / Ubuntu Linuxes where the stack size by default +// is 10MB/8MB. +var N = 100*1000; + +function build(N) { + // Exploit the fact that (in ES3), regexp literals are shared between + // function invocations. Thus we build the following chain: + // chainTop: function->regexp->function->regexp....->null + // to check how GC would deal with this chain. + + var chainTop = null; + for (var i = 0; i != N; ++i) { + var f = Function('some_arg'+i, ' return /test/;'); + var re = f(); + re.previous = chainTop; + chainTop = f; + } + return chainTop; +} + +function check(chainTop, N) { + for (var i = 0; i != N; ++i) { + var re = chainTop(); + chainTop = re.previous; + } + if (chainTop !== null) + throw "Bad chainTop"; + +} + +if (typeof gc != "function") { + gc = function() { + for (var i = 0; i != 50*1000; ++i) { + var tmp = new Object(); + } + } +} + +var chainTop = build(N); +printStatus("BUILT"); +gc(); +check(chainTop, N); +printStatus("CHECKED"); +chainTop = null; +gc(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-331719.js b/js/src/tests/js1_5/GC/regress-331719.js new file mode 100644 index 000000000..3803b3d5c --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-331719.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 331719; +var summary = 'Problem with String.replace running with WAY_TOO_MUCH_GC'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print('This test requires WAY_TOO_MUCH_GC'); + +expect = 'No'; +actual = 'No'.replace(/\&\&/g, '&'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-338653.js b/js/src/tests/js1_5/GC/regress-338653.js new file mode 100644 index 000000000..17ef68de9 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-338653.js @@ -0,0 +1,41 @@ +// |reftest| skip -- slow, killed on x86_64 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338653; +var summary = 'Force GC when JSRuntime.gcMallocBytes hits ' + + 'JSRuntime.gcMaxMallocBytes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print('This test should never fail explicitly. ' + + 'You must view the memory usage during the test. ' + + 'This test fails if the memory usage repeatedly spikes ' + + 'by several hundred megabytes.'); + +function dosubst() +{ + var f = '0x'; + var s = f; + + for (var i = 0; i < 18; i++) + { + s += s; + } + + var index = s.indexOf(f); + while (index != -1 && index < 10000) { + s = s.substr(0, index) + '1' + s.substr(index + f.length); + index = s.indexOf(f); + } + +} + +dosubst(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-341877-01.js b/js/src/tests/js1_5/GC/regress-341877-01.js new file mode 100644 index 000000000..6fc88f3ac --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-341877-01.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341877; +var summary = 'GC hazard with for-in loop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { }; + +var prop = "xsomePropety".substr(1); + +obj.first = "first" + + obj[prop] = 1; + +for (var elem in obj) { + var tmp = elem.toString(); + delete obj[prop]; + // ensure that prop is cut from all roots + prop = "xsomePropety".substr(2); + obj[prop] = 2; + delete obj[prop]; + prop = null; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } +} + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-341877-02.js b/js/src/tests/js1_5/GC/regress-341877-02.js new file mode 100644 index 000000000..b636ad693 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-341877-02.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341877; +var summary = 'GC hazard with for-in loop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { }; + +var prop = "xsomePropety".substr(1); + +obj.first = "first" + + obj[prop] = 1; + +for (var elem in obj) { + var tmp = elem.toString(); + delete obj[prop]; + // ensure that prop is cut from all roots + prop = "xsomePropety".substr(2); + obj[prop] = 2; + delete obj[prop]; + prop = null; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GC/regress-346794.js b/js/src/tests/js1_5/GC/regress-346794.js new file mode 100644 index 000000000..a747642f1 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-346794.js @@ -0,0 +1,43 @@ +// |reftest| skip -- slow, killed +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346794; +var summary = 'Do not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // either don't crash or run out of memory + expectExitCode(0); + expectExitCode(3); + + function boo() { + s = ''; + for (;;) { + try { + new RegExp(s + '[\\'); + } catch(e) {} + s += 'q'; + } + } + + boo(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-348532.js b/js/src/tests/js1_5/GC/regress-348532.js new file mode 100644 index 000000000..cff651a63 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-348532.js @@ -0,0 +1,54 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 348532; +var summary = 'Do not overflow int when constructing Error.stack'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(3); + actual = 0; + + // construct string of 1<<23 characters + var s = Array((1<<23)+1).join('x'); + + var recursionDepth = 0; + function err() { + try { + return err.apply(this, arguments); + } catch (e) { + if (!(e instanceof InternalError)) + throw e; + } + return new Error(); + } + + // The full stack trace in error would include 64*4 copies of s exceeding + // 2^23 * 256 or 2^31 in length + var error = err(s,s,s,s); + + print(error.stack.length); + + expect = true; + actual = (error.stack.length > 0); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-352606.js b/js/src/tests/js1_5/GC/regress-352606.js new file mode 100644 index 000000000..b29c501fd --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-352606.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352606; +var summary = 'Do not crash involving post decrement'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + y = ({toString: gc}); new Function("y--;")() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-383269-01.js b/js/src/tests/js1_5/GC/regress-383269-01.js new file mode 100644 index 000000000..43f6a15fa --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-383269-01.js @@ -0,0 +1,62 @@ +// |reftest| skip -- unreliable - based on GC timing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383269; +var summary = 'Leak related to arguments object'; +var actual = 'No Leak'; +var expect = 'No Leak'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function generate_big_object_graph() + { + var root = {}; + f(root, 17); + return root; + function f(parent, depth) { + if (depth == 0) + return; + --depth; + f(parent.a = {}, depth); + f(parent.b = {}, depth); + } + } + + function outer() { var x = arguments; return function inner() { return x }; } + + function timed_gc() + { + var t1 = Date.now(); + gc(); + return Date.now() - t1; + } + + outer(1); + gc(); + var base_time = timed_gc(); + + var f = outer(generate_big_object_graph()); + f = null; + gc(); + var time = timed_gc(); + + if (time > (base_time + 1) * 3) + actual = "generate_big_object_graph() leaked, base_gc_time="+base_time+", last_gc_time="+time; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-383269-02.js b/js/src/tests/js1_5/GC/regress-383269-02.js new file mode 100644 index 000000000..9ce0e44a0 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-383269-02.js @@ -0,0 +1,66 @@ +// |reftest| skip -- unreliable - based on GC timing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383269; +var summary = 'Leak related to arguments object'; +var actual = 'No Leak'; +var expect = 'No Leak'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function generate_big_object_graph() + { + var root = {}; + f(root, 17); + return root; + function f(parent, depth) { + if (depth == 0) + return; + --depth; + f(parent.a = {}, depth); + f(parent.b = {}, depth); + } + } + + function f(obj) { + with (obj) + return arguments; + } + + function timed_gc() + { + var t1 = Date.now(); + gc(); + return Date.now() - t1; + } + + var x = f({}); + x = null; + gc(); + var base_time = timed_gc(); + + x = f(generate_big_object_graph()); + x = null; + gc(); + var time = timed_gc(); + + if (time > (base_time + 10) * 3) + actual = "generate_big_object_graph() leaked, base_gc_time="+base_time+", last_gc_time="+time; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-390078.js b/js/src/tests/js1_5/GC/regress-390078.js new file mode 100644 index 000000000..4a86d84ff --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-390078.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390078; +var summary = 'GC hazard with JSstackFrame.argv[-1]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = new Array(10*1000); + a[0] = { toString: function() { gc(); return ".*9"; }};; + a[1] = "g"; + + for (var i = 0; i != 10*1000; ++i) { + String(new Number(123456789)); + } + + "".match.apply(123456789, a); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-418128.js b/js/src/tests/js1_5/GC/regress-418128.js new file mode 100644 index 000000000..0642e83dc --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-418128.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418128; +var summary = 'GC hazard with ++/--'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = {}; + var id = { toString: function() { return ""+Math.pow(2, 0.1); } } + obj[id] = { valueOf: unrooter }; + print(obj[id]++); + gc(); + print(uneval(obj)); + + function unrooter() + { + delete obj[id]; + gc(); + return 10; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GC/regress-440558.js b/js/src/tests/js1_5/GC/regress-440558.js new file mode 100644 index 000000000..b36d01ba5 --- /dev/null +++ b/js/src/tests/js1_5/GC/regress-440558.js @@ -0,0 +1,37 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 440558; +var summary = 'Do not assert: *flagp != GCF_FINAL'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('Note: this test requires that javascript.options.gczeal ' + + 'be set to 2 prior to the browser start'); + + m = function(a, b) { + if (++i < 10) { + } + }; + e = function(a, b) { + }; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/GC/shell.js b/js/src/tests/js1_5/GC/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/GC/shell.js diff --git a/js/src/tests/js1_5/GetSet/browser.js b/js/src/tests/js1_5/GetSet/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/GetSet/browser.js diff --git a/js/src/tests/js1_5/GetSet/getset-002.js b/js/src/tests/js1_5/GetSet/getset-002.js new file mode 100644 index 000000000..9790142fd --- /dev/null +++ b/js/src/tests/js1_5/GetSet/getset-002.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var t = { + _y: "<initial y>", + + get y() + { + var rv; + if (typeof this._y == "string") + rv = "got " + this._y; + else + rv = this._y; + + return rv; + }, + + set y(newVal) + { + this._y = newVal; + } +} + + + test(t); + +function test(t) +{ + enterFunc ("test"); + + printStatus ("Basic Getter/ Setter test (object literal notation)"); + + reportCompare ("<initial y>", t._y, "y prototype check"); + + reportCompare ("got <initial y>", t.y, "y getter, before set"); + + t.y = "new y"; + reportCompare ("got new y", t.y, "y getter, after set"); + + t.y = 2; + reportCompare (2, t.y, "y getter, after numeric set"); + + var d = new Date(); + t.y = d; + reportCompare (d, t.y, "y getter, after date set"); + +} diff --git a/js/src/tests/js1_5/GetSet/regress-353264.js b/js/src/tests/js1_5/GetSet/regress-353264.js new file mode 100644 index 000000000..231cda01f --- /dev/null +++ b/js/src/tests/js1_5/GetSet/regress-353264.js @@ -0,0 +1,18 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 353264; +var summary = 'Do not crash defining getter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.x getter= function () { }; export x; x; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/GetSet/regress-375976.js b/js/src/tests/js1_5/GetSet/regress-375976.js new file mode 100644 index 000000000..9d8502d1b --- /dev/null +++ b/js/src/tests/js1_5/GetSet/regress-375976.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375976; +var summary = 'Do not crash with postincrement custom property'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + this.__defineSetter__('x', gc); + this.__defineGetter__('x', Math.sin); + x = x++; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/GetSet/shell.js b/js/src/tests/js1_5/GetSet/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/GetSet/shell.js diff --git a/js/src/tests/js1_5/LexicalConventions/browser.js b/js/src/tests/js1_5/LexicalConventions/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/LexicalConventions/browser.js diff --git a/js/src/tests/js1_5/LexicalConventions/lexical-001.js b/js/src/tests/js1_5/LexicalConventions/lexical-001.js new file mode 100644 index 000000000..47d049aaa --- /dev/null +++ b/js/src/tests/js1_5/LexicalConventions/lexical-001.js @@ -0,0 +1,149 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * Date: 26 November 2000 + * + *SUMMARY: Testing numeric literals that begin with 0. + *This test arose from Bugzilla bug 49233. + *The best explanation is from jsscan.c: + * + * "We permit 08 and 09 as decimal numbers, which makes + * our behaviour a superset of the ECMA numeric grammar. + * We might not always be so permissive, so we warn about it." + * + *Thus an expression 010 will evaluate, as always, as an octal (to 8). + *However, 018 will evaluate as a decimal, to 18. Even though the + *user began the expression as an octal, he later used a non-octal + *digit. We forgive this and assume he intended a decimal. If the + *JavaScript "strict" option is set though, we will give a warning. + */ + +//------------------------------------------------------------------------------------------------- +var BUGNUMBER = '49233'; +var summary = 'Testing numeric literals that begin with 0'; +var statprefix = 'Testing '; +var quote = "'"; +var asString = new Array(); +var actual = new Array(); +var expect = new Array(); + + + asString[0]='01' + actual[0]=01 + expect[0]=1 + + asString[1]='07' + actual[1]=07 + expect[1]=7 + + asString[2]='08' + actual[2]=08 + expect[2]=8 + + asString[3]='09' + actual[3]=09 + expect[3]=9 + + asString[4]='010' + actual[4]=010 + expect[4]=8 + + asString[5]='017' + actual[5]=017 + expect[5]=15 + + asString[6]='018' + actual[6]=018 + expect[6]=18 + + asString[7]='019' + actual[7]=019 + expect[7]=19 + + asString[8]='079' + actual[8]=079 + expect[8]=79 + + asString[9]='0079' + actual[9]=0079 + expect[9]=79 + + asString[10]='099' + actual[10]=099 + expect[10]=99 + + asString[11]='0099' + actual[11]=0099 + expect[11]=99 + + asString[12]='000000000077' + actual[12]=000000000077 + expect[12]=63 + + asString[13]='000000000078' + actual[13]=000000000078 + expect[13]=78 + + asString[14]='0000000000770000' + actual[14]=0000000000770000 + expect[14]=258048 + + asString[15]='0000000000780000' + actual[15]=0000000000780000 + expect[15]=780000 + + asString[16]='0765432198' + actual[16]=0765432198 + expect[16]=765432198 + + asString[17]='00076543219800' + actual[17]=00076543219800 + expect[17]=76543219800 + + asString[18]='0000001001007' + actual[18]=0000001001007 + expect[18]=262663 + + asString[19]='0000001001009' + actual[19]=0000001001009 + expect[19]=1001009 + + asString[20]='070' + actual[20]=070 + expect[20]=56 + + asString[21]='080' + actual[21]=080 + expect[21]=80 + + + +//------------------------------------------------------------------------------------------------- + test(); +//------------------------------------------------------------------------------------------------- + + +function showStatus(msg) +{ + return (statprefix + quote + msg + quote); +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (i=0; i !=asString.length; i++) + { + reportCompare (expect[i], actual[i], showStatus(asString[i])); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/LexicalConventions/regress-177314.js b/js/src/tests/js1_5/LexicalConventions/regress-177314.js new file mode 100644 index 000000000..6f36402b6 --- /dev/null +++ b/js/src/tests/js1_5/LexicalConventions/regress-177314.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 Oct 2002 + * SUMMARY: '\400' should lex as a 2-digit octal escape + '0' + * See http://bugzilla.mozilla.org/show_bug.cgi?id=177314 + * + * Bug was that Rhino interpreted '\400' as a 3-digit octal escape. As such + * it is invalid, since octal escapes may only run from '\0' to '\377'. But + * the lexer should interpret this as '\40' + '0' instead, and throw no error. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 177314; +var summary = "'\\" + "400' should lex as a 2-digit octal escape + '0'"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// the last valid octal escape is '\377', which should equal hex escape '\xFF' +status = inSection(1); +actual = '\377'; +expect = '\xFF'; +addThis(); + +// now exercise the lexer by going one higher in the last digit +status = inSection(2); +actual = '\378'; +expect = '\37' + '8'; +addThis(); + +// trickier: 400 is a valid octal number, but '\400' isn't a valid octal escape +status = inSection(3); +actual = '\400'; +expect = '\40' + '0'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/LexicalConventions/regress-469940.js b/js/src/tests/js1_5/LexicalConventions/regress-469940.js new file mode 100644 index 000000000..cec1cb676 --- /dev/null +++ b/js/src/tests/js1_5/LexicalConventions/regress-469940.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469940; +var summary = 'Do not insert semi-colon after var with multiline initializer'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'SyntaxError: missing ; before statement'; + + var s = 'var x = function f() { \n return 42; } print(x);'; + + try + { + eval(s); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/LexicalConventions/shell.js b/js/src/tests/js1_5/LexicalConventions/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/LexicalConventions/shell.js diff --git a/js/src/tests/js1_5/Object/browser.js b/js/src/tests/js1_5/Object/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Object/browser.js diff --git a/js/src/tests/js1_5/Object/regress-137000.js b/js/src/tests/js1_5/Object/regress-137000.js new file mode 100644 index 000000000..8598a264d --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-137000.js @@ -0,0 +1,206 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 03 June 2002 + * SUMMARY: Function param or local var with same name as a function property + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=137000 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=138708 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=150032 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=150859 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 137000; +var summary = 'Function param or local var with same name as a function prop'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Note use of 'x' both for the parameter to f, + * and as a property name for |f| as an object + */ +function f(x) +{ +} + +status = inSection(1); +f.x = 12; +actual = f.x; +expect = 12; +addThis(); + + + +/* + * A more elaborate example, using the call() method + * to chain constructors from child to parent. + * + * The key point is the use of the same name 'p' for both + * the parameter to the constructor, and as a property name + */ +function parentObject(p) +{ + this.p = 1; +} + +function childObject() +{ + parentObject.call(this); +} +childObject.prototype = parentObject; + +status = inSection(2); +var objParent = new parentObject(); +actual = objParent.p; +expect = 1; +addThis(); + +status = inSection(3); +var objChild = new childObject(); +actual = objChild.p; +expect = 1; +addThis(); + + + +/* + * A similar set-up. Here the same name is being used for + * the parameter to both the Base and Child constructors, + */ +function Base(id) +{ +} + +function Child(id) +{ + this.prop = id; +} +Child.prototype=Base; + +status = inSection(4); +var c1 = new Child('child1'); +actual = c1.prop; +expect = 'child1'; +addThis(); + + + +/* + * Use same identifier as a property name, too - + */ +function BaseX(id) +{ +} + +function ChildX(id) +{ + this.id = id; +} +ChildX.prototype=BaseX; + +status = inSection(5); +c1 = new ChildX('child1'); +actual = c1.id; +expect = 'child1'; +addThis(); + + + +/* + * From http://bugzilla.mozilla.org/show_bug.cgi?id=150032 + * + * Here the same name is being used both for a local variable + * declared in g(), and as a property name for |g| as an object + */ +function g() +{ + var propA = g.propA; + var propB = g.propC; + + this.getVarA = function() {return propA;} + this.getVarB = function() {return propB;} +} +g.propA = 'A'; +g.propB = 'B'; +g.propC = 'C'; +var obj = new g(); + +status = inSection(6); +actual = obj.getVarA(); // this one was returning 'undefined' +expect = 'A'; +addThis(); + +status = inSection(7); +actual = obj.getVarB(); // this one is easy; it never failed +expect = 'C'; +addThis(); + + + +/* + * By martin.honnen@gmx.de + * From http://bugzilla.mozilla.org/show_bug.cgi?id=150859 + * + * Here the same name is being used for a local var in F + * and as a property name for |F| as an object + * + * Twist: the property is added via another function. + */ +function setFProperty(val) +{ + F.propA = val; +} + +function F() +{ + var propA = 'Local variable in F'; +} + +status = inSection(8); +setFProperty('Hello'); +actual = F.propA; // this was returning 'undefined' +expect = 'Hello'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/regress-192105.js b/js/src/tests/js1_5/Object/regress-192105.js new file mode 100644 index 000000000..3673b256d --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-192105.js @@ -0,0 +1,149 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 February 2003 + * SUMMARY: Using |instanceof| to check if function is called as a constructor + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=192105 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 192105; +var summary = 'Using |instanceof| to check if f() is called as constructor'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * This function is the heart of the test. It sets the result + * variable |actual|, which we will compare against |expect|. + * + * Note |actual| will be set to |true| or |false| according + * to whether or not this function is called as a constructor; + * i.e. whether it is called via the |new| keyword or not - + */ +function f() +{ + actual = (this instanceof f); +} + + +/* + * Call f as a constructor from global scope + */ +status = inSection(1); +new f(); // sets |actual| +expect = true; +addThis(); + +/* + * Now, not as a constructor + */ +status = inSection(2); +f(); // sets |actual| +expect = false; +addThis(); + + +/* + * Call f as a constructor from function scope + */ +function F() +{ + new f(); +} +status = inSection(3); +F(); // sets |actual| +expect = true; +addThis(); + +/* + * Now, not as a constructor + */ +function G() +{ + f(); +} +status = inSection(4); +G(); // sets |actual| +expect = false; +addThis(); + + +/* + * Now make F() and G() methods of an object + */ +var obj = {F:F, G:G}; +status = inSection(5); +obj.F(); // sets |actual| +expect = true; +addThis(); + +status = inSection(6); +obj.G(); // sets |actual| +expect = false; +addThis(); + + +/* + * Now call F() and G() from yet other functions, and use eval() + */ +function A() +{ + eval('F();'); +} +status = inSection(7); +A(); // sets |actual| +expect = true; +addThis(); + + +function B() +{ + eval('G();'); +} +status = inSection(8); +B(); // sets |actual| +expect = false; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/regress-308806-01.js b/js/src/tests/js1_5/Object/regress-308806-01.js new file mode 100644 index 000000000..8e0a66839 --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-308806-01.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 308806; +var summary = 'Object.prototype.toLocaleString() should track Object.prototype.toString() '; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {toString: function() { return 'foo'; }}; + +expect = o.toString(); +actual = o.toLocaleString(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Object/regress-338709.js b/js/src/tests/js1_5/Object/regress-338709.js new file mode 100644 index 000000000..ca82e7fbc --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-338709.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338709; +var summary = 'ReadOnly properties should not be overwritten by using ' + + 'Object and try..throw..catch'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +Object = function () { return Math }; +expect = Math.LN2; +try +{ + throw 1990; +} +catch (LN2) +{ +} +actual = Math.LN2; +print("Math.LN2 = " + Math.LN2) + reportCompare(expect, actual, summary); + +var s = new String("abc"); +Object = function () { return s }; +expect = s.length; +try +{ + throw -8 + } +catch (length) +{ +} +actual = s.length; +print("length of '" + s + "' = " + s.length) + reportCompare(expect, actual, summary); + +var re = /xy/m; +Object = function () { return re }; +expect = re.multiline; +try +{ + throw false + } +catch (multiline) +{ +} +actual = re.multiline; +print("re.multiline = " + re.multiline) + reportCompare(expect, actual, summary); + +if ("document" in this) { + // Let the document be its own documentElement. + Object = function () { return document } + expect = document.documentElement + ''; + try + { + throw document; + } + catch (documentElement) + { + } + actual = document.documentElement + ''; + print("document.documentElement = " + document.documentElement) + } +else + Object = this.constructor + + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Object/regress-362872-01.js b/js/src/tests/js1_5/Object/regress-362872-01.js new file mode 100644 index 000000000..0808ee82b --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-362872-01.js @@ -0,0 +1,41 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 362872; +var summary = 'script should not drop watchpoint that is in use'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var rooter = {}, object = {}, filler1 = "", filler2 = "\u5555"; + for(var i = 0; i < 32/2-2; i++) { filler1 += "\u5050"; } + object.watch("foo", function(){ + object.unwatch("foo"); + object.unwatch("foo"); + for(var i = 0; i < 8 * 1024; i++) { + rooter[i] = filler1 + filler2; + } + }); + object.foo = "bar"; + } + exploit(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/regress-362872-02.js b/js/src/tests/js1_5/Object/regress-362872-02.js new file mode 100644 index 000000000..edee43a4a --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-362872-02.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 362872; +var summary = 'script should not drop watchpoint that is in use'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.watch('x', function f() { + print("before"); + x = 3; + print("after"); + }); +x = 3; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Object/regress-382503.js b/js/src/tests/js1_5/Object/regress-382503.js new file mode 100644 index 000000000..373b45f6e --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-382503.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 382503; +var summary = 'Do not assert: with prototype=regexp'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f(x) +{ + prototype = /a/; + + if (x) { + return /b/; + return /c/; + } else { + return /d/; + } +} + +void f(false); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Object/regress-382532.js b/js/src/tests/js1_5/Object/regress-382532.js new file mode 100644 index 000000000..10e43f385 --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-382532.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 382532; +var summary = 'instanceof,... broken by use of |prototype| in heavyweight constructor'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var prototype; + + function Bug() { + var func = function () { x; }; + prototype; + } + + expect = true; + actual = (new Bug instanceof Bug); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/regress-465476.js b/js/src/tests/js1_5/Object/regress-465476.js new file mode 100644 index 000000000..f089f5ac0 --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-465476.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465476; +var summary = '"-0" and "0" are distinct properties.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = { "0": 3, "-0": 7 }; + + expect = actual = 'No Exception'; + + try + { + if (!("0" in x)) + throw "0 not in x"; + if (!("-0" in x)) + throw "-0 not in x"; + delete x[0]; + if ("0" in x) + throw "0 in x after delete"; + if (!("-0" in x)) + throw "-0 removed from x after unassociated delete"; + delete x["-0"]; + if ("-0" in x) + throw "-0 in x after delete"; + x[0] = 3; + if (!("0" in x)) + throw "0 not in x after insertion of 0 property"; + if ("-0" in x) + throw "-0 in x after insertion of 0 property"; + x["-0"] = 7; + if (!("-0" in x)) + throw "-0 not in x after reinsertion"; + + var props = []; + for (var i in x) + props.push(i); + if (props.length !== 2) + throw "not all props found!"; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/regress-90596-003.js b/js/src/tests/js1_5/Object/regress-90596-003.js new file mode 100644 index 000000000..9404a8b1b --- /dev/null +++ b/js/src/tests/js1_5/Object/regress-90596-003.js @@ -0,0 +1,278 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 August 2001 + * + * SUMMARY: A [DontEnum] prop, if overridden, should appear in for-in loops. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=90596 + * + * NOTE: some inefficiencies in the test are made for the sake of readability. + * For example, we quote string values like "Hi" in lines like this: + * + * actual = enumerateThis(obj); + * expect = '{prop:"Hi"}'; + * + * But enumerateThis(obj) gets literal value Hi for obj.prop, not + * literal "Hi". We take care of all these details in the + * compactThis(), sortThis() functions. Sorting properties + * alphabetically is necessary for the test to work in Rhino. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 90596; +var summary = '[DontEnum] props (if overridden) should appear in for-in loops'; +var cnCOMMA = ','; +var cnCOLON = ':'; +var cnLBRACE = '{'; +var cnRBRACE = '}'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var obj = {}; + + +status = inSection(1); +obj = {toString:9}; +actual = enumerateThis(obj); +expect = '{toString:9}'; +addThis(); + +status = inSection(2); +obj = {hasOwnProperty:"Hi"}; +actual = enumerateThis(obj); +expect = '{hasOwnProperty:"Hi"}'; +addThis(); + +status = inSection(3); +obj = {toString:9, hasOwnProperty:"Hi"}; +actual = enumerateThis(obj); +expect = '{toString:9, hasOwnProperty:"Hi"}'; +addThis(); + +status = inSection(4); +obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}; +actual = enumerateThis(obj); +expect = '{prop1:1, toString:9, hasOwnProperty:"Hi"}'; +addThis(); + + +// TRY THE SAME THING IN EVAL CODE +var s = ''; + +status = inSection(5); +s = 'obj = {toString:9}'; +eval(s); +actual = enumerateThis(obj); +expect = '{toString:9}'; +addThis(); + +status = inSection(6); +s = 'obj = {hasOwnProperty:"Hi"}'; +eval(s); +actual = enumerateThis(obj); +expect = '{hasOwnProperty:"Hi"}'; +addThis(); + +status = inSection(7); +s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = enumerateThis(obj); +expect = '{toString:9, hasOwnProperty:"Hi"}'; +addThis(); + +status = inSection(8); +s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = enumerateThis(obj); +expect = '{prop1:1, toString:9, hasOwnProperty:"Hi"}'; +addThis(); + + +// TRY THE SAME THING IN FUNCTION CODE +function A() +{ + status = inSection(9); + var s = 'obj = {toString:9}'; + eval(s); + actual = enumerateThis(obj); + expect = '{toString:9}'; + addThis(); +} +A(); + +function B() +{ + status = inSection(10); + var s = 'obj = {hasOwnProperty:"Hi"}'; + eval(s); + actual = enumerateThis(obj); + expect = '{hasOwnProperty:"Hi"}'; + addThis(); +} +B(); + +function C() +{ + status = inSection(11); + var s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = enumerateThis(obj); + expect = '{toString:9, hasOwnProperty:"Hi"}'; + addThis(); +} +C(); + +function D() +{ + status = inSection(12); + var s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = enumerateThis(obj); + expect = '{prop1:1, toString:9, hasOwnProperty:"Hi"}'; + addThis(); +} +D(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function enumerateThis(obj) +{ + var arr = new Array(); + + for (var prop in obj) + { + arr.push(prop + cnCOLON + obj[prop]); + } + + var ret = addBraces(String(arr)); + return ret; +} + + +function addBraces(text) +{ + return cnLBRACE + text + cnRBRACE; +} + + +/* + * Sort properties alphabetically so the test will work in Rhino + */ +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = sortThis(actual); + expectedvalues[UBound] = sortThis(expect); + UBound++; +} + + +/* + * Takes a string of the form '{"c", "b", "a", 2}' and returns '{2,a,b,c}' + */ +function sortThis(sList) +{ + sList = compactThis(sList); + sList = stripBraces(sList); + var arr = sList.split(cnCOMMA); + arr = arr.sort(); + var ret = String(arr); + ret = addBraces(ret); + return ret; +} + + +/* + * Strips out any whitespace or quotes from the text - + */ +function compactThis(text) +{ + var charCode = 0; + var ret = ''; + + for (var i=0; i<text.length; i++) + { + charCode = text.charCodeAt(i); + + if (!isWhiteSpace(charCode) && !isQuote(charCode)) + ret += text.charAt(i); + } + + return ret; +} + + +function isWhiteSpace(charCode) +{ + switch (charCode) + { + case (0x0009): + case (0x000B): + case (0x000C): + case (0x0020): + case (0x000A): // '\n' + case (0x000D): // '\r' + return true; + break; + + default: + return false; + } +} + + +function isQuote(charCode) +{ + switch (charCode) + { + case (0x0027): // single quote + case (0x0022): // double quote + return true; + break; + + default: + return false; + } +} + + +/* + * strips off braces at beginning and end of text - + */ +function stripBraces(text) +{ + // remember to escape the braces... + var arr = text.match(/^\{(.*)\}$/); + + // defend against a null match... + if (arr != null && arr[1] != null) + return arr[1]; + return text; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Object/shell.js b/js/src/tests/js1_5/Object/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Object/shell.js diff --git a/js/src/tests/js1_5/README b/js/src/tests/js1_5/README new file mode 100644 index 000000000..e2b340416 --- /dev/null +++ b/js/src/tests/js1_5/README @@ -0,0 +1 @@ +JavaScript 1.5 diff --git a/js/src/tests/js1_5/Regress/browser.js b/js/src/tests/js1_5/Regress/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Regress/browser.js diff --git a/js/src/tests/js1_5/Regress/regress-102725.js b/js/src/tests/js1_5/Regress/regress-102725.js new file mode 100644 index 000000000..19b54c631 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-102725.js @@ -0,0 +1,64 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 09 October 2001 + * + * SUMMARY: Regression test for Bugzilla bug 102725 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=102725 + * "gcc -O2 problems converting numbers to strings" + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 102725; +var summary = 'Testing converting numbers to strings'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Successive calls to foo.toString() were producing different answers! + */ +status = inSection(1); +foo = (new Date()).getTime(); +actual = foo.toString(); +expect = foo.toString(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-10278.js b/js/src/tests/js1_5/Regress/regress-10278.js new file mode 100644 index 000000000..fda2343d4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-10278.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + +/** + * File Name: regress-10278.js + * Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=10278 + * Description: Function declarations do not need to be separated + * by semi-colon if they occur on the same line. + * Author: bob@bclary.com + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 10278; +var summary = 'Function declarations do not need to be separated by semi-colon'; +var actual; +var expect; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'pass'; + try + { + eval("function f(){}function g(){}"); + actual = "pass"; + printStatus('no exception thrown'); + } + catch ( e ) + { + actual = "fail"; + printStatus('exception ' + e.toString() + ' thrown'); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-104077.js b/js/src/tests/js1_5/Regress/regress-104077.js new file mode 100644 index 000000000..c0e9abcab --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-104077.js @@ -0,0 +1,473 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 October 2001 + * SUMMARY: Regression test for Bugzilla bug 104077 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=104077 + * "JS crash: with/finally/return" + * + * Also http://bugzilla.mozilla.org/show_bug.cgi?id=120571 + * "JS crash: try/catch/continue." + * + * SpiderMonkey crashed on this code - it shouldn't. + * + * NOTE: the finally-blocks below should execute even if their try-blocks + * have return or throw statements in them: + * + * ------- Additional Comment #76 From Mike Shaver 2001-12-07 01:21 ------- + * finally trumps return, and all other control-flow constructs that cause + * program execution to jump out of the try block: throw, break, etc. Once you + * enter a try block, you will execute the finally block after leaving the try, + * regardless of what happens to make you leave the try. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 104077; +var summary = "Just testing that we don't crash on with/finally/return -"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function addValues(obj) +{ + var sum; + with (obj) + { + try + { + sum = arg1 + arg2; + } + finally + { + return sum; + } + } +} + +status = inSection(1); +var obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +actual = addValues(obj); +expect = 3; +captureThis(); + + + +function tryThis() +{ + var sum = 4 ; + var i = 0; + + while (sum < 10) + { + try + { + sum += 1; + i += 1; + } + finally + { + print("In finally case of tryThis() function"); + } + } + return i; +} + +status = inSection(2); +actual = tryThis(); +expect = 6; +captureThis(); + + + +function myTest(x) +{ + var obj = new Object(); + var msg; + + with (obj) + { + msg = (x != null) ? "NO" : "YES"; + print("Is the provided argument to myTest() null? : " + msg); + + try + { + throw "ZZZ"; + } + catch(e) + { + print("Caught thrown exception = " + e); + } + } + + return 1; +} + +status = inSection(3); +actual = myTest(null); +expect = 1; +captureThis(); + + + +function addValues_2(obj) +{ + var sum = 0; + with (obj) + { + try + { + sum = arg1 + arg2; + with (arg3) + { + while (sum < 10) + { + try + { + if (sum > 5) + return sum; + sum += 1; + } + catch(e) + { + print('Caught an exception in addValues_2() function: ' + e); + } + } + } + } + finally + { + return sum; + } + } +} + +status = inSection(4); +obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +obj.arg3 = new Object(); +obj.arg3.a = 10; +obj.arg3.b = 20; +actual = addValues_2(obj); +expect = 6; +captureThis(); + + + +status = inSection(5); +try +{ + throw new A(); +} +catch(e) +{ +} +finally +{ + try + { + throw new A(); + } + catch(e) + { + } + finally + { + actual = 'a'; + } + actual = 'b'; +} +expect = 'b'; +captureThis(); + + + + +function testfunc(mode) +{ + var obj = new Object(); + with (obj) + { + var num = 100; + var str = "abc" ; + + if (str == null) + { + try + { + throw "authentication.0"; + } + catch(e) + { + } + finally + { + } + + return num; + } + else + { + try + { + if (mode == 0) + throw "authentication.0"; + else + mytest(); + } + catch(e) + { + } + finally + { + } + + return num; + } + } +} + +status = inSection(6); +actual = testfunc(0); +expect = 100; +captureThis(); + +status = inSection(7); +actual = testfunc(); +expect = 100; +captureThis(); + + + + +function entry_menu() +{ + var document = new Object(); + var dialog = new Object(); + var num = 100; + + with (document) + { + with (dialog) + { + try + { + while (true) + { + return num; + } + } + finally + { + } + } + } +} + +status = inSection(8); +actual = entry_menu(); +expect = 100; +captureThis(); + + + + +function addValues_5(obj) +{ + var sum = 0; + + with (obj) + { + try + { + sum = arg1 + arg2; + with (arg3) + { + while (sum < 10) + { + try + { + if (sum > 5) + return sum; + sum += 1; + } + catch (e) + { + sum += 1; + } + } + } + } + finally + { + try + { + sum += 1; + print("In finally block of addValues_5() function: sum = " + sum); + } + catch (e) + { + sum += 1; + print("In finally catch block of addValues_5() function: sum = " + sum + ", e = " + e); + } + finally + { + sum += 1; + print("In finally finally block of addValues_5() function: sum = " + sum); + return sum; + } + } + } +} + +status = inSection(11); +obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +obj.arg3 = new Object(); +obj.arg3.a = 10; +obj.arg3.b = 20; +actual = addValues_5(obj); +expect = 8; +captureThis(); + + + + +function testObj(obj) +{ + var x = 42; + + try + { + with (obj) + { + if (obj.p) + throw obj.p; + x = obj.q; + } + } + finally + { + print("in finally block of testObj() function"); + return 999; + } +} + +status = inSection(12); +obj = {p:43}; +actual = testObj(obj); +expect = 999; +captureThis(); + + + +/* + * Next two cases are from http://bugzilla.mozilla.org/show_bug.cgi?id=120571 + */ +function a120571() +{ + while(0) + { + try + { + } + catch(e) + { + continue; + } + } +} + +// this caused a crash! Test to see that it doesn't now. +print(a120571); + +// Now test that we have a non-null value for a120571.toString() +status = inSection(13); +try +{ + actual = a120571.toString().match(/continue/)[0]; +} +catch(e) +{ + actual = 'FAILED! Did not find "continue" in function body'; +} +expect = 'continue'; +captureThis(); + + + + +function b() +{ + for(;;) + { + try + { + } + catch(e) + { + continue; + } + } +} + +// this caused a crash!!! Test to see that it doesn't now. +print(b); + +// Now test that we have a non-null value for b.toString() +status = inSection(14); +try +{ + actual = b.toString().match(/continue/)[0]; +} +catch(e) +{ + actual = 'FAILED! Did not find "continue" in function body'; +} +expect = 'continue'; +captureThis(); + + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-106244.js b/js/src/tests/js1_5/Regress/regress-106244.js new file mode 100644 index 000000000..6a7d8acfa --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-106244.js @@ -0,0 +1,39 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 106244; +var summary = 'No warning in strict mode if (a = b && c == d)...'; +var actual = ''; +var expect = 'test for equality (==) mistyped as assignment (=)?'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +var a = false; +var b = true; +var c = false; +var d = true; +var result; + +try +{ + if (a = b && c == d) + result = true; + else + result = false; +} +catch(ex) +{ + actual = ex.message; +} + +print('result = ' + result); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-110286.js b/js/src/tests/js1_5/Regress/regress-110286.js new file mode 100644 index 000000000..c7d656376 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-110286.js @@ -0,0 +1,122 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 16 Nov 2001 + * SUMMARY: multiline comments containing "/*" should not be syntax errors + * See http://bugzilla.mozilla.org/show_bug.cgi?id=110286 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 110286; +var summary = 'Multiline comments containing "/*" should not be syntax errors'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = eval("/* /* */3"); +expect = 3; +addThis(); + +status = inSection(2); +actual = eval("3/* /* */"); +expect = 3; +addThis(); + +status = inSection(3); +actual = eval("/* 3/* */"); +expect = undefined; +addThis(); + +status = inSection(4); +actual = eval("/* /*3 */"); +expect = undefined; +addThis(); + +status = inSection(5); +var passed = true; +try +{ + eval("/* blah blah /* blah blah */"); +} +catch(e) +{ + passed = false; +} +actual = passed; +expect = true; +addThis(); + + +status = inSection(6); +try +{ + /* + /*A/* /* /*A/* + /* blah blah /* + /* blah blah /* + /* /*A/* /*A/* + */ + var result = 'PASSED'; +} +catch(e) +{ + var result = 'FAILED'; +} +actual = result; +expect = 'PASSED'; +addThis(); + + +status = inSection(7); +var str = 'ABC'; +/* + * /* + * /* + * /* + * /* + * + */ +str += 'DEF'; +actual = str; +expect = 'ABCDEF'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-111557.js b/js/src/tests/js1_5/Regress/regress-111557.js new file mode 100644 index 000000000..49fd4247e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-111557.js @@ -0,0 +1,10931 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 26 Nov 2001 + * SUMMARY: JS should not crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=111557 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 111557; +var summary = "Just seeing that we don't crash on this code -"; + +printBugNumber(BUGNUMBER); +printStatus(summary); + + +/* + * NOTE: have defined |top| as |this| to make this a standalone JS shell test. + * This came from the HTML of a frame, where |top| would have its DOM meaning. + */ +var top = this; + +top.authors = new Array(); +top.titles = new Array(); +var i = 0; + + +top.authors[i] = "zPROD xA.5375."; +top.titles[i] = "NDS Libraries for C"; +i++; + +top.authors[i] = "zFLDR xB.5375.0100."; +top.titles[i] = "NDS Backup Services"; +i++; + +top.authors[i] = "zFLDR xC.5375.0100.0001."; +top.titles[i] = "Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0001."; +top.titles[i] = "NDSBackupServerData"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0002."; +top.titles[i] = "NDSFreeNameList"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0003."; +top.titles[i] = "NDSGetReplicaPartitionNames"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0004."; +top.titles[i] = "NDSIsOnlyServerInTree"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0005."; +top.titles[i] = "NDSSYSVolumeRecovery"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0001.0006."; +top.titles[i] = "NDSVerifyServerInfo"; +i++; + +top.authors[i] = "zFLDR xC.5375.0100.0002."; +top.titles[i] = "Structures"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0002.0001."; +top.titles[i] = "NAMEID_TYPE"; +i++; + +top.authors[i] = "zFLDR xC.5375.0100.0003."; +top.titles[i] = "Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0003.0001."; +top.titles[i] = "NDS Reason Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0100.0003.0002."; +top.titles[i] = "NDS Server Flags"; +i++; + +top.authors[i] = "zHTML xC.5375.0100.0004."; +top.titles[i] = "Revision History"; +i++; + +top.authors[i] = "zFLDR xB.5375.0300."; +top.titles[i] = "NDS Event Services"; +i++; + +top.authors[i] = "zFLDR xC.5375.0300.0001."; +top.titles[i] = "Concepts"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0001."; +top.titles[i] = "NDS Event Introduction"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0002."; +top.titles[i] = "NDS Event Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0003."; +top.titles[i] = "NDS Event Priorities"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0004."; +top.titles[i] = "NDS Event Data Filtering"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0005."; +top.titles[i] = "NDS Event Types"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0001.0006."; +top.titles[i] = "Global Network Monitoring"; +i++; + +top.authors[i] = "zFLDR xC.5375.0300.0002."; +top.titles[i] = "Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0002.0001."; +top.titles[i] = "Monitoring NDS Events"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0002.0002."; +top.titles[i] = "Registering for NDS Events"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0002.0003."; +top.titles[i] = "Unregistering for NDS Events"; +i++; + +top.authors[i] = "zFLDR xC.5375.0300.0003."; +top.titles[i] = "Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0001."; +top.titles[i] = "NWDSEConvertEntryName"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0002."; +top.titles[i] = "NWDSEGetLocalAttrID"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0003."; +top.titles[i] = "NWDSEGetLocalAttrName"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0004."; +top.titles[i] = "NWDSEGetLocalClassID"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0005."; +top.titles[i] = "NWDSEGetLocalClassName"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0006."; +top.titles[i] = "NWDSEGetLocalEntryID"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0007."; +top.titles[i] = "NWDSEGetLocalEntryName"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0008."; +top.titles[i] = "NWDSERegisterForEvent"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0009."; +top.titles[i] = "NWDSERegisterForEventWithResult"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0003.0010."; +top.titles[i] = "NWDSEUnRegisterForEvent"; +i++; + +top.authors[i] = "zFLDR xC.5375.0300.0004."; +top.titles[i] = "Structures"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0001."; +top.titles[i] = "DSEACL"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0002."; +top.titles[i] = "DSEBackLink"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0003."; +top.titles[i] = "DSEBinderyObjectInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0004."; +top.titles[i] = "DSEBitString"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0005."; +top.titles[i] = "DSEChangeConnState"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0006."; +top.titles[i] = "DSECIList"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0007."; +top.titles[i] = "DSEDebugInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0008."; +top.titles[i] = "DSEEmailAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0009."; +top.titles[i] = "DSEEntryInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0010."; +top.titles[i] = "DSEEntryInfo2"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0011."; +top.titles[i] = "DSEEventData"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0012."; +top.titles[i] = "DSEFaxNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0013."; +top.titles[i] = "DSEHold"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0014."; +top.titles[i] = "DSEModuleState"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0015."; +top.titles[i] = "DSENetAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0016."; +top.titles[i] = "DSEOctetList"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0017."; +top.titles[i] = "DSEPath"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0018."; +top.titles[i] = "DSEReplicaPointer"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0019."; +top.titles[i] = "DSESEVInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0020."; +top.titles[i] = "DSETimeStamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0021."; +top.titles[i] = "DSETraceInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0022."; +top.titles[i] = "DSETypedName"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0023."; +top.titles[i] = "DSEVALData"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0004.0024."; +top.titles[i] = "DSEValueInfo"; +i++; + +top.authors[i] = "zFLDR xC.5375.0300.0005."; +top.titles[i] = "Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0005.0001."; +top.titles[i] = "Event Priorities"; +i++; + +top.authors[i] = "zHTML xD.5375.0300.0005.0002."; +top.titles[i] = "Event Types"; +i++; + +top.authors[i] = "zHTML xC.5375.0300.0006."; +top.titles[i] = "Revision History"; +i++; + +top.authors[i] = "zFLDR xB.5375.0600."; +top.titles[i] = "NDS Technical Overview"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0001."; +top.titles[i] = "NDS as the Internet Directory"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0001."; +top.titles[i] = "Requirements for Networks and the Internet"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0002."; +top.titles[i] = "NDS Compliance to X.500 Standard"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0003."; +top.titles[i] = "NDS Compliance with LDAP v3"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0004."; +top.titles[i] = "Directory Access Protocols"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0005."; +top.titles[i] = "Programming Interfaces for NDS"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0001.0006."; +top.titles[i] = "NDS Architecture"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0002."; +top.titles[i] = "NDS Objects"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0002.0001."; +top.titles[i] = "NDS Names"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0002.0002."; +top.titles[i] = "Types of Information Stored in NDS"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0002.0003."; +top.titles[i] = "Retrieval of Information from NDS"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0002.0004."; +top.titles[i] = "Tree Walking"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0002.0005."; +top.titles[i] = "NDS Object Management"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0003."; +top.titles[i] = "NDS Security"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0003.0001."; +top.titles[i] = "Authentication"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0003.0002."; +top.titles[i] = "Access Control Lists"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0003.0003."; +top.titles[i] = "Inheritance"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0003.0004."; +top.titles[i] = "NetWare File System"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0004."; +top.titles[i] = "Partitions and Replicas"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0001."; +top.titles[i] = "Partitioning"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0002."; +top.titles[i] = "Replication"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0003."; +top.titles[i] = "Distributed Reference Management"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0004."; +top.titles[i] = "Partition Operations"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0005."; +top.titles[i] = "Synchronization"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0004.0006."; +top.titles[i] = "Background Processes"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0005."; +top.titles[i] = "Bindery Services"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0005.0001."; +top.titles[i] = "NDS Bindery Context"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0005.0002."; +top.titles[i] = "Bindery Context Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0005.0003."; +top.titles[i] = "Bindery Context Eclipsing"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0005.0004."; +top.titles[i] = "NDS Bindery Objects"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0006."; +top.titles[i] = "NDS Return Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0006.0001."; +top.titles[i] = "NDS Return Values from the Operating System"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0006.0002."; +top.titles[i] = "NDS Client Return Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0006.0003."; +top.titles[i] = "NDS Agent Return Values"; +i++; + +top.authors[i] = "zFLDR xC.5375.0600.0007."; +top.titles[i] = "Directory Services Trace Utilities"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0007.0001."; +top.titles[i] = "Using the DSTrace NLM"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0007.0002."; +top.titles[i] = "Using Basic SET DSTrace Commands"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0007.0003."; +top.titles[i] = "Starting Background Processes with SET DSTrace"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0007.0004."; +top.titles[i] = "Tuning Background Processes"; +i++; + +top.authors[i] = "zHTML xD.5375.0600.0007.0005."; +top.titles[i] = "Enabling DSTrace Messages with SET DSTrace"; +i++; + +top.authors[i] = "zHTML xC.5375.0600.0008."; +top.titles[i] = "Revision History"; +i++; + +top.authors[i] = "zFLDR xB.5375.0200."; +top.titles[i] = "NDS Core Services"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0001."; +top.titles[i] = "Programming Concepts"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0001."; +top.titles[i] = "Context Handles"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0002."; +top.titles[i] = "Buffer Management"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0003."; +top.titles[i] = "Read Requests for Object Information"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0004."; +top.titles[i] = "Search Requests"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0005."; +top.titles[i] = "Developing in a Loosely Consistent Environment"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0006."; +top.titles[i] = "Add Object Requests"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0007."; +top.titles[i] = "NDS Security and Applications"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0008."; +top.titles[i] = "Authentication of Client Applications"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0009."; +top.titles[i] = "Multiple Tree Support"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0010."; +top.titles[i] = "Effective Rights Function"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0011."; +top.titles[i] = "Partition Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0012."; +top.titles[i] = "Replica Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0013."; +top.titles[i] = "Read Requests for Schema Information"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0001.0014."; +top.titles[i] = "Schema Extension Requests"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0002."; +top.titles[i] = "Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0001."; +top.titles[i] = "Context Handle Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0002."; +top.titles[i] = "Buffer Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0003."; +top.titles[i] = "Authentication and Connection Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0004."; +top.titles[i] = "Object Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0005."; +top.titles[i] = "Partition and Replica Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0002.0006."; +top.titles[i] = "Schema Tasks"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0003."; +top.titles[i] = "Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0001."; +top.titles[i] = "NWDSAbbreviateName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0002."; +top.titles[i] = "NWDSAbortPartitionOperation"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0003."; +top.titles[i] = "NWDSAddFilterToken"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0004."; +top.titles[i] = "NWDSAddObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0005."; +top.titles[i] = "NWDSAddPartition (obsolete---moved from .h file 11/99)"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0006."; +top.titles[i] = "NWDSAddReplica"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0007."; +top.titles[i] = "NWDSAddSecurityEquiv"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0008."; +top.titles[i] = "NWDSAllocBuf"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0009."; +top.titles[i] = "NWDSAllocFilter"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0010."; +top.titles[i] = "NWDSAuditGetObjectID"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0011."; +top.titles[i] = "NWDSAuthenticate"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0012."; +top.titles[i] = "NWDSAuthenticateConn"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0013."; +top.titles[i] = "NWDSAuthenticateConnEx"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0014."; +top.titles[i] = "NWDSBackupObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0015."; +top.titles[i] = "NWDSBeginClassItem"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0016."; +top.titles[i] = "NWDSCanDSAuthenticate"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0017."; +top.titles[i] = "NWDSCanonicalizeName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0018."; +top.titles[i] = "NWDSChangeObjectPassword"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0019."; +top.titles[i] = "NWDSChangeReplicaType"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0020."; +top.titles[i] = "NWDSCIStringsMatch"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0021."; +top.titles[i] = "NWDSCloseIteration"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0022."; +top.titles[i] = "NWDSCompare"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0023."; +top.titles[i] = "NWDSComputeAttrValSize"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0024."; +top.titles[i] = "NWDSCreateContext (obsolete---moved from .h file 6/99)"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0025."; +top.titles[i] = "NWDSCreateContextHandle"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0026."; +top.titles[i] = "NWDSDefineAttr"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0027."; +top.titles[i] = "NWDSDefineClass"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0028."; +top.titles[i] = "NWDSDelFilterToken"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0029."; +top.titles[i] = "NWDSDuplicateContext (obsolete 03/99)"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0030."; +top.titles[i] = "NWDSDuplicateContextHandle"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0031."; +top.titles[i] = "NWDSExtSyncList"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0032."; +top.titles[i] = "NWDSExtSyncRead"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0033."; +top.titles[i] = "NWDSExtSyncSearch"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0034."; +top.titles[i] = "NWDSFreeBuf"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0035."; +top.titles[i] = "NWDSFreeContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0036."; +top.titles[i] = "NWDSFreeFilter"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0037."; +top.titles[i] = "NWDSGenerateObjectKeyPair"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0038."; +top.titles[i] = "NWDSGetAttrCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0039."; +top.titles[i] = "NWDSGetAttrDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0040."; +top.titles[i] = "NWDSGetAttrName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0041."; +top.titles[i] = "NWDSGetAttrVal"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0042."; +top.titles[i] = "NWDSGetAttrValFlags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0043."; +top.titles[i] = "NWDSGetAttrValModTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0044."; +top.titles[i] = "NWDSGetBinderyContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0045."; +top.titles[i] = "NWDSGetClassDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0046."; +top.titles[i] = "NWDSGetClassDefCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0047."; +top.titles[i] = "NWDSGetClassItem"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0048."; +top.titles[i] = "NWDSGetClassItemCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0049."; +top.titles[i] = "NWDSGetContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0050."; +top.titles[i] = "NWDSGetCountByClassAndName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0051."; +top.titles[i] = "NWDSGetCurrentUser"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0052."; +top.titles[i] = "NWDSGetDefNameContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0053."; +top.titles[i] = "NWDSGetDSIInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0054."; +top.titles[i] = "NWDSGetDSVerInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0055."; +top.titles[i] = "NWDSGetEffectiveRights"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0056."; +top.titles[i] = "NWDSGetMonitoredConnRef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0057."; +top.titles[i] = "NWDSGetNDSInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0058."; +top.titles[i] = "NWDSGetObjectCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0059."; +top.titles[i] = "NWDSGetObjectHostServerAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0060."; +top.titles[i] = "NWDSGetObjectName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0061."; +top.titles[i] = "NWDSGetObjectNameAndInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0062."; +top.titles[i] = "NWDSGetPartitionExtInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0063."; +top.titles[i] = "NWDSGetPartitionExtInfoPtr"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0064."; +top.titles[i] = "NWDSGetPartitionInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0065."; +top.titles[i] = "NWDSGetPartitionRoot"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0066."; +top.titles[i] = "NWDSGetServerAddresses (obsolete 3/98)"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0067."; +top.titles[i] = "NWDSGetServerAddresses2"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0068."; +top.titles[i] = "NWDSGetServerDN"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0069."; +top.titles[i] = "NWDSGetServerName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0070."; +top.titles[i] = "NWDSGetSyntaxCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0071."; +top.titles[i] = "NWDSGetSyntaxDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0072."; +top.titles[i] = "NWDSGetSyntaxID"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0073."; +top.titles[i] = "NWDSInitBuf"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0074."; +top.titles[i] = "NWDSInspectEntry"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0075."; +top.titles[i] = "NWDSJoinPartitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0076."; +top.titles[i] = "NWDSList"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0077."; +top.titles[i] = "NWDSListAttrsEffectiveRights"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0078."; +top.titles[i] = "NWDSListByClassAndName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0079."; +top.titles[i] = "NWDSListContainableClasses"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0080."; +top.titles[i] = "NWDSListContainers"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0081."; +top.titles[i] = "NWDSListPartitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0082."; +top.titles[i] = "NWDSListPartitionsExtInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0083."; +top.titles[i] = "NWDSLogin"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0084."; +top.titles[i] = "NWDSLoginAsServer"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0085."; +top.titles[i] = "NWDSLogout"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0086."; +top.titles[i] = "NWDSMapIDToName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0087."; +top.titles[i] = "NWDSMapNameToID"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0088."; +top.titles[i] = "NWDSModifyClassDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0089."; +top.titles[i] = "NWDSModifyDN"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0090."; +top.titles[i] = "NWDSModifyObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0091."; +top.titles[i] = "NWDSModifyRDN"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0092."; +top.titles[i] = "NWDSMoveObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0093."; +top.titles[i] = "NWDSMutateObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0094."; +top.titles[i] = "NWDSOpenConnToNDSServer"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0095."; +top.titles[i] = "NWDSOpenMonitoredConn"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0096."; +top.titles[i] = "NWDSOpenStream"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0097."; +top.titles[i] = "NWDSPartitionReceiveAllUpdates"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0098."; +top.titles[i] = "NWDSPartitionSendAllUpdates"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0099."; +top.titles[i] = "NWDSPutAttrName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0100."; +top.titles[i] = "NWDSPutAttrNameAndVal"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0101."; +top.titles[i] = "NWDSPutAttrVal"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0102."; +top.titles[i] = "NWDSPutChange"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0103."; +top.titles[i] = "NWDSPutChangeAndVal"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0104."; +top.titles[i] = "NWDSPutClassItem"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0105."; +top.titles[i] = "NWDSPutClassName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0106."; +top.titles[i] = "NWDSPutFilter"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0107."; +top.titles[i] = "NWDSPutSyntaxName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0108."; +top.titles[i] = "NWDSRead"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0109."; +top.titles[i] = "NWDSReadAttrDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0110."; +top.titles[i] = "NWDSReadClassDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0111."; +top.titles[i] = "NWDSReadNDSInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0112."; +top.titles[i] = "NWDSReadObjectDSIInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0113."; +top.titles[i] = "NWDSReadObjectInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0114."; +top.titles[i] = "NWDSReadReferences"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0115."; +top.titles[i] = "NWDSReadSyntaxDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0116."; +top.titles[i] = "NWDSReadSyntaxes"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0117."; +top.titles[i] = "NWDSReloadDS"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0118."; +top.titles[i] = "NWDSRemoveAllTypes"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0119."; +top.titles[i] = "NWDSRemoveAttrDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0120."; +top.titles[i] = "NWDSRemoveClassDef"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0121."; +top.titles[i] = "NWDSRemoveObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0122."; +top.titles[i] = "NWDSRemovePartition"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0123."; +top.titles[i] = "NWDSRemoveReplica"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0124."; +top.titles[i] = "NWDSRemSecurityEquiv"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0125."; +top.titles[i] = "NWDSRepairTimeStamps"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0126."; +top.titles[i] = "NWDSReplaceAttrNameAbbrev"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0127."; +top.titles[i] = "NWDSResolveName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0128."; +top.titles[i] = "NWDSRestoreObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0129."; +top.titles[i] = "NWDSReturnBlockOfAvailableTrees"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0130."; +top.titles[i] = "NWDSScanConnsForTrees"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0131."; +top.titles[i] = "NWDSScanForAvailableTrees"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0132."; +top.titles[i] = "NWDSSearch"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0133."; +top.titles[i] = "NWDSSetContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0134."; +top.titles[i] = "NWDSSetCurrentUser"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0135."; +top.titles[i] = "NWDSSetDefNameContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0136."; +top.titles[i] = "NWDSSetMonitoredConnection"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0137."; +top.titles[i] = "NWDSSplitPartition"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0138."; +top.titles[i] = "NWDSSyncPartition"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0139."; +top.titles[i] = "NWDSSyncReplicaToServer"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0140."; +top.titles[i] = "NWDSSyncSchema"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0141."; +top.titles[i] = "NWDSUnlockConnection"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0142."; +top.titles[i] = "NWDSVerifyObjectPassword"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0143."; +top.titles[i] = "NWDSWhoAmI"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0144."; +top.titles[i] = "NWGetDefaultNameContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0145."; +top.titles[i] = "NWGetFileServerUTCTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0146."; +top.titles[i] = "NWGetNumConnections"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0147."; +top.titles[i] = "NWGetNWNetVersion"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0148."; +top.titles[i] = "NWGetPreferredConnName"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0149."; +top.titles[i] = "NWIsDSAuthenticated"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0150."; +top.titles[i] = "NWIsDSServer"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0151."; +top.titles[i] = "NWNetInit"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0152."; +top.titles[i] = "NWNetTerm"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0153."; +top.titles[i] = "NWSetDefaultNameContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0003.0154."; +top.titles[i] = "NWSetPreferredDSTree"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0004."; +top.titles[i] = "Structures"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0001."; +top.titles[i] = "Asn1ID_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0002."; +top.titles[i] = "Attr_Info_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0003."; +top.titles[i] = "Back_Link_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0004."; +top.titles[i] = "Bit_String_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0005."; +top.titles[i] = "Buf_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0006."; +top.titles[i] = "CI_List_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0007."; +top.titles[i] = "Class_Info_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0008."; +top.titles[i] = "EMail_Address_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0009."; +top.titles[i] = "Fax_Number_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0010."; +top.titles[i] = "Filter_Cursor_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0011."; +top.titles[i] = "Filter_Node_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0012."; +top.titles[i] = "Hold_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0013."; +top.titles[i] = "NDSOSVersion_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0014."; +top.titles[i] = "NDSStatsInfo_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0015."; +top.titles[i] = "Net_Address_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0016."; +top.titles[i] = "NWDS_TimeStamp_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0017."; +top.titles[i] = "Object_ACL_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0018."; +top.titles[i] = "Object_Info_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0019."; +top.titles[i] = "Octet_List_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0020."; +top.titles[i] = "Octet_String_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0021."; +top.titles[i] = "Path_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0022."; +top.titles[i] = "Replica_Pointer_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0023."; +top.titles[i] = "Syntax_Info_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0024."; +top.titles[i] = "TimeStamp_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0025."; +top.titles[i] = "Typed_Name_T"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0004.0026."; +top.titles[i] = "Unknown_Attr_T"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0005."; +top.titles[i] = "Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0001."; +top.titles[i] = "Attribute Constraint Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0002."; +top.titles[i] = "Attribute Value Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0003."; +top.titles[i] = "Buffer Operation Types and Related Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0004."; +top.titles[i] = "Class Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0005."; +top.titles[i] = "Change Types for Modifying Objects"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0006."; +top.titles[i] = "Context Keys and Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0007."; +top.titles[i] = "Default Context Key Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0008."; +top.titles[i] = "DCK_FLAGS Bit Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0009."; +top.titles[i] = "DCK_NAME_FORM Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0010."; +top.titles[i] = "DCK_CONFIDENCE Bit Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0011."; +top.titles[i] = "DCK_DSI_FLAGS Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0012."; +top.titles[i] = "DSI_ENTRY_FLAGS Values"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0013."; +top.titles[i] = "Filter Tokens"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0014."; +top.titles[i] = "Information Types for Attribute Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0015."; +top.titles[i] = "Information Types for Class Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0016."; +top.titles[i] = "Information Types for Search and Read"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0017."; +top.titles[i] = "Name Space Types"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0018."; +top.titles[i] = "NDS Access Control Rights"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0019."; +top.titles[i] = "NDS Ping Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0020."; +top.titles[i] = "DSP Replica Information Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0021."; +top.titles[i] = "Network Address Types"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0022."; +top.titles[i] = "Scope Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0023."; +top.titles[i] = "Replica Types"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0024."; +top.titles[i] = "Replica States"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0025."; +top.titles[i] = "Syntax Matching Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0005.0026."; +top.titles[i] = "Syntax IDs"; +i++; + +top.authors[i] = "zFLDR xC.5375.0200.0006."; +top.titles[i] = "NDS Example Code"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0006.0001."; +top.titles[i] = "Context Handle"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0006.0002."; +top.titles[i] = "Object and Attribute"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0006.0003."; +top.titles[i] = "Browsing and Searching"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0006.0004."; +top.titles[i] = "Batch Modification of Objects and Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0200.0006.0005."; +top.titles[i] = "Schema"; +i++; + +top.authors[i] = "zHTML xC.5375.0200.0007."; +top.titles[i] = "Revision History"; +i++; + +top.authors[i] = "zFLDR xB.5375.0500."; +top.titles[i] = "NDS Schema Reference"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0001."; +top.titles[i] = "Schema Concepts"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0001."; +top.titles[i] = "Schema Structure"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0002."; +top.titles[i] = "Schema Components"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0003."; +top.titles[i] = "Object Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0004."; +top.titles[i] = "Naming Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0005."; +top.titles[i] = "Containment Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0006."; +top.titles[i] = "Super Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0007."; +top.titles[i] = "Object Class Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0008."; +top.titles[i] = "Mandatory and Optional Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0009."; +top.titles[i] = "Default ACL Templates"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0010."; +top.titles[i] = "Auxiliary Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0011."; +top.titles[i] = "Attribute Type Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0012."; +top.titles[i] = "Attribute Syntax Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0001.0013."; +top.titles[i] = "Schema Extensions"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0002."; +top.titles[i] = "Base Object Class Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0001."; +top.titles[i] = "AFP Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0002."; +top.titles[i] = "Alias"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0003."; +top.titles[i] = "applicationEntity"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0004."; +top.titles[i] = "applicationProcess"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0005."; +top.titles[i] = "Audit:File Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0006."; +top.titles[i] = "Bindery Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0007."; +top.titles[i] = "Bindery Queue"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0008."; +top.titles[i] = "certificationAuthority"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0009."; +top.titles[i] = "CommExec"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0010."; +top.titles[i] = "Computer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0011."; +top.titles[i] = "Country"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0012."; +top.titles[i] = "cRLDistributionPoint"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0013."; +top.titles[i] = "dcObject"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0014."; +top.titles[i] = "Device"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0015."; +top.titles[i] = "Directory Map"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0016."; +top.titles[i] = "domain"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0017."; +top.titles[i] = "dSA"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0018."; +top.titles[i] = "External Entity"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0019."; +top.titles[i] = "Group"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0020."; +top.titles[i] = "LDAP Group"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0021."; +top.titles[i] = "LDAP Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0022."; +top.titles[i] = "List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0023."; +top.titles[i] = "Locality"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0024."; +top.titles[i] = "MASV:Security Policy"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0025."; +top.titles[i] = "Message Routing Group"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0026."; +top.titles[i] = "Messaging Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0027."; +top.titles[i] = "NCP Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0028."; +top.titles[i] = "ndsLoginProperties"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0029."; +top.titles[i] = "NDSPKI:Certificate Authority"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0030."; +top.titles[i] = "NDSPKI:Key Material"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0031."; +top.titles[i] = "NDSPKI:SD Key Access Partition"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0032."; +top.titles[i] = "NDSPKI:SD Key List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0033."; +top.titles[i] = "NDSPKI:Trusted Root"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0034."; +top.titles[i] = "NDSPKI:Trusted Root Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0035."; +top.titles[i] = "NSCP:groupOfCertificates"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0036."; +top.titles[i] = "NSCP:mailGroup1"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0037."; +top.titles[i] = "NSCP:mailRecipient"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0038."; +top.titles[i] = "NSCP:NetscapeMailServer5"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0039."; +top.titles[i] = "NSCP:NetscapeServer5"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0040."; +top.titles[i] = "NSCP:nginfo3"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0041."; +top.titles[i] = "NSCP:nsLicenseUser"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0042."; +top.titles[i] = "Organization"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0043."; +top.titles[i] = "Organizational Person"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0044."; +top.titles[i] = "Organizational Role"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0045."; +top.titles[i] = "Organizational Unit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0046."; +top.titles[i] = "Partition"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0047."; +top.titles[i] = "Person"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0048."; +top.titles[i] = "pkiCA"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0049."; +top.titles[i] = "pkiUser"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0050."; +top.titles[i] = "Print Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0051."; +top.titles[i] = "Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0052."; +top.titles[i] = "Profile"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0053."; +top.titles[i] = "Queue"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0054."; +top.titles[i] = "Resource"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0055."; +top.titles[i] = "SAS:Security"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0056."; +top.titles[i] = "SAS:Service"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0057."; +top.titles[i] = "Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0058."; +top.titles[i] = "strongAuthenticationUser"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0059."; +top.titles[i] = "Template"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0060."; +top.titles[i] = "Top"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0061."; +top.titles[i] = "Tree Root"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0062."; +top.titles[i] = "Unknown"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0063."; +top.titles[i] = "User"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0064."; +top.titles[i] = "userSecurityInformation"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0065."; +top.titles[i] = "Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0002.0066."; +top.titles[i] = "WANMAN:LAN Area"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0003."; +top.titles[i] = "Novell Object Class Extensions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0001."; +top.titles[i] = "Entrust:CRLDistributionPoint"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0002."; +top.titles[i] = "inetOrgPerson"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0003."; +top.titles[i] = "NDPS Broker"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0004."; +top.titles[i] = "NDPS Manager"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0005."; +top.titles[i] = "NDPS Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0006."; +top.titles[i] = "NDSCat:Catalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0007."; +top.titles[i] = "NDSCat:Master Catalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0008."; +top.titles[i] = "NDSCat:Slave Catalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0009."; +top.titles[i] = "NetSvc"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0010."; +top.titles[i] = "NLS:License Certificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0011."; +top.titles[i] = "NLS:License Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0012."; +top.titles[i] = "NLS:Product Container"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0013."; +top.titles[i] = "NSCP:groupOfUniqueNames5"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0014."; +top.titles[i] = "NSCP:mailGroup5"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0015."; +top.titles[i] = "NSCP:Nginfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0016."; +top.titles[i] = "NSCP:Nginfo2"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0017."; +top.titles[i] = "residentialPerson"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0018."; +top.titles[i] = "SLP Scope Unit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0019."; +top.titles[i] = "SLP Directory Agent"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0020."; +top.titles[i] = "SLP Service"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0003.0021."; +top.titles[i] = "SMS SMDR Class"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0004."; +top.titles[i] = "Graphical View of Object Class Inheritance"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0001."; +top.titles[i] = "Alias and Bindery Object Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0002."; +top.titles[i] = "Tree Root, domain, and Unknown"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0003."; +top.titles[i] = "Computer, Country, Device, and Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0004."; +top.titles[i] = "List and Locality"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0005."; +top.titles[i] = "Organizational Role and Partition"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0006."; +top.titles[i] = "ndsLoginProperties, Organization, and Organizational Unit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0007."; +top.titles[i] = "ndsLoginProperties, Person, Organizational Person, and User"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0008."; +top.titles[i] = "Directory Map, Profile, Queues, Resource, and Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0009."; +top.titles[i] = "Servers (AFP, Messaging, NCP, Print) and CommExec"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0004.0010."; +top.titles[i] = "External Entity, Group, and Message Routing Group"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0005."; +top.titles[i] = "Base Attribute Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0001."; +top.titles[i] = "Aliased Object Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0002."; +top.titles[i] = "Account Balance"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0003."; +top.titles[i] = "ACL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0004."; +top.titles[i] = "Allow Unlimited Credit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0005."; +top.titles[i] = "associatedName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0006."; +top.titles[i] = "attributeCertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0007."; +top.titles[i] = "Audit:A Encryption Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0008."; +top.titles[i] = "Audit:B Encryption Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0009."; +top.titles[i] = "Audit:Contents"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0010."; +top.titles[i] = "Audit:Current Encryption Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0011."; +top.titles[i] = "Audit:File Link"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0012."; +top.titles[i] = "Audit:Link List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0013."; +top.titles[i] = "Audit:Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0014."; +top.titles[i] = "Audit:Policy"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0015."; +top.titles[i] = "Audit:Type"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0016."; +top.titles[i] = "authorityRevocationList"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0017."; +top.titles[i] = "Authority Revocation"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0018."; +top.titles[i] = "AuxClass Object Class Backup"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0019."; +top.titles[i] = "Auxiliary Class Flag"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0020."; +top.titles[i] = "Back Link"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0021."; +top.titles[i] = "Bindery Object Restriction"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0022."; +top.titles[i] = "Bindery Property"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0023."; +top.titles[i] = "Bindery Restriction Level"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0024."; +top.titles[i] = "Bindery Type"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0025."; +top.titles[i] = "businessCategory"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0026."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0027."; +top.titles[i] = "cACertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0028."; +top.titles[i] = "CA Private Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0029."; +top.titles[i] = "CA Public Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0030."; +top.titles[i] = "Cartridge"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0031."; +top.titles[i] = "certificateRevocationList"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0032."; +top.titles[i] = "Certificate Revocation"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0033."; +top.titles[i] = "Certificate Validity Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0034."; +top.titles[i] = "crossCertificatePair"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0035."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0036."; +top.titles[i] = "Convergence"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0037."; +top.titles[i] = "Cross Certificate Pair"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0038."; +top.titles[i] = "dc"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0039."; +top.titles[i] = "Default Queue"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0040."; +top.titles[i] = "deltaRevocationList"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0041."; +top.titles[i] = "departmentNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0042."; +top.titles[i] = "Description"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0043."; +top.titles[i] = "destinationIndicator"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0044."; +top.titles[i] = "Detect Intruder"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0045."; +top.titles[i] = "Device"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0046."; +top.titles[i] = "dmdName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0047."; +top.titles[i] = "dn"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0048."; +top.titles[i] = "dnQualifier"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0049."; +top.titles[i] = "DS Revision"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0050."; +top.titles[i] = "EMail Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0051."; +top.titles[i] = "employeeType"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0052."; +top.titles[i] = "enhancedSearchGuide"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0053."; +top.titles[i] = "Equivalent To Me"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0054."; +top.titles[i] = "External Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0055."; +top.titles[i] = "External Synchronizer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0056."; +top.titles[i] = "Facsimile Telephone Number"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0057."; +top.titles[i] = "Full Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0058."; +top.titles[i] = "Generational Qualifier"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0059."; +top.titles[i] = "generationQualifier"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0060."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0061."; +top.titles[i] = "Given Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0062."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0063."; +top.titles[i] = "GUID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0064."; +top.titles[i] = "High Convergence Sync Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0065."; +top.titles[i] = "Higher Privileges"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0066."; +top.titles[i] = "Home Directory"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0067."; +top.titles[i] = "Home Directory Rights"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0068."; +top.titles[i] = "homePhone"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0069."; +top.titles[i] = "homePostalAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0070."; +top.titles[i] = "houseIdentifier"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0071."; +top.titles[i] = "Host Device"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0072."; +top.titles[i] = "Host Resource Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0073."; +top.titles[i] = "Host Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0074."; +top.titles[i] = "Inherited ACL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0075."; +top.titles[i] = "Initials"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0076."; +top.titles[i] = "internationaliSDNNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0077."; +top.titles[i] = "Internet EMail Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0078."; +top.titles[i] = "Intruder Attempt Reset Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0079."; +top.titles[i] = "Intruder Lockout Reset Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0080."; +top.titles[i] = "knowledgeInformation"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0081."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0082."; +top.titles[i] = "Language"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0083."; +top.titles[i] = "Last Login Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0084."; +top.titles[i] = "Last Referenced Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0085."; +top.titles[i] = "LDAP ACL v11"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0086."; +top.titles[i] = "LDAP Allow Clear Text Password"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0087."; +top.titles[i] = "LDAP Anonymous Identity"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0088."; +top.titles[i] = "LDAP Attribute Map v11"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0089."; +top.titles[i] = "LDAP Backup Log Filename"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0090."; +top.titles[i] = "LDAP Class Map v11"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0091."; +top.titles[i] = "LDAP Enable SSL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0092."; +top.titles[i] = "LDAP Enable TCP"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0093."; +top.titles[i] = "LDAP Enable UDP"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0094."; +top.titles[i] = "LDAP Group"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0095."; +top.titles[i] = "LDAP Host Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0096."; +top.titles[i] = "LDAP Log Filename"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0097."; +top.titles[i] = "LDAP Log Level"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0098."; +top.titles[i] = "LDAP Log Size Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0099."; +top.titles[i] = "LDAP Referral"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0100."; +top.titles[i] = "LDAP Screen Level"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0101."; +top.titles[i] = "LDAP Search Size Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0102."; +top.titles[i] = "LDAP Search Time Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0103."; +top.titles[i] = "LDAP Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0104."; +top.titles[i] = "LDAP Server Bind Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0105."; +top.titles[i] = "LDAP Server Idle Timeout"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0106."; +top.titles[i] = "LDAP Server List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0107."; +top.titles[i] = "LDAP SSL Port"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0108."; +top.titles[i] = "LDAP Suffix"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0109."; +top.titles[i] = "LDAP TCP Port"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0110."; +top.titles[i] = "LDAP UDP Port"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0111."; +top.titles[i] = "LDAP:bindCatalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0112."; +top.titles[i] = "LDAP:bindCatalogUsage"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0113."; +top.titles[i] = "LDAP:keyMaterialName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0114."; +top.titles[i] = "LDAP:otherReferralUsage"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0115."; +top.titles[i] = "LDAP:searchCatalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0116."; +top.titles[i] = "LDAP:searchCatalogUsage"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0117."; +top.titles[i] = "LDAP:searchReferralUsage"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0118."; +top.titles[i] = "Locked By Intruder"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0119."; +top.titles[i] = "Lockout After Detection"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0120."; +top.titles[i] = "Login Allowed Time Map"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0121."; +top.titles[i] = "Login Disabled"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0122."; +top.titles[i] = "Login Expiration Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0123."; +top.titles[i] = "Login Grace Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0124."; +top.titles[i] = "Login Grace Remaining"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0125."; +top.titles[i] = "Login Intruder Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0126."; +top.titles[i] = "Login Intruder Attempts"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0127."; +top.titles[i] = "Login Intruder Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0128."; +top.titles[i] = "Login Intruder Reset Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0129."; +top.titles[i] = "Login Maximum Simultaneous"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0130."; +top.titles[i] = "Login Script"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0131."; +top.titles[i] = "Login Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0132."; +top.titles[i] = "Low Convergence Reset Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0133."; +top.titles[i] = "Low Convergence Sync Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0134."; +top.titles[i] = "Mailbox ID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0135."; +top.titles[i] = "Mailbox Location"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0136."; +top.titles[i] = "manager"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0137."; +top.titles[i] = "masvAuthorizedRange"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0138."; +top.titles[i] = "masvDefaultRange"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0139."; +top.titles[i] = "masvDomainPolicy"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0140."; +top.titles[i] = "masvLabel"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0141."; +top.titles[i] = "masvProposedLabel"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0142."; +top.titles[i] = "Member"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0143."; +top.titles[i] = "Members Of Template"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0144."; +top.titles[i] = "Memory"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0145."; +top.titles[i] = "Message Routing Group"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0146."; +top.titles[i] = "Message Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0147."; +top.titles[i] = "Messaging Database Location"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0148."; +top.titles[i] = "Messaging Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0149."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0150."; +top.titles[i] = "Minimum Account Balance"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0151."; +top.titles[i] = "mobile"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0152."; +top.titles[i] = "NDSPKI:Certificate Chain"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0153."; +top.titles[i] = "NDSPKI:Given Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0154."; +top.titles[i] = "NDSPKI:Key File"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0155."; +top.titles[i] = "NDSPKI:Key Material DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0156."; +top.titles[i] = "NDSPKI:Keystore"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0157."; +top.titles[i] = "NDSPKI:Not After"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0158."; +top.titles[i] = "NDSPKI:Not Before"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0159."; +top.titles[i] = "NDSPKI:Parent CA"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0160."; +top.titles[i] = "NDSPKI:Parent CA DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0161."; +top.titles[i] = "NDSPKI:Private Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0162."; +top.titles[i] = "NDSPKI:Public Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0163."; +top.titles[i] = "NDSPKI:Public Key Certificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0164."; +top.titles[i] = "NDSPKI:SD Key Cert"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0165."; +top.titles[i] = "NDSPKI:SD Key ID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0166."; +top.titles[i] = "NDSPKI:SD Key Server DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0167."; +top.titles[i] = "NDSPKI:SD Key Struct"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0168."; +top.titles[i] = "NDSPKI:Subject Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0169."; +top.titles[i] = "NDSPKI:Tree CA DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0170."; +top.titles[i] = "NDSPKI:Trusted Root Certificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0171."; +top.titles[i] = "NDSPKI:userCertificateInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0172."; +top.titles[i] = "Network Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0173."; +top.titles[i] = "Network Address Restriction"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0174."; +top.titles[i] = "New Object's DS Rights"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0175."; +top.titles[i] = "New Object's FS Rights"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0176."; +top.titles[i] = "New Object's Self Rights"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0177."; +top.titles[i] = "NNS Domain"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0178."; +top.titles[i] = "Notify"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0179."; +top.titles[i] = "NSCP:administratorContactInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0180."; +top.titles[i] = "NSCP:adminURL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0181."; +top.titles[i] = "NSCP:AmailAccessDomain"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0182."; +top.titles[i] = "NSCP:AmailAlternateAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0183."; +top.titles[i] = "NSCP:AmailAutoReplyMode"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0184."; +top.titles[i] = "NSCP:AmailAutoReplyText"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0185."; +top.titles[i] = "NSCP:AmailDeliveryOption"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0186."; +top.titles[i] = "NSCP:AmailForwardingAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0187."; +top.titles[i] = "NSCP:AmailHost"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0188."; +top.titles[i] = "NSCP:AmailMessageStore"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0189."; +top.titles[i] = "NSCP:AmailProgramDeliveryInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0190."; +top.titles[i] = "NSCP:AmailQuota"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0191."; +top.titles[i] = "NSCP:AnsLicenseEndTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0192."; +top.titles[i] = "NSCP:AnsLicensedFor"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0193."; +top.titles[i] = "NSCP:AnsLicenseStartTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0194."; +top.titles[i] = "NSCP:employeeNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0195."; +top.titles[i] = "NSCP:installationTimeStamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0196."; +top.titles[i] = "NSCP:mailRoutingAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0197."; +top.titles[i] = "NSCP:memberCertificateDesc"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0198."; +top.titles[i] = "NSCP:mgrpRFC822mailmember"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0199."; +top.titles[i] = "NSCP:ngcomponentCIS"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0200."; +top.titles[i] = "NSCP:nsaclrole"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0201."; +top.titles[i] = "NSCP:nscreator"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0202."; +top.titles[i] = "NSCP:nsflags"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0203."; +top.titles[i] = "NSCP:nsnewsACL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0204."; +top.titles[i] = "NSCP:nsprettyname"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0205."; +top.titles[i] = "NSCP:serverHostName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0206."; +top.titles[i] = "NSCP:serverProductName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0207."; +top.titles[i] = "NSCP:serverRoot"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0208."; +top.titles[i] = "NSCP:serverVersionNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0209."; +top.titles[i] = "NSCP:subtreeACI"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0210."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0211."; +top.titles[i] = "Obituary"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0212."; +top.titles[i] = "Obituary Notify"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0213."; +top.titles[i] = "Object Class"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0214."; +top.titles[i] = "Operator"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0215."; +top.titles[i] = "Other GUID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0216."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0217."; +top.titles[i] = "Owner"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0218."; +top.titles[i] = "Page Description Language"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0219."; +top.titles[i] = "pager"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0220."; +top.titles[i] = "Partition Control"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0221."; +top.titles[i] = "Partition Creation Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0222."; +top.titles[i] = "Partition Status"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0223."; +top.titles[i] = "Password Allow Change"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0224."; +top.titles[i] = "Password Expiration Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0225."; +top.titles[i] = "Password Expiration Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0226."; +top.titles[i] = "Password Management"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0227."; +top.titles[i] = "Password Minimum Length"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0228."; +top.titles[i] = "Password Required"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0229."; +top.titles[i] = "Password Unique Required"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0230."; +top.titles[i] = "Passwords Used"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0231."; +top.titles[i] = "Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0232."; +top.titles[i] = "Permanent Config Parms"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0233."; +top.titles[i] = "Physical Delivery Office Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0234."; +top.titles[i] = "Postal Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0235."; +top.titles[i] = "Postal Code"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0236."; +top.titles[i] = "Postal Office Box"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0237."; +top.titles[i] = "Postmaster"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0238."; +top.titles[i] = "preferredDeliveryMethod"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0239."; +top.titles[i] = "presentationAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0240."; +top.titles[i] = "Print Job Configuration"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0241."; +top.titles[i] = "Print Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0242."; +top.titles[i] = "Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0243."; +top.titles[i] = "Printer Configuration"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0244."; +top.titles[i] = "Printer Control"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0245."; +top.titles[i] = "Private Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0246."; +top.titles[i] = "Profile"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0247."; +top.titles[i] = "Profile Membership"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0248."; +top.titles[i] = "protocolInformation"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0249."; +top.titles[i] = "Public Key"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0250."; +top.titles[i] = "Purge Vector"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0251."; +top.titles[i] = "Queue"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0252."; +top.titles[i] = "Queue Directory"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0253."; +top.titles[i] = "Received Up To"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0254."; +top.titles[i] = "Reference"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0255."; +top.titles[i] = "registeredAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0256."; +top.titles[i] = "Replica"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0257."; +top.titles[i] = "Replica Up To"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0258."; +top.titles[i] = "Resource"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0259."; +top.titles[i] = "Revision"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0260."; +top.titles[i] = "Role Occupant"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0261."; +top.titles[i] = "roomNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0262."; +top.titles[i] = "Run Setup Script"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0263."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0264."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0265."; +top.titles[i] = "SAP Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0266."; +top.titles[i] = "SAS:Security DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0267."; +top.titles[i] = "SAS:Service DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0268."; +top.titles[i] = "searchGuide"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0269."; +top.titles[i] = "searchSizeLimit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0270."; +top.titles[i] = "searchTimeLimit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0271."; +top.titles[i] = "Security Equals"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0272."; +top.titles[i] = "Security Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0273."; +top.titles[i] = "See Also"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0274."; +top.titles[i] = "Serial Number"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0275."; +top.titles[i] = "Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0276."; +top.titles[i] = "Server Holds"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0277."; +top.titles[i] = "Set Password After Create"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0278."; +top.titles[i] = "Setup Script"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0279."; +top.titles[i] = "Status"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0280."; +top.titles[i] = "supportedAlgorithms"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0281."; +top.titles[i] = "supportedApplicationContext"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0282."; +top.titles[i] = "Supported Connections"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0283."; +top.titles[i] = "Supported Gateway"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0284."; +top.titles[i] = "Supported Services"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0285."; +top.titles[i] = "Supported Typefaces"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0286."; +top.titles[i] = "Surname"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0287."; +top.titles[i] = "Synchronization Tolerance"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0288."; +top.titles[i] = "Synchronized Up To"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0289."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0290."; +top.titles[i] = "Telephone Number"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0291."; +top.titles[i] = "telexNumber"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0292."; +top.titles[i] = "telexTerminalIdentifier"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0293."; +top.titles[i] = "Timezone"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0294."; +top.titles[i] = "Title"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0295."; +top.titles[i] = "Transitive Vector"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0296."; +top.titles[i] = "Trustees Of New Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0297."; +top.titles[i] = "Type Creator Map"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0298."; +top.titles[i] = ""; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0299."; +top.titles[i] = "uniqueID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0300."; +top.titles[i] = "Unknown"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0301."; +top.titles[i] = "Unknown Auxiliary Class"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0302."; +top.titles[i] = "Unknown Base Class"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0303."; +top.titles[i] = "Used By"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0304."; +top.titles[i] = "User"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0305."; +top.titles[i] = "userCertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0306."; +top.titles[i] = "userPassword"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0307."; +top.titles[i] = "Uses"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0308."; +top.titles[i] = "Version"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0309."; +top.titles[i] = "Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0310."; +top.titles[i] = "Volume Space Restrictions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0311."; +top.titles[i] = "WANMAN:Cost"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0312."; +top.titles[i] = "WANMAN:Default Cost"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0313."; +top.titles[i] = "WANMAN:LAN Area Membership"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0314."; +top.titles[i] = "WANMAN:WAN Policy"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0315."; +top.titles[i] = "x121Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0005.0316."; +top.titles[i] = "x500UniqueIdentifier"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0006."; +top.titles[i] = "Novell Attribute Extensions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0001."; +top.titles[i] = "audio"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0002."; +top.titles[i] = "carLicense"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0003."; +top.titles[i] = "Client Install Candidate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0004."; +top.titles[i] = "Color Supported"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0005."; +top.titles[i] = "Database Dir Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0006."; +top.titles[i] = "Database Volume Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0007."; +top.titles[i] = "Datapool Location"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0008."; +top.titles[i] = "Datapool Locations"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0009."; +top.titles[i] = "Delivery Methods Installed"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0010."; +top.titles[i] = "displayName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0011."; +top.titles[i] = "Employee ID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0012."; +top.titles[i] = "Entrust:AttributeCertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0013."; +top.titles[i] = "Entrust:User"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0014."; +top.titles[i] = "GW API Gateway Directory Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0015."; +top.titles[i] = "GW API Gateway Directory Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0016."; +top.titles[i] = "IPP URI"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0017."; +top.titles[i] = "IPP URI Security Scheme"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0018."; +top.titles[i] = "jpegPhoto"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0019."; +top.titles[i] = "labeledUri"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0020."; +top.titles[i] = "LDAP Class Map"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0021."; +top.titles[i] = "ldapPhoto"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0022."; +top.titles[i] = "LDAPUserCertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0023."; +top.titles[i] = "LDAP:ARL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0024."; +top.titles[i] = "LDAP:caCertificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0025."; +top.titles[i] = "LDAP:CRL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0026."; +top.titles[i] = "LDAP:crossCertificatePair"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0027."; +top.titles[i] = "MASV:Authorized Range"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0028."; +top.titles[i] = "MASV:Default Range"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0029."; +top.titles[i] = "MASV:Domain Policy"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0030."; +top.titles[i] = "MASV:Label"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0031."; +top.titles[i] = "MASV:Proposed Label"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0032."; +top.titles[i] = "Maximum Speed"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0033."; +top.titles[i] = "Maximum Speed Units"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0034."; +top.titles[i] = "MHS Send Directory Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0035."; +top.titles[i] = "MHS Send Directory Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0036."; +top.titles[i] = "NDPS Accountant Role"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0037."; +top.titles[i] = "NDPS Control Flags"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0038."; +top.titles[i] = "NDPS Database Saved Timestamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0039."; +top.titles[i] = "NDPS Database Saved Data Image"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0040."; +top.titles[i] = "NDPS Database Saved Index Image"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0041."; +top.titles[i] = "NDPS Default Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0042."; +top.titles[i] = "NDPS Default Public Printer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0043."; +top.titles[i] = "NDPS Job Configuration"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0044."; +top.titles[i] = "NDPS Manager Status"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0045."; +top.titles[i] = "NDPS Operator Role"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0046."; +top.titles[i] = "NDPS Printer Install List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0047."; +top.titles[i] = "NDPS Printer Install Timestamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0048."; +top.titles[i] = "NDPS Printer Queue List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0049."; +top.titles[i] = "NDPS Printer Siblings"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0050."; +top.titles[i] = "NDPS Public Printer Install List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0051."; +top.titles[i] = "NDPS Replace All Client Printers"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0052."; +top.titles[i] = "NDPS SMTP Server"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0053."; +top.titles[i] = "NDPS User Role"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0054."; +top.titles[i] = "NDSCat:Actual All Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0055."; +top.titles[i] = "NDSCat:Actual Attribute Count"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0056."; +top.titles[i] = "NDSCat:Actual Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0057."; +top.titles[i] = "NDSCat:Actual Base Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0058."; +top.titles[i] = "NDSCat:Actual Catalog Size"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0059."; +top.titles[i] = "NDSCat:Actual End Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0060."; +top.titles[i] = "NDSCat:Actual Filter"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0061."; +top.titles[i] = "NDSCat:Actual Object Count"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0062."; +top.titles[i] = "NDSCat:Actual Return Code"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0063."; +top.titles[i] = "NDSCat:Actual Scope"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0064."; +top.titles[i] = "NDSCat:Actual Search Aliases"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0065."; +top.titles[i] = "NDSCat:Actual Start Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0066."; +top.titles[i] = "NDSCat:Actual Value Count"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0067."; +top.titles[i] = "NDSCat:All Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0068."; +top.titles[i] = "NDSCat:AttrDefTbl"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0069."; +top.titles[i] = "NDSCat:Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0070."; +top.titles[i] = "NDSCat:Auto Dredge"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0071."; +top.titles[i] = "NDSCat:Base Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0072."; +top.titles[i] = "NDSCat:CatalogDB"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0073."; +top.titles[i] = "NDSCat:Catalog List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0074."; +top.titles[i] = "NDSCat:Dredge Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0075."; +top.titles[i] = "NDSCat:Filter"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0076."; +top.titles[i] = "NDSCat:IndexDefTbl"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0077."; +top.titles[i] = "NDSCat:Indexes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0078."; +top.titles[i] = "NDSCat:Label"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0079."; +top.titles[i] = "NDSCat:Log"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0080."; +top.titles[i] = "NDSCat:Master Catalog"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0081."; +top.titles[i] = "NDSCat:Max Log Size"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0082."; +top.titles[i] = "NDSCat:Max Retries"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0083."; +top.titles[i] = "NDSCat:Max Threads"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0084."; +top.titles[i] = "NDSCat:Retry Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0085."; +top.titles[i] = "NDSCat:Scope"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0086."; +top.titles[i] = "NDSCat:Search Aliases"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0087."; +top.titles[i] = "NDSCat:Slave Catalog List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0088."; +top.titles[i] = "NDSCat:Start Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0089."; +top.titles[i] = "NDSCat:Synch Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0090."; +top.titles[i] = "NLS:Common Certificate"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0091."; +top.titles[i] = "NLS:Current Installed"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0092."; +top.titles[i] = "NLS:Current Peak Installed"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0093."; +top.titles[i] = "NLS:Current Peak Used"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0094."; +top.titles[i] = "NLS:Current Used"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0095."; +top.titles[i] = "NLS:Hourly Data Size"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0096."; +top.titles[i] = "NLS:License Database"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0097."; +top.titles[i] = "NLS:License ID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0098."; +top.titles[i] = "NLS:License Service Provider"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0099."; +top.titles[i] = "NLS:LSP Revision"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0100."; +top.titles[i] = "NLS:Owner"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0101."; +top.titles[i] = "NLS:Peak Installed Data"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0102."; +top.titles[i] = "NLS:Peak Used Data"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0103."; +top.titles[i] = "NLS:Product"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0104."; +top.titles[i] = "NLS:Publisher"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0105."; +top.titles[i] = "NLS:Revision"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0106."; +top.titles[i] = "NLS:Search Type"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0107."; +top.titles[i] = "NLS:Summary Update Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0108."; +top.titles[i] = "NLS:Summary Version"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0109."; +top.titles[i] = "NLS:Transaction Database"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0110."; +top.titles[i] = "NLS:Transaction Log Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0111."; +top.titles[i] = "NLS:Transaction Log Size"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0112."; +top.titles[i] = "NLS:Version"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0113."; +top.titles[i] = "Notification Consumers"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0114."; +top.titles[i] = "Notification Profile"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0115."; +top.titles[i] = "Notification Service Enabled"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0116."; +top.titles[i] = "Notification Srvc Net Addr"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0117."; +top.titles[i] = "Notification Srvc Net Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0118."; +top.titles[i] = "NRD:Registry Data"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0119."; +top.titles[i] = "NRD:Registry Index"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0120."; +top.titles[i] = "NSCP:mailAccessDomain"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0121."; +top.titles[i] = "NSCP:mailAlternateAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0122."; +top.titles[i] = "NSCP:mailAutoReplyMode"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0123."; +top.titles[i] = "NSCP:mailAutoReplyText"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0124."; +top.titles[i] = "NSCP:mailDeliveryOption"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0125."; +top.titles[i] = "NSCP:mailForwardingAddress"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0126."; +top.titles[i] = "NSCP:mailHost"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0127."; +top.titles[i] = "NSCP:mailMessageStore"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0128."; +top.titles[i] = "NSCP:mailProgramDeliveryInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0129."; +top.titles[i] = "NSCP:mailQuota"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0130."; +top.titles[i] = "NSCP:ngComponent"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0131."; +top.titles[i] = "NSCP:nsLicenseEndTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0132."; +top.titles[i] = "NSCP:nsLicensedFor"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0133."; +top.titles[i] = "NSCP:nsLicenseStartTime"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0134."; +top.titles[i] = "Page Description Languages"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0135."; +top.titles[i] = "preferredLanguage"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0136."; +top.titles[i] = "Primary Notification Service"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0137."; +top.titles[i] = "Primary Resource Service"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0138."; +top.titles[i] = "Printer Agent Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0139."; +top.titles[i] = "Printer Manufacturer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0140."; +top.titles[i] = "Printer Mechanism Types"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0141."; +top.titles[i] = "Printer Model"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0142."; +top.titles[i] = "Printer Status"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0143."; +top.titles[i] = "Printer to PA ID Mappings"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0144."; +top.titles[i] = "PSM Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0145."; +top.titles[i] = "Registry Advertising Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0146."; +top.titles[i] = "Registry Service Enabled"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0147."; +top.titles[i] = "Registry Srvc Net Addr"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0148."; +top.titles[i] = "Registry Srvc Net Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0149."; +top.titles[i] = "Resolution"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0150."; +top.titles[i] = "Resource Mgmt Srvc Net Addr"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0151."; +top.titles[i] = "Resource Mgmt Srvc Net Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0152."; +top.titles[i] = "Resource Mgmt Service Enabled"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0153."; +top.titles[i] = "Resource Mgr Database Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0154."; +top.titles[i] = "Resource Mgr Database Volume"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0155."; +top.titles[i] = "secretary"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0156."; +top.titles[i] = "Sides Supported"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0157."; +top.titles[i] = "SLP Attribute"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0158."; +top.titles[i] = "SLP Cache Limit"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0159."; +top.titles[i] = "SLP DA Back Link"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0160."; +top.titles[i] = "SLP Directory Agent DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0161."; +top.titles[i] = "SLP Language"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0162."; +top.titles[i] = "SLP Lifetime"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0163."; +top.titles[i] = "SLP Scope Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0164."; +top.titles[i] = "SLP Scope Unit DN"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0165."; +top.titles[i] = "SLP Start Purge Hour"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0166."; +top.titles[i] = "SLP Status"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0167."; +top.titles[i] = "SLP SU Back Link"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0168."; +top.titles[i] = "SLP SU Type"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0169."; +top.titles[i] = "SLP Type"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0170."; +top.titles[i] = "SLP URL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0171."; +top.titles[i] = "SMS Protocol Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0172."; +top.titles[i] = "SMS Registered Service"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0173."; +top.titles[i] = "SU"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0174."; +top.titles[i] = "SvcInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0175."; +top.titles[i] = "SvcType"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0176."; +top.titles[i] = "SvcTypeID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0006.0177."; +top.titles[i] = "userSMIMECertificate"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0007."; +top.titles[i] = "LDAP Operational Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0001."; +top.titles[i] = "createTimeStamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0002."; +top.titles[i] = "creatorsName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0003."; +top.titles[i] = "entryFlags"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0004."; +top.titles[i] = "federationBoundary"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0005."; +top.titles[i] = "localEntryID"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0006."; +top.titles[i] = "modifiersName"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0007."; +top.titles[i] = "modifyTimeStamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0008."; +top.titles[i] = "structuralObjectClass"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0009."; +top.titles[i] = "subordinateCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0007.0010."; +top.titles[i] = "subschemaSubentry"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0008."; +top.titles[i] = "Attribute Syntax Definitions"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0001."; +top.titles[i] = "Back Link"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0002."; +top.titles[i] = "Boolean"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0003."; +top.titles[i] = "Case Exact String"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0004."; +top.titles[i] = "Case Ignore List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0005."; +top.titles[i] = "Case Ignore String"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0006."; +top.titles[i] = "Class Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0007."; +top.titles[i] = "Counter"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0008."; +top.titles[i] = "Distinguished Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0009."; +top.titles[i] = "EMail Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0010."; +top.titles[i] = "Facsimile Telephone Number"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0011."; +top.titles[i] = "Hold"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0012."; +top.titles[i] = "Integer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0013."; +top.titles[i] = "Interval"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0014."; +top.titles[i] = "Net Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0015."; +top.titles[i] = "Numeric String"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0016."; +top.titles[i] = "Object ACL"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0017."; +top.titles[i] = "Octet List"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0018."; +top.titles[i] = "Octet String"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0019."; +top.titles[i] = "Path"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0020."; +top.titles[i] = "Postal Address"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0021."; +top.titles[i] = "Printable String"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0022."; +top.titles[i] = "Replica Pointer"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0023."; +top.titles[i] = "Stream"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0024."; +top.titles[i] = "Telephone Number"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0025."; +top.titles[i] = "Time"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0026."; +top.titles[i] = "Timestamp"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0027."; +top.titles[i] = "Typed Name"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0008.0028."; +top.titles[i] = "Unknown"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0009."; +top.titles[i] = "Index of Classes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0001."; +top.titles[i] = "A through B"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0002."; +top.titles[i] = "C through D"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0003."; +top.titles[i] = "E through K"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0004."; +top.titles[i] = "L through M"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0005."; +top.titles[i] = "N"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0006."; +top.titles[i] = "O"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0007."; +top.titles[i] = "P through R"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0008."; +top.titles[i] = "S"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0009.0009."; +top.titles[i] = "T through Z"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0010."; +top.titles[i] = "Index of Attributes"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0001."; +top.titles[i] = "A"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0002."; +top.titles[i] = "B"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0003."; +top.titles[i] = "C"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0004."; +top.titles[i] = "D"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0005."; +top.titles[i] = "E"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0006."; +top.titles[i] = "F through G"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0007."; +top.titles[i] = "H"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0008."; +top.titles[i] = "I through K"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0009."; +top.titles[i] = "L"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0010."; +top.titles[i] = "M"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0011."; +top.titles[i] = "N"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0012."; +top.titles[i] = "O"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0013."; +top.titles[i] = "P"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0014."; +top.titles[i] = "Q"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0015."; +top.titles[i] = "R"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0016."; +top.titles[i] = "S"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0017."; +top.titles[i] = "T"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0018."; +top.titles[i] = "U"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0010.0019."; +top.titles[i] = "V through Z"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0011."; +top.titles[i] = "Index of ASN.1 IDs"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0011.0001."; +top.titles[i] = "0"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0011.0002."; +top.titles[i] = "1"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0011.0003."; +top.titles[i] = "2 through 2.4"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0011.0004."; +top.titles[i] = "2.5 through 2.9"; +i++; + +top.authors[i] = "zFLDR xC.5375.0500.0012."; +top.titles[i] = "Index of LDAP Names"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0001."; +top.titles[i] = "A through B"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0002."; +top.titles[i] = "C"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0003."; +top.titles[i] = "D"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0004."; +top.titles[i] = "E through F"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0005."; +top.titles[i] = "G"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0006."; +top.titles[i] = "H"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0007."; +top.titles[i] = "I through K"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0008."; +top.titles[i] = "L"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0009."; +top.titles[i] = "M"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0010."; +top.titles[i] = "N"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0011."; +top.titles[i] = "O"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0012."; +top.titles[i] = "P"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0013."; +top.titles[i] = "Q through R"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0014."; +top.titles[i] = "S"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0015."; +top.titles[i] = "T"; +i++; + +top.authors[i] = "zHTML xD.5375.0500.0012.0016."; +top.titles[i] = "U through Z"; +i++; + +top.authors[i] = "zHTML xC.5375.0500.0013."; +top.titles[i] = "Revision History"; +i++; + +top.authors[i] = "zFLDR xB.5375.0400."; +top.titles[i] = "NDS Iterator Services"; +i++; + +top.authors[i] = "zFLDR xC.5375.0400.0001."; +top.titles[i] = "Concepts"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0001."; +top.titles[i] = "Iterator Objects"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0002."; +top.titles[i] = "Creation of an Iterator Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0003."; +top.titles[i] = "Iterator Indexes"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0004."; +top.titles[i] = "Positions of an Iterator Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0005."; +top.titles[i] = "Current Position Movement with Retrieval Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0001.0006."; +top.titles[i] = "Retrieval of Data"; +i++; + +top.authors[i] = "zFLDR xC.5375.0400.0002."; +top.titles[i] = "Tasks"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0002.0001."; +top.titles[i] = "Creating a Search Iterator Object"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0002.0002."; +top.titles[i] = "Retrieving and Unpacking Object and Attribute Name Data"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0002.0003."; +top.titles[i] = "Retrieving and Unpacking Object, Attribute, and Value Data"; +i++; + +top.authors[i] = "zFLDR xC.5375.0400.0003."; +top.titles[i] = "Functions"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0001."; +top.titles[i] = "NWDSItrAtEOF"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0002."; +top.titles[i] = "NWDSItrAtFirst"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0003."; +top.titles[i] = "NWDSItrClone"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0004."; +top.titles[i] = "NWDSItrCount"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0005."; +top.titles[i] = "NWDSItrCreateList"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0006."; +top.titles[i] = "NWDSItrCreateSearch"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0007."; +top.titles[i] = "NWDSItrDestroy"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0008."; +top.titles[i] = "NWDSItrGetCurrent"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0009."; +top.titles[i] = "NWDSItrGetInfo"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0010."; +top.titles[i] = "NWDSItrGetNext"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0011."; +top.titles[i] = "NWDSItrGetPosition"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0012."; +top.titles[i] = "NWDSItrGetPrev"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0013."; +top.titles[i] = "NWDSItrSetPosition"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0014."; +top.titles[i] = "NWDSItrSetPositionFromIterator"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0015."; +top.titles[i] = "NWDSItrSkip"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0003.0016."; +top.titles[i] = "NWDSItrTypeDown"; +i++; + +top.authors[i] = "zFLDR xC.5375.0400.0004."; +top.titles[i] = "NDS Iterator Example Code"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0001."; +top.titles[i] = "Cloning an Iterator Object: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0002."; +top.titles[i] = "Counting with NDS Iterators: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0003."; +top.titles[i] = "Creating and Using a List Iterator: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0004."; +top.titles[i] = "Creating a Search Iterator and Displaying the Results: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0005."; +top.titles[i] = "Getting Iterator Information: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0006."; +top.titles[i] = "Getting and Setting the Iterator's Position: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0007."; +top.titles[i] = "Listing in Reverse Order: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0008."; +top.titles[i] = "Positioning the Iterator with Typedown: Example"; +i++; + +top.authors[i] = "zHTML xD.5375.0400.0004.0009."; +top.titles[i] = "Skipping Objects in the List: Example"; +i++; + +top.authors[i] = "zHTML xC.5375.0400.0005."; +top.titles[i] = "Revision History"; +i++; + + +// Morten's JavaScript Tree Menu +// written by Morten Wang <morten@treemenu.com> (c) 1998-2000 +// This is version 2.2.6, dated 2000-03-30 + +// The script is freely distributable +// It may be used (and modified) as you wish, but retain this message +// For more information about the menu visit its home page +// http://www.treemenu.com/ + +/****************************************************************************** + * Define the MenuItem object. * + ******************************************************************************/ + +function MTMenuItem(text, url, target,nsearchID, icon) { + this.text = text; + this.url = url ? url : ""; + this.target = target ? target : ""; + this.icon = icon ? icon : ""; + this.nsearchID = nsearchID; + + this.number = MTMSubNumber++; + this.parent = null; + this.submenu = null; + this.expanded = false; + this.selected = false; + this.childSelected = false; + + this.MTMakeSubmenu = MTMakeSubmenu; + +} + +function MTMakeSubmenu(menu) { + this.submenu = menu; + for (var i = 0; i < menu.items.length; i++) + { + menu.items[i].parent = this; + } +} + + + +function getChildrenChecked(item, selected) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + item.submenu.items[x].selected = selected; + item.submenu.items[x].childSelected = false; + MarkChildren(item.submenu.items[x],selected); + } + } +} + +/****************************************************************************** + * Define the Menu object. * + ******************************************************************************/ + +function MTMenu() { + this.items = new Array(); + this.MTMAddItem = MTMAddItem; +} + +function MTMAddItem(item) { + this.items[this.items.length] = item; +} + +/****************************************************************************** + * Define the icon list, addIcon function and MTMIcon item. * + ******************************************************************************/ + +function IconList() { + this.items = new Array(); + this.addIcon = addIcon; +} + +function addIcon(item) { + this.items[this.items.length] = item; +} + +function MTMIcon(iconfile, match, type) { + this.file = iconfile; + this.match = match; + this.type = type; +} + +/****************************************************************************** + * Global variables. Not to be altered unless you know what you're doing. * + * User-configurable options are at the end of this document. * + ******************************************************************************/ + +var MTMLoaded = false; +var MTMLevel; +var MTMBar = new Array(); +var MTMIndices = new Array(); +var MTMBrowser = null; +var MTMNN3 = false; +var MTMNN4 = false; +var MTMIE4 = false; +var MTMUseStyle = true; + +/* + * (For a standalone JS shell test, we will simply set these as follows:) + */ +MTMBrowser = true; +MTMNN4 = true; + + +var MTMClickedItem = false; +var MTMExpansion = false; + +var MTMSubNumber = 1; +var MTMTrackedItem = false; +var MTMTrack = false; + +var MTMPreHREF = ""; +if(MTMIE4 || MTMNN3) { + MTMPreHREF += ""; // document.location.href.substring(0, document.location.href.lastIndexOf("/") +1); +} + +var MTMFirstRun = true; +var MTMCurrentTime = 0; // for checking timeout. +var MTMUpdating = false; +var MTMWinSize, MTMyval; +var MTMOutputString = ""; + +/****************************************************************************** + * Code that picks up frame names of frames in the parent frameset. * + ******************************************************************************/ + + +/****************************************************************************** + * Dummy function for sub-menus without URLs * + * Thanks to Michel Plungjan for the advice. :) * + ******************************************************************************/ + +function myVoid() { ; } + +/****************************************************************************** + * Functions to draw the menu. * + ******************************************************************************/ + +function MTMSubAction(SubItem, ReturnValue) { + + SubItem.expanded = (SubItem.expanded) ? false : true; + if(SubItem.expanded) { + MTMExpansion = true; + } + + MTMClickedItem = SubItem.number; + + if(MTMTrackedItem && MTMTrackedItem != SubItem.number) { + MTMTrackedItem = false; + } + + if(!ReturnValue) { + setTimeout("MTMDisplayMenu()", 10); + } + + return ReturnValue; +} + + +function MarkChildren(item, selected) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + item.submenu.items[x].selected = selected; + item.submenu.items[x].childSelected = false; + MarkChildren(item.submenu.items[x],selected); + } + } + +} + +function isAllChildrenSelected(item) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (!item.submenu.items[x].selected) + { + return false; + } + } + } + return true; +} + +function isSomeChildrenSelected(item) +{ + var retValue = false; + + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (item.submenu.items[x].selected || item.submenu.items[x].childSelected) + { + retValue = true; + } + } + } + + return retValue; +} + +function ToggleSelected(item, ReturnValue) { + + item.selected = (item.selected) ? false : true; + item.childSelected = false; + + var currentNode = item; + + while (currentNode.parent) + { + currentNode.parent.selected = isAllChildrenSelected(currentNode.parent); + currentNode.parent.childSelected = isSomeChildrenSelected(currentNode.parent); + currentNode = currentNode.parent; + } + + MarkChildren(item,item.selected); + + if(!ReturnValue) { + setTimeout("MTMDisplayMenu()", 10); + } + + return ReturnValue; +} + + +function MTMStartMenu() { + MTMLoaded = true; + if(MTMFirstRun) { + MTMCurrentTime++; + if(MTMCurrentTime == MTMTimeOut) { // call MTMDisplayMenu + setTimeout("MTMDisplayMenu()",10); + } else { + setTimeout("MTMStartMenu()",100); + } + } +} + +function MTMDisplayMenu() { + if(MTMBrowser && !MTMUpdating) { + MTMUpdating = true; + MTMFirstRun = false; + + if(MTMTrack) { MTMTrackedItem = MTMTrackExpand(menu); } + + if(MTMExpansion && MTMSubsAutoClose) { MTMCloseSubs(menu); } + + MTMLevel = 0; + MTMDoc = parent.frames[MTMenuFrame].document + MTMDoc.open("text/html", "replace"); + MTMOutputString = '<html><head>'; + if(MTMLinkedSS) { + MTMOutputString += '<link rel="stylesheet" type="text/css" href="' + MTMPreHREF + MTMSSHREF + '">'; + } else if(MTMUseStyle) { + MTMOutputString += '<style type="text/css">body {color:' + MTMTextColor + ';background:'; + MTMOutputString += (MTMBackground == "") ? MTMBGColor : MTMakeBackImage(MTMBackground); + MTMOutputString += ';} #root {color:' + MTMRootColor + ';background:' + ((MTMBackground == "") ? MTMBGColor : 'transparent') + ';font-family:' + MTMRootFont + ';font-size:' + MTMRootCSSize + ';} '; + MTMOutputString += 'a {font-family:' + MTMenuFont + ';letter-spacing:-0.05em;font-weight:bold;font-size:' + MTMenuCSSize + ';text-decoration:none;color:' + MTMLinkColor + ';background:' + MTMakeBackground() + ';} '; + MTMOutputString += MTMakeA('pseudo', 'hover', MTMAhoverColor); + MTMOutputString += MTMakeA('class', 'tracked', MTMTrackColor); + MTMOutputString += MTMakeA('class', 'subexpanded', MTMSubExpandColor); + MTMOutputString += MTMakeA('class', 'subclosed', MTMSubClosedColor) + '</style>'; + } + + MTMOutputString += '</head><body '; + if(MTMBackground != "") { + MTMOutputString += 'background="' + MTMPreHREF + MTMenuImageDirectory + MTMBackground + '" '; + } + MTMOutputString += 'bgcolor="' + MTMBGColor + '" text="' + MTMTextColor + '" link="' + MTMLinkColor + '" vlink="' + MTMLinkColor + '" alink="' + MTMLinkColor + '">'; + + MTMOutputString += '<table border="0" cellpadding="0" cellspacing="0" width="' + MTMTableWidth + '">'; + MTMOutputString += '<tr valign="top"><td nowrap>'; //REMOVED ROOT ICON <img src="' + MTMPreHREF + MTMenuImageDirectory + MTMRootIcon + '" align="left" border="0" vspace="0" hspace="0">'; + if(MTMUseStyle) { + MTMOutputString += ''; //REMOVED ROOT CAPTION <span id="root"> ' + MTMenuText + '</span>'; + } else { + MTMOutputString += ''; //REMOVED ROOT CAPTION <font size="' + MTMRootFontSize + '" face="' + MTMRootFont + '" color="' + MTMRootColor + '">' + MTMenuText + '</font>'; + } + MTMDoc.writeln(MTMOutputString + '</td></tr>'); + + MTMListItems(menu); + MTMDoc.writeln('</table>'); + + MTMDoc.writeln('</body></html>'); + MTMDoc.close(); + + if((MTMClickedItem || MTMTrackedItem) && (MTMNN4 || MTMIE4) && !MTMFirstRun) { + MTMItemName = "sub" + (MTMClickedItem ? MTMClickedItem : MTMTrackedItem); + if(document.layers && parent.frames[MTMenuFrame].scrollbars) { + MTMyval = parent.frames[MTMenuFrame].document.anchors[MTMItemName].y; + MTMWinSize = parent.frames[MTMenuFrame].innerHeight; + } else { + MTMyval = MTMGetPos(parent.frames[MTMenuFrame].document.all[MTMItemName]); + MTMWinSize = parent.frames[MTMenuFrame].document.body.offsetHeight; + } + if(MTMyval > (MTMWinSize - 60)) { + parent.frames[MTMenuFrame].scrollBy(0, parseInt(MTMyval - (MTMWinSize * 1/3))); + } + } + + MTMClickedItem = false; + MTMExpansion = false; + MTMTrack = false; + } + MTMUpdating = false; +} + +function MTMListItems(menu) { + var i, isLast; + for (i = 0; i < menu.items.length; i++) { + MTMIndices[MTMLevel] = i; + isLast = (i == menu.items.length -1); + MTMDisplayItem(menu.items[i], isLast); + + if (menu.items[i].submenu && menu.items[i].expanded) { + MTMBar[MTMLevel] = (isLast) ? false : true; + MTMLevel++; + MTMListItems(menu.items[i].submenu); + MTMLevel--; + } else { + MTMBar[MTMLevel] = false; + } + } + +} + +function MTMDisplayItem(item, last) { + var i, img, more; + + var MTMfrm = "parent.frames['code']"; + var MTMref = '.menu.items[' + MTMIndices[0] + ']'; + + if(item.submenu) { + var MTMouseOverText; + + var MTMClickCmd; + var MTMDblClickCmd = false; + + + if(MTMLevel > 0) { + for(i = 1; i <= MTMLevel; i++) { + MTMref += ".submenu.items[" + MTMIndices[i] + "]"; + } + } + + if(!MTMEmulateWE && !item.expanded && (item.url != "")) { + MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ",true);"; + } else { + MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ",false);"; + } + + if(item.url == "") { + MTMouseOverText = (item.text.indexOf("'") != -1) ? MTMEscapeQuotes(item.text) : item.text; + } else { + MTMouseOverText = "Expand/Collapse"; + } + } + + MTMOutputString = '<tr valign="top"><td nowrap>'; + if(MTMLevel > 0) { + for (i = 0; i < MTMLevel; i++) { + MTMOutputString += (MTMBar[i]) ? MTMakeImage("menu_bar.gif") : MTMakeImage("menu_pixel.gif"); + } + } + + more = false; + if(item.submenu) { + if(MTMSubsGetPlus || MTMEmulateWE) { + more = true; + } else { + for (i = 0; i < item.submenu.items.length; i++) { + if (item.submenu.items[i].submenu) { + more = true; + } + } + } + } + if(!more) { + img = (last) ? "menu_corner.gif" : "menu_tee.gif"; + } else { + if(item.expanded) { + img = (last) ? "menu_corner_minus.gif" : "menu_tee_minus.gif"; + } else { + img = (last) ? "menu_corner_plus.gif" : "menu_tee_plus.gif"; + } + if(item.url == "" || item.expanded || MTMEmulateWE) { + MTMOutputString += MTMakeVoid(item, MTMClickCmd, MTMouseOverText); + } else { + MTMOutputString += MTMakeLink(item, true) + ' onclick="' + MTMClickCmd + '">'; + } + } + MTMOutputString += MTMakeImage(img); +///////////////////////////////////////// + + var MTMCheckRef = '.menu.items[' + MTMIndices[0] + ']'; + if(MTMLevel > 0) { + for(i = 1; i <= MTMLevel; i++) { + MTMCheckRef += ".submenu.items[" + MTMIndices[i] + "]"; + } + } + + MTMOutputString += MTMakeVoid(item, "return " + MTMfrm + ".ToggleSelected(" + MTMfrm + MTMCheckRef + ",false);", "Checked Status") ; + var checkedImage = item.selected ? "checked.gif" : "uchecked.gif"; + if (!item.selected) + { + checkedImage = item.childSelected ? "gchecked.gif" : "uchecked.gif"; + } + MTMOutputString += MTMakeImage(checkedImage); + MTMOutputString += '</a>'; +///////////////////////////////////////////////// + + + if(item.submenu) { + if(MTMEmulateWE && item.url != "") + { + MTMOutputString += '</a>' + MTMakeLink(item, false) + '>'; + } + + img = (item.expanded) ? "menu_folder_open.gif" : "menu_folder_closed.gif"; + + if(!more) { + if(item.url == "" || item.expanded) { + MTMOutputString += MTMakeVoid(item, MTMClickCmd, MTMouseOverText); + } else { + MTMOutputString += MTMakeLink(item, true) + ' onclick="' + MTMClickCmd + '">'; + } + } + MTMOutputString += MTMakeImage(img); + + } else { + MTMOutputString += MTMakeLink(item, true) + '>'; + img = (item.icon != "") ? item.icon : MTMFetchIcon(item.url); + MTMOutputString += MTMakeImage(img); + } + + if(item.submenu && (item.url != "") && (item.expanded && !MTMEmulateWE)) { + MTMOutputString += '</a>' + MTMakeLink(item, false) + '>'; + } + + if(MTMNN3 && !MTMLinkedSS) { + var stringColor; + if(item.submenu && (item.url == "") && (item.number == MTMClickedItem)) { + stringColor = (item.expanded) ? MTMSubExpandColor : MTMSubClosedColor; + } else if(MTMTrackedItem && MTMTrackedItem == item.number) { + stringColor = MTMTrackColor; + } else { + stringColor = MTMLinkColor; + } + MTMOutputString += '<font color="' + stringColor + '" size="' + MTMenuFontSize + '" face="' + MTMenuFont + '">'; + } + MTMOutputString += ' ' + item.text + ((MTMNN3 && !MTMLinkedSS) ? '</font>' : '') + '</a>' ; + MTMDoc.writeln(MTMOutputString + '</td></tr>'); +} + +function MTMEscapeQuotes(myString) { + var newString = ""; + var cur_pos = myString.indexOf("'"); + var prev_pos = 0; + while (cur_pos != -1) { + if(cur_pos == 0) { + newString += "\\"; + } else if(myString.charAt(cur_pos-1) != "\\") { + newString += myString.substring(prev_pos, cur_pos) + "\\"; + } else if(myString.charAt(cur_pos-1) == "\\") { + newString += myString.substring(prev_pos, cur_pos); + } + prev_pos = cur_pos++; + cur_pos = myString.indexOf("'", cur_pos); + } + return(newString + myString.substring(prev_pos, myString.length)); +} + +function MTMTrackExpand(thisMenu) { + var i, targetPath; + var foundNumber = false; + for(i = 0; i < thisMenu.items.length; i++) { + if(thisMenu.items[i].url != "" && MTMTrackTarget(thisMenu.items[i].target)) { + targetPath = parent.frames[thisMenu.items[i].target].location.protocol + '//' + parent.frames[thisMenu.items[i].target].location.host + parent.frames[thisMenu.items[i].target].location.pathname; + + if(targetPath.lastIndexOf(thisMenu.items[i].url) != -1 && (targetPath.lastIndexOf(thisMenu.items[i].url) + thisMenu.items[i].url.length) == targetPath.length) { + return(thisMenu.items[i].number); + } + } + if(thisMenu.items[i].submenu) { + foundNumber = MTMTrackExpand(thisMenu.items[i].submenu); + if(foundNumber) { + if(!thisMenu.items[i].expanded) { + thisMenu.items[i].expanded = true; + if(!MTMClickedItem) { MTMClickedItem = thisMenu.items[i].number; } + MTMExpansion = true; + } + return(foundNumber); + } + } + } + return(foundNumber); +} + +function MTMCloseSubs(thisMenu) { + var i, j; + var foundMatch = false; + for(i = 0; i < thisMenu.items.length; i++) { + if(thisMenu.items[i].submenu && thisMenu.items[i].expanded) { + if(thisMenu.items[i].number == MTMClickedItem) { + foundMatch = true; + for(j = 0; j < thisMenu.items[i].submenu.items.length; j++) { + if(thisMenu.items[i].submenu.items[j].expanded) { + thisMenu.items[i].submenu.items[j].expanded = false; + } + } + } else { + if(foundMatch) { + thisMenu.items[i].expanded = false; + } else { + foundMatch = MTMCloseSubs(thisMenu.items[i].submenu); + if(!foundMatch) { + thisMenu.items[i].expanded = false; + } + } + } + } + } + return(foundMatch); +} + +function MTMFetchIcon(testString) { + var i; + for(i = 0; i < MTMIconList.items.length; i++) { + if((MTMIconList.items[i].type == 'any') && (testString.indexOf(MTMIconList.items[i].match) != -1)) { + return(MTMIconList.items[i].file); + } else if((MTMIconList.items[i].type == 'pre') && (testString.indexOf(MTMIconList.items[i].match) == 0)) { + return(MTMIconList.items[i].file); + } else if((MTMIconList.items[i].type == 'post') && (testString.indexOf(MTMIconList.items[i].match) != -1)) { + if((testString.lastIndexOf(MTMIconList.items[i].match) + MTMIconList.items[i].match.length) == testString.length) { + return(MTMIconList.items[i].file); + } + } + } + return("menu_link_default.gif"); +} + +function MTMGetPos(myObj) { + return(myObj.offsetTop + ((myObj.offsetParent) ? MTMGetPos(myObj.offsetParent) : 0)); +} + +function MTMCheckURL(myURL) { + var tempString = ""; + if((myURL.indexOf("http://") == 0) || (myURL.indexOf("https://") == 0) || (myURL.indexOf("mailto:") == 0) || (myURL.indexOf("ftp://") == 0) || (myURL.indexOf("telnet:") == 0) || (myURL.indexOf("news:") == 0) || (myURL.indexOf("gopher:") == 0) || (myURL.indexOf("nntp:") == 0) || (myURL.indexOf("javascript:") == 0)) { + tempString += myURL; + } else { + tempString += MTMPreHREF + myURL; + } + return(tempString); +} + +function MTMakeVoid(thisItem, thisCmd, thisText) { + var tempString = ""; + tempString += '<a name="sub' + thisItem.number + '" href="javascript:parent.frames[\'code\'].myVoid();" onclick="' + thisCmd + '" onmouseover="window.status=\'' + thisText + '\';return true;" onmouseout="window.status=\'' + window.defaultStatus.replace(/'/g,"") + '\';return true;"'; + if(thisItem.number == MTMClickedItem) { + var tempClass; + tempClass = thisItem.expanded ? "subexpanded" : "subclosed"; + tempString += ' class="' + tempClass + '"'; + } + return(tempString + '>'); +} + +function MTMakeLink(thisItem, addName) { + var tempString = '<a'; + + if(MTMTrackedItem && MTMTrackedItem == thisItem.number) { + tempString += ' class="tracked"' + } + if(addName) { + tempString += ' name="sub' + thisItem.number + '"'; + } + tempString += ' href="' + MTMCheckURL(thisItem.url) + '"'; + if(thisItem.target != "") { + tempString += ' target="' + thisItem.target + '"'; + } +return tempString; +} + +function MTMakeImage(thisImage) { + return('<img src="' + MTMPreHREF + MTMenuImageDirectory + thisImage + '" align="left" border="0" vspace="0" hspace="0" width="18" height="18">'); +} + +function MTMakeBackImage(thisImage) { + var tempString = 'transparent url("' + ((MTMPreHREF == "") ? "" : MTMPreHREF); + tempString += MTMenuImageDirectory + thisImage + '")' + return(tempString); +} + +function MTMakeA(thisType, thisText, thisColor) { + var tempString = ""; + tempString += 'a' + ((thisType == "pseudo") ? ':' : '.'); + return(tempString + thisText + '{color:' + thisColor + ';background:' + MTMakeBackground() + ';}'); +} + +function MTMakeBackground() { + return((MTMBackground == "") ? MTMBGColor : 'transparent'); +} + +function MTMTrackTarget(thisTarget) { + if(thisTarget.charAt(0) == "_") { + return false; + } else { + for(i = 0; i < MTMFrameNames.length; i++) { + if(thisTarget == MTMFrameNames[i]) { + return true; + } + } + } + return false; +} + + + + +/****************************************************************************** + * User-configurable options. * + ******************************************************************************/ + +// Menu table width, either a pixel-value (number) or a percentage value. +var MTMTableWidth = "100%"; + +// Name of the frame where the menu is to appear. +var MTMenuFrame = "tocmain"; + +// variable for determining whether a sub-menu always gets a plus-sign +// regardless of whether it holds another sub-menu or not +var MTMSubsGetPlus = true; + + +// variable that defines whether the menu emulates the behaviour of +// Windows Explorer +var MTMEmulateWE = true; + +// Directory of menu images/icons +var MTMenuImageDirectory = "/ndk/doc/docui2k/menu-images/"; + +// Variables for controlling colors in the menu document. +// Regular BODY atttributes as in HTML documents. +var MTMBGColor = "#cc0000"; +var MTMBackground = ""; +var MTMTextColor = "white"; + +// color for all menu items +var MTMLinkColor = "#ffffcc"; + +// Hover color, when the mouse is over a menu link +var MTMAhoverColor = "#FF9933"; + +// Foreground color for the tracking & clicked submenu item +var MTMTrackColor ="#FF9933"; +var MTMSubExpandColor = "#ffffcc"; +var MTMSubClosedColor = "#ffffcc"; + +// All options regarding the root text and it's icon +var MTMRootIcon = "menu_new_root.gif"; +var MTMenuText = "Site contents:"; +var MTMRootColor = "white"; +var MTMRootFont = "Verdana"; +var MTMRootCSSize = "84%"; +var MTMRootFontSize = "-1"; + +// Font for menu items. +var MTMenuFont = "Verdana"; +var MTMenuCSSize = "74%"; +var MTMenuFontSize = "-1"; + +// Variables for style sheet usage +// 'true' means use a linked style sheet. +var MTMLinkedSS = false; +var MTMSSHREF = "style/menu.css"; + +// Whether you want an open sub-menu to close automagically +// when another sub-menu is opened. 'true' means auto-close +var MTMSubsAutoClose = false; + +// This variable controls how long it will take for the menu +// to appear if the tracking code in the content frame has +// failed to display the menu. Number if in tenths of a second +// (1/10) so 10 means "wait 1 second". +var MTMTimeOut = 25; + +/****************************************************************************** + * User-configurable list of icons. * + ******************************************************************************/ + +var MTMIconList = null; +MTMIconList = new IconList(); +// examples: +//MTMIconList.addIcon(new MTMIcon("menu_link_external.gif", "http://", "pre")); +//MTMIconList.addIcon(new MTMIcon("menu_link_pdf.gif", ".pdf", "post")); + +/****************************************************************************** + * User-configurable menu. * + ******************************************************************************/ + + +// navigation link is an object used to store the extracted information from +// the search request. The stored information will be used to build the +// navigation tree. + function navigationLink(title,URL,level,elementIndex,levelIndex,parentIndex,author) + { + var returnArray = new Array(); + returnArray.title = title; + returnArray.URL = URL; + returnArray.level = level; + returnArray.hasChild = false; + returnArray.elementIndex = elementIndex; + returnArray.parentIndex = parentIndex; + returnArray.levelIndex = levelIndex; + returnArray.author = author; + + return returnArray; + } + +// Variables used for tracking state as the search iterates through the list +// of documents returned. + var index = 0; + var currentLevel = 0; + var levelParents = new Array(); + var levelIndexes = new Array(); + var navigationTree = new Array(); + var treeNodes = new Array(); + var levelIndex = 0; + top.printList = ""; + top.printCount = 0; + +// asign the menu handle to the created tree + var menu = null; + + + function getNextChecked(item) + { + // case that root of tree is selected + if ( item.parent == null && item.selected) + { + for (var i = 0 ; i < top.authors.length; i++) + { + var re = /\s$/; + + if (top.titles[i].replace(re,"") == item.text.replace(re,"")) + { + top.printList += (top.authors[i].length + 3) + "_" + top.authors[i].replace(/\s/g,"+") + "+en"; + top.printCount ++; + } + } + } + else if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (item.submenu.items[x].selected) + { + var name = item.submenu.items[x].text; + for (var i = 0 ; i < top.authors.length; i++) + { + var re = /\s$/; + if (top.titles[i].replace(re,"") == name.replace(re,"")) + { + top.printList += (top.authors[i].length + 3) + "_" + top.authors[i].replace(/\s/g,"+") + "+en"; + top.printCount ++; + } + } + + } + else + { + getNextChecked(item.submenu.items[x]); + } + } + } + + } + +// Get a URL to pass checked topics to the Print Servlet + + + + function getPrintUrl(menu) + { + top.printList = ""; + top.printCount = 0; + + getNextChecked(menu.items[0]); + top.printList = top.printCount + "_" + top.printList; + + return top.printList; + } + + function setLevels() + { + + // Tracking the parent of the next node. + levelParents[currentLevel + 1] = index; + + // levelIndex is the child index under a branch + if (levelIndexes[currentLevel] == null) + { + levelIndexes[currentLevel] = 0; + } + else + { + levelIndexes[currentLevel] = levelIndexes[currentLevel] + 1; + levelIndexes[currentLevel + 1] = -1; + } + } + + function buildTree() + { + +// Determine which nodes have children and assign the correct property + for (var i = 0; i < navigationTree.length-1; i++) + { + // see if the current node has chilren + var thisLevel = navigationTree[i]["level"]; + var nextLevel = navigationTree[i+1]["level"]; + + if (nextLevel > thisLevel) + { + navigationTree[i]["hasChild"] = true; + } + else + { + navigationTree[i]["hasChild"] = false; + } + } + + +// create tree object nodes. + for( var j = 0; j < navigationTree.length; j++) + { + treeNodes[j] = null; + treeNodes[j] = new MTMenu(); + } + + +// add all items to nodes - +// NOTE, index to add to is the parent index + 1 for node tree offset of root=0 + for( var j3 = 0; j3 < navigationTree.length; j3++) + { + if (navigationTree[j3]["parentIndex"] == null) + { + var nsearchID = navigationTree[j3]["author"]; + treeNodes[0].MTMAddItem(new MTMenuItem(navigationTree[j3]["title"], navigationTree[j3]["URL"].replace(/http...developer.novell.com.ndk/gi,"/ndk") , "content_frame", nsearchID)); + } + else + { + var nsearchID = navigationTree[j3]["author"]; + treeNodes[navigationTree[j3]["parentIndex"] + 1 ].MTMAddItem(new MTMenuItem(navigationTree[j3]["title"], navigationTree[j3]["URL"].replace(/http...developer.novell.com.ndk/gi,"/ndk"), "content_frame",nsearchID)); + } + } + +// create submenu structure +// NOTE: add 1 to parent nodes for root = 0 offset. + for( var j4 = 0; j4 < navigationTree.length; j4++) + { + if (navigationTree[j4]["hasChild"]) + { + var pindex = null; + if (navigationTree[j4]["parentIndex"] == null) + { + + pindex = 0; + } + else + { + pindex = navigationTree[j4]["parentIndex"]+1; + } + + var lindex = navigationTree[j4]["levelIndex"]; + // document.write('treeNodes[' + pindex +'].items['+ lindex +'].MTMakeSubmenu(treeNodes['+(j4+1)+']);<br>'); + + treeNodes[pindex].items[lindex].MTMakeSubmenu(treeNodes[j4+1]); + } + } + + menu = treeNodes[0]; + +//expand the second item to display the sub contents on first display + if (menu.items[0] != null ) + { + menu.items[0].expanded = true; + + } + + + + } + + + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Libraries for C ","http://developer.novell.com/ndk/doc/ndslib/treetitl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Backup Services ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hevgtl7k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDSBackupServerData ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSFreeNameList ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk12.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSGetReplicaPartitionNames ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk19.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSIsOnlyServerInTree ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk26.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSSYSVolumeRecovery ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSVerifyServerInfo ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NAMEID_TYPE ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk48.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Reason Flags ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/h3r99io5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Server Flags ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hnlckbki.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Event Services ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmwiqbwd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Concepts ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hj3udfo7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Event Introduction ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmgeu8a1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Functions ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hxwcemsz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Priorities ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hux0tdup.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Data Filtering ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/ha7nqbpy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Types ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h741eryw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Global Network Monitoring ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h9alatk4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Monitoring NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hhkihe7f.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registering for NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h0xmzt1h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unregistering for NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hk3fvwed.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSEConvertEntryName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk28.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalAttrID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalAttrName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalClassID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk45.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalClassName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk51.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalEntryID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk57.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalEntryName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk63.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSERegisterForEvent ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk69.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSERegisterForEventWithResult ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk75.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEUnRegisterForEvent ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk81.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("DSEACL ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk88.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBackLink ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk92.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBinderyObjectInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk96.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBitString ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEChangeConnState ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk104.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSECIList ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk108.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEDebugInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEmailAddress ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk116.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEntryInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk120.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEntryInfo2 ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk124.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEventData ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk128.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEFaxNumber ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk132.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEHold ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEModuleState ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk139.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSENetAddress ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk143.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEOctetList ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk147.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEPath ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk151.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEReplicaPointer ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk155.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSESEVInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk159.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETimeStamp ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk163.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETraceInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk167.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETypedName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk172.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEVALData ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk176.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEValueInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk179.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Event Priorities ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hlerfllh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Event Types ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hiz5y84y.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/a6hw6zr.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Technical Overview ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6tvg4z7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS as the Internet Directory ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h273w870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Requirements for Networks and the Internet ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2lh37b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Compliance to X.500 Standard ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h0jj42d7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Compliance with LDAP v3 ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2b6k5w.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Access Protocols ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2b6k5x.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Programming Interfaces for NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h2qzzkq8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Architecture ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6mny7fl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Objects ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hp4dslw5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Names ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h0yh1byj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Types of Information Stored in NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hci52ynf.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieval of Information from NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwwz5mda.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Walking ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h2xhaphc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Object Management ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h3mq2rf0.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Security ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hl8x1zxc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Authentication ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hp901s8a.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Access Control Lists ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hr8sqtoi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Inheritance ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hh9881ul.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NetWare File System ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h64btfhk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Partitions and Replicas ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hmq60r6h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Partitioning ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hqx5hvrp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replication ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hj5l8npv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Distributed Reference Management ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hzap47de.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Operations ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hgbpk7x9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronization ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hsiplgn4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Background Processes ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hz2kcp2e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Bindery Services ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwug6ytv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Bindery Context ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h8dwby8o.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Context Path ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6y3yva6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Context Eclipsing ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwcqk80m.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Bindery Objects ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hq4w9le6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hbjry4gt.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Return Values from the Operating System ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h5h16q77.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Client Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/he2lvhfy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Agent Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hcvwzt90.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Directory Services Trace Utilities ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hujirj2n.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Using the DSTrace NLM ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hmg1e5gn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Using Basic SET DSTrace Commands ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hdn0smja.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Starting Background Processes with SET DSTrace ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h5pjd8fv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tuning Background Processes ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hhv9cqpk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Enabling DSTrace Messages with SET DSTrace ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hcah5j8v.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Core Services ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h2y7hdit.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Programming Concepts ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h2x9gqr9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handles ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huynzi7a.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Management ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h9xiygoj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Read Requests for Object Information ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7d6try4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Search Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h11es6ae.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Developing in a Loosely Consistent Environment ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hsaqomj7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Add Object Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqjws9hi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Security and Applications ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h3xwyggn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authentication of Client Applications ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h0m1k6ck.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Multiple Tree Support ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hu5a8flo.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Effective Rights Function ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he06edkq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/ha7fzu9h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpmsr4w7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Read Requests for Schema Information ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h0a2o4v9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Extension Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hrgy5k6e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handle Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hw34ixeu.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hb1nkqk4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authentication and Connection Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huzx6sda.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hddp9m9i.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition and Replica Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpx2o69b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hp85l75p.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSAbbreviateName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAbortPartitionOperation ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddFilterToken ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk153.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddPartition (obsolete---moved from .h file 11/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddReplica ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddSecurityEquiv ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk189.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAllocBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk198.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAllocFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk207.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuditGetObjectID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk216.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticate ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk225.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticateConn ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk234.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticateConnEx ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a3fvxoz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSBackupObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk243.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSBeginClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk252.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCanDSAuthenticate ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk261.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCanonicalizeName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk270.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSChangeObjectPassword ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk279.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSChangeReplicaType ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk288.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCIStringsMatch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk297.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCloseIteration ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk305.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCompare ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk314.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSComputeAttrValSize ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk360.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCreateContext (obsolete---moved from .h file 6/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk369.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCreateContextHandle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk371.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDefineAttr ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk382.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDefineClass ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk391.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDelFilterToken ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk402.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDuplicateContext (obsolete 03/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDuplicateContextHandle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk423.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncList ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncRead ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk443.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncSearch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk455.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk465.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk491.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGenerateObjectKeyPair ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk501.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk511.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk521.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrValFlags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk550.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrValModTime ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk558.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetBinderyContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk566.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk603.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassDefCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk691.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk769.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassItemCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk838.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk919.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetCountByClassAndName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk972.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetCurrentUser ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1031.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDefNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1041.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDSIInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1117.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDSVerInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1209.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetEffectiveRights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1274.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetMonitoredConnRef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1346.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetNDSInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1425.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectHostServerAddress ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1604.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1640.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectNameAndInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1700.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionExtInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1781.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionExtInfoPtr ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionRoot ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2001.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerAddresses (obsolete 3/98) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2021.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerAddresses2 ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2030.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2039.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2047.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2056.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2065.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2074.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSInitBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSInspectEntry ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2091.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSJoinPartitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2099.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSList ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2108.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListAttrsEffectiveRights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2117.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListByClassAndName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListContainableClasses ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListContainers ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListPartitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2153.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListPartitionsExtInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLogin ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLoginAsServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLogout ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2187.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMapIDToName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2196.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMapNameToID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2205.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2214.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2223.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2232.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyRDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2241.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMoveObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2250.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMutateObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a37nkf6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenConnToNDSServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2259.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenMonitoredConn ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2268.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenStream ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2277.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPartitionReceiveAllUpdates ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2285.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPartitionSendAllUpdates ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2294.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2303.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrNameAndVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2312.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2321.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutChange ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2330.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutChangeAndVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2339.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2348.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutClassName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2357.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2364.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutSyntaxName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2373.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRead ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2380.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2389.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2398.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadNDSInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2407.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadObjectDSIInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2416.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadObjectInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2425.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadReferences ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadSyntaxDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2443.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadSyntaxes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2451.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReloadDS ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2459.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveAllTypes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2467.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2475.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2484.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2493.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemovePartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2501.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveReplica ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemSecurityEquiv ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2519.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRepairTimeStamps ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReplaceAttrNameAbbrev ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2536.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSResolveName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2544.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRestoreObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2553.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReturnBlockOfAvailableTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2562.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSScanConnsForTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2573.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSScanForAvailableTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSearch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2591.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2600.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetCurrentUser ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2609.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetDefNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2615.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetMonitoredConnection ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSplitPartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2633.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncPartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncReplicaToServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2651.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncSchema ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2660.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSUnlockConnection ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2669.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSVerifyObjectPassword ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2678.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSWhoAmI ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2687.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetDefaultNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2695.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetFileServerUTCTime ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2704.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetNumConnections ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2712.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetNWNetVersion ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2720.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetPreferredConnName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2727.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWIsDSAuthenticated ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2736.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWIsDSServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2743.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWNetInit ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2750.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWNetTerm ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2759.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWSetDefaultNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2767.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWSetPreferredDSTree ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2776.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Asn1ID_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2785.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attr_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2790.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Back_Link_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2795.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bit_String_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buf_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2805.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CI_List_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2810.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2815.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail_Address_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2820.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Fax_Number_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2826.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter_Cursor_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2831.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter_Node_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Hold_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2841.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSOSVersion_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2846.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSStatsInfo_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2850.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Net_Address_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2855.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDS_TimeStamp_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object_ACL_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2865.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet_List_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2875.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet_String_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2880.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2885.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica_Pointer_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2895.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("TimeStamp_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2900.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Typed_Name_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2906.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown_Attr_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2911.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Attribute Constraint Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hudjk3k4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Value Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h6anqw6h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Operation Types and Related Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h8bn0lfm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpj620k3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Change Types for Modifying Objects ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hc4p686b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Context Keys and Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h1btx3en.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default Context Key Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hlkcqs3t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_FLAGS Bit Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he1wcp92.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_NAME_FORM Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hmd7uuiw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_CONFIDENCE Bit Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7hy5yg3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_DSI_FLAGS Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huh0ri39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSI_ENTRY_FLAGS Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqwiyl1u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter Tokens ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h487zxy3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Attribute Definitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hdqx1cns.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Class Definitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hcq403ms.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Search and Read ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/ha682lf8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Name Space Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hs6qj0yl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Access Control Rights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h12s89uj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Ping Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hf0fdqhd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSP Replica Information Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hw42a7qg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hniuyp90.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Scope Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h6wfyyfk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he290q86.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica States ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h9br9yt1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax Matching Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hd8fn0rm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax IDs ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hn1dsa7y.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Example Code ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hb05g04v.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2sofgc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object and Attribute ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snp6e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Browsing and Searching ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snu78.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Batch Modification of Objects and Attributes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snzot.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snqyd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Schema Reference ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h4q1mn1i.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Schema Concepts ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h282spjh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Schema Structure ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hpmkggmh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Components ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hvt5bdoi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hbna398k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Naming Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h9vf1k0r.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Containment Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hh1izaro.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Super Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hmdjysrx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Class Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h6rvyaky.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mandatory and Optional Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h2vnta8j.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default ACL Templates ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hr9sm1l0.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Auxiliary Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hlh5m1af.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Type Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hotadinr.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Syntax Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h2m59phc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/he5mef3b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Base Object Class Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hmv2qd15.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("AFP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk75.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Alias ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk83.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("applicationEntity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk91.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("applicationProcess ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk99.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:File Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk107.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk115.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk123.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("certificationAuthority ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk131.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CommExec ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk139.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Computer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk147.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Country ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk155.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("cRLDistributionPoint ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk163.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dcObject ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk179.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk187.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("domain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk195.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dSA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk203.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Entity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk219.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk227.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a38rj6z.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk243.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk251.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Locality ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk259.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Security Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk267.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk275.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk283.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NCP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk291.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk347.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Certificate Authority ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk355.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key Material ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk363.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Access Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvd6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvdx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvbk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvcf.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:groupOfCertificates ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk421.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailGroup1 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk445.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailRecipient ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk466.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:NetscapeMailServer5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:NetscapeServer5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk482.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nginfo3 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk518.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organization ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Person ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk541.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk550.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk561.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk570.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Person ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk578.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pkiCA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk586.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pkiUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk594.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk602.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk610.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk618.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk626.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk634.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Security ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk650.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk658.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("strongAuthenticationUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk698.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Template ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk706.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Top ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk714.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Root ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk730.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk738.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userSecurityInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk746.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk754.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:LAN Area ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk762.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Novell Object Class Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3fh4x1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Entrust:CRLDistributionPoint ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk211.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("inetOrgPerson ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk235.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Broker ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk299.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Manager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk307.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk315.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk323.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Master Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk331.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Slave Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk339.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NetSvc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk379.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk386.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk394.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Product Container ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:groupOfUniqueNames5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk432.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailGroup5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk454.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:Nginfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk491.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:Nginfo2 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk502.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("residentialPerson ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3omhcl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Directory Agent ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk674.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk682.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS SMDR Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk690.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Graphical View of Object Class Inheritance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hzah4ydk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Alias and Bindery Object Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hw8hr9jx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Root, domain, and Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hu1mitlx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Computer, Country, Device, and Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hnf7uif9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("List and Locality ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h48ynbap.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Role and Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hrfg9w4e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties, Organization, and Organizational Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hzvb48kg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties, Person, Organizational Person, and User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hknzjmiv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Map, Profile, Queues, Resource, and Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h8jovuwl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Servers (AFP, Messaging, NCP, Print) and CommExec ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/ha47y85g.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Entity, Group, and Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hds3w6ie.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Base Attribute Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hf9qbbni.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Aliased Object Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk782.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Account Balance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk788.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk794.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Allow Unlimited Credit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("associatedName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a7bbra4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("attributeCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk806.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:A Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk812.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:B Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk818.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Contents ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk824.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Current Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:File Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Link List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk842.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk848.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk854.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("authorityRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk866.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authority Revocation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk872.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("AuxClass Object Class Backup ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk878.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Auxiliary Class Flag ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk884.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Object Restriction ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk896.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Property ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk902.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Restriction Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk908.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk914.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("businessCategory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk920.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk932.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("cACertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CA Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk944.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CA Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk950.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Cartridge ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk956.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("certificateRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk962.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Certificate Revocation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk968.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Certificate Validity Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk974.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("crossCertificatePair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk926.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk986.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Convergence ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk998.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Cross Certificate Pair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1004.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1034.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1040.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("deltaRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1052.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("departmentNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on5am.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Description ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1058.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("destinationIndicator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1064.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Detect Intruder ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1070.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1076.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dmdName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dn ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1088.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dnQualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1094.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DS Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1106.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("employeeType ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on9iy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("enhancedSearchGuide ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1120.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Equivalent To Me ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1138.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Synchronizer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1150.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Facsimile Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1156.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Full Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Generational Qualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1168.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("generationQualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1174.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Given Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1186.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1192.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GUID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1198.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("High Convergence Sync Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1216.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Higher Privileges ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1222.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Home Directory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1228.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Home Directory Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1234.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("homePhone ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onbgn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("homePostalAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3ondem.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("houseIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1258.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1240.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Resource Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1246.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1252.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Inherited ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1264.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Initials ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1270.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("internationaliSDNNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1276.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Internet EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1282.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Intruder Attempt Reset Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1288.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Intruder Lockout Reset Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1294.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("knowledgeInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1312.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1318.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1324.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Last Login Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1330.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Last Referenced Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1336.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP ACL v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1342.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Allow Clear Text Password ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1348.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Anonymous Identity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1354.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Attribute Map v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1360.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Backup Log Filename ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1366.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Class Map v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1378.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable SSL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1384.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable TCP ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1390.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable UDP ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1396.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1402.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Host Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1408.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Filename ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1414.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1420.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Size Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1426.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Referral ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1432.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Screen Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1438.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Search Size Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1444.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Search Time Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1450.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1456.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server Bind Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1462.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server Idle Timeout ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1468.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP SSL Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1480.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Suffix ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1486.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP TCP Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1492.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP UDP Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1498.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:bindCatalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1516.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:bindCatalogUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1522.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:keyMaterialName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1546.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:otherReferralUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1552.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchCatalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1558.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchCatalogUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1564.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchReferralUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1570.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Locked By Intruder ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1576.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Lockout After Detection ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Allowed Time Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1588.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Disabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1594.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Expiration Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1600.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Grace Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1606.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Grace Remaining ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1612.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1618.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Attempts ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1630.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Reset Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1636.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Maximum Simultaneous ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1648.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1654.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Low Convergence Reset Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1660.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Low Convergence Sync Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mailbox ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1672.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mailbox Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1678.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("manager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onljj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvAuthorizedRange ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1684.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvDefaultRange ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1690.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvDomainPolicy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1696.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvLabel ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1702.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvProposedLabel ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1708.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Member ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1726.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Members Of Template ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1732.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Memory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1738.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1744.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1750.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Database Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1756.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1762.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1768.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Minimum Account Balance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1786.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("mobile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oojmc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Certificate Chain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4104.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Given Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4110.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key File ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4116.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key Material DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4122.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Keystore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknqe.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Not After ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Not Before ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpe.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Parent CA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4128.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Parent CA DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4134.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4140.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4146.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Public Key Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4152.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Cert ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknq2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknq8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Server DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Struct ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Subject Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4158.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Tree CA DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4164.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknp8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:userCertificateInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknp2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4170.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address Restriction ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4176.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's DS Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4182.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's FS Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4188.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's Self Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4194.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NNS Domain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4338.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notify ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4374.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:administratorContactInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4392.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:adminURL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4398.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAccessDomain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4404.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAlternateAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4410.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAutoReplyMode ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4416.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAutoReplyText ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4422.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailDeliveryOption ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4428.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailForwardingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailHost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4440.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailMessageStore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4446.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailProgramDeliveryInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4452.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailQuota ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4458.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicenseEndTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4464.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicensedFor ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4470.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicenseStartTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4476.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:employeeNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4482.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:installationTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4488.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailRoutingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2ixy4e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:memberCertificateDesc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4554.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mgrpRFC822mailmember ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4560.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:ngcomponentCIS ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4572.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsaclrole ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4578.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nscreator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4584.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsflags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4590.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsnewsACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4614.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsprettyname ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4620.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverHostName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4626.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverProductName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4632.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverRoot ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4638.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverVersionNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4644.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:subtreeACI ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4650.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4656.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Obituary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4662.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Obituary Notify ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4668.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4674.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Operator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4680.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Other GUID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4686.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4692.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Owner ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4698.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Page Description Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4704.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oojmj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Control ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4716.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Creation Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4728.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Allow Change ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4734.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Expiration Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4740.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Expiration Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4746.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Management ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4752.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Minimum Length ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4758.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Required ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4764.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Unique Required ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4770.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Passwords Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4776.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4782.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Permanent Config Parms ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4788.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Physical Delivery Office Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4794.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Code ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4806.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Office Box ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4812.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postmaster ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4818.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("preferredDeliveryMethod ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4824.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("presentationAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Job Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4848.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4854.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4872.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Control ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4878.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4914.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4920.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile Membership ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4926.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("protocolInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4932.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4944.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Purge Vector ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4950.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4956.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue Directory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4962.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Received Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4968.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Reference ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4974.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("registeredAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4980.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5010.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5016.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5028.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5064.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Role Occupant ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5070.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("roomNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5076.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Run Setup Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5088.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5094.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAP Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Security DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5106.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Service DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchGuide ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5118.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchSizeLimit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5124.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchTimeLimit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5130.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Security Equals ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5136.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Security Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5142.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("See Also ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5148.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Serial Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5154.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5160.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server Holds ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5166.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Set Password After Create ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5172.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Setup Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5178.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5286.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("supportedAlgorithms ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5298.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("supportedApplicationContext ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5304.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Connections ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5310.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Gateway ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5316.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Services ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5322.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Typefaces ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5328.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Surname ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5334.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronization Tolerance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5358.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronized Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5364.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5370.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5376.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("telexNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5382.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("telexTerminalIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5388.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Timezone ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5394.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Title ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5400.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Transitive Vector ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5406.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Trustees Of New Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Type Creator Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5418.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5424.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("uniqueID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5430.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5436.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown Auxiliary Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5442.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown Base Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5448.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Used By ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5454.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5460.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5466.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userPassword ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6m1fnz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Uses ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5472.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5478.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5484.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume Space Restrictions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5490.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:Cost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5496.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:Default Cost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5502.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:LAN Area Membership ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5508.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:WAN Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5514.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("x121Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5520.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("x500UniqueIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5526.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Novell Attribute Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3fh5xp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("audio ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3omwno.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("carLicense ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on4e7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Client Install Candidate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk980.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Color Supported ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk992.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Database Dir Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1010.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Database Volume Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1016.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Datapool Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1022.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Datapool Locations ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1028.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Delivery Methods Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1046.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("displayName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oorbo.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Employee ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1114.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Entrust:AttributeCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Entrust:User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1132.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GW API Gateway Directory Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1204.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GW API Gateway Directory Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1210.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("IPP URI ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1300.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("IPP URI Security Scheme ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1306.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("jpegPhoto ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onfdu.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("labeledUri ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onkke.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Class Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1372.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ldapPhoto ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3op8zp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAPUserCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1504.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:ARL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:caCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:CRL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1534.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:crossCertificatePair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Authorized Range ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2co5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Default Range ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2cob.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Domain Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2coh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2con.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Proposed Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2cot.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Maximum Speed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1714.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Maximum Speed Units ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1720.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MHS Send Directory Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1774.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MHS Send Directory Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1780.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Accountant Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1792.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Control Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1798.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1804.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Data Image ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1810.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Index Image ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1816.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Default Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1822.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Default Public Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1828.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Job Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1834.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Manager Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1840.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Operator Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1846.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Install List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1852.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Install Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1858.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Queue List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1864.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Siblings ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Public Printer Install List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1876.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Replace All Client Printers ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1882.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS SMTP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1888.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS User Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1894.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual All Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1900.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Attribute Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1906.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1912.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Base Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1918.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Catalog Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1924.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual End Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1930.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Filter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1936.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Object Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1942.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Return Code ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1948.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Scope ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1954.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Search Aliases ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1960.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Start Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1966.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Value Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1972.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:All Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1978.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:AttrDefTbl ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1984.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1990.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Auto Dredge ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1996.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Base Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2002.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:CatalogDB ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2008.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Catalog List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2014.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Dredge Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4008.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Filter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4014.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:IndexDefTbl ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4020.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Indexes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4026.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4032.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Log ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4038.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Master Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4044.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Log Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4050.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Retries ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4056.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Threads ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4062.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Retry Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4068.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Scope ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4074.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Search Aliases ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4080.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Slave Catalog List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4086.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Start Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4092.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Synch Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4098.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Common Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4200.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4206.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Peak Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4212.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Peak Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4218.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4224.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Hourly Data Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4230.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Database ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4236.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4242.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Service Provider ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4248.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:LSP Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4254.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Owner ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4260.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Peak Installed Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4266.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Peak Used Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4272.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Product ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4278.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Publisher ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4284.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4290.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Search Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4296.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Summary Update Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4302.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Summary Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4308.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Database ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4314.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Log Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4320.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Log Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4326.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4332.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Consumers ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4344.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4350.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4356.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4362.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4368.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NRD:Registry Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4380.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NRD:Registry Index ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4386.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAccessDomain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4494.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAlternateAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4500.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAutoReplyMode ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4506.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAutoReplyText ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4512.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailDeliveryOption ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4518.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailForwardingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4524.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailHost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailMessageStore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4536.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailProgramDeliveryInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4542.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailQuota ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4548.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:ngComponent ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4566.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseEndTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4596.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicensedFor ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4602.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseStartTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4608.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Page Description Languages ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4710.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("preferredLanguage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oon3t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Primary Notification Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Primary Resource Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4842.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Agent Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4866.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Manufacturer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4884.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Mechanism Types ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Model ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4896.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4902.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer to PA ID Mappings ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4908.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("PSM Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Advertising Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4986.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4992.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4998.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5004.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resolution ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5022.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5034.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5040.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5046.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgr Database Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5052.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgr Database Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5058.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("secretary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oon40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Sides Supported ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5184.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Attribute ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5190.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Cache Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5196.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP DA Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5202.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Directory Agent DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5208.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5214.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Lifetime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5220.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5226.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Unit DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5232.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Start Purge Hour ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5238.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5244.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP SU Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5250.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP SU Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5256.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5262.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP URL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5268.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS Protocol Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5274.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS Registered Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5280.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SU ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5292.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5340.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcType ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5346.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcTypeID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5352.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userSMIMECertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oorbh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("LDAP Operational Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a7lnqjy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("createTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3q.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("creatorsName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3f.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("entryFlags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxcp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("federationBoundary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fzxsm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("localEntryID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fzcam.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("modifiersName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3j.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("modifyTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3x.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("structuralObjectClass ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxcb.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("subordinateCount ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxci.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("subschemaSubentry ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxc4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Attribute Syntax Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h55cqjqs.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5533.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Boolean ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Exact String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5547.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Ignore List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5554.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Ignore String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5561.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5568.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Counter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5575.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Distinguished Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5589.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Facsimile Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5596.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Hold ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5603.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Integer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5610.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5617.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Numeric String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5631.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5638.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5645.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5652.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5659.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printable String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5673.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Pointer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5680.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Stream ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5687.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5694.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5701.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5708.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Typed Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5715.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A through B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C through D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L through M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P through R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx10.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx11.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx12.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx13.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx14.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx15.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx16.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("F through G ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx17.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("H ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx18.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("I through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx19.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx20.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx21.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx22.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx23.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx24.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Q ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx25.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx26.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx27.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx28.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("U ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx29.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("V through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx30.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of ASN.1 IDs ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx31.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("0 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx32.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("1 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("2 through 2.4 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx34.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("2.5 through 2.9 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx35.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of LDAP Names ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx36.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A through B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx37.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx38.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E through F ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("G ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx41.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("H ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx42.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("I through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx43.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx44.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx45.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx46.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx47.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx48.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Q through R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx49.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx50.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx51.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("U through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx52.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Iterator Services ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hnv8aaj7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Concepts ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hj3udfo7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Iterator Objects ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hwiuqovp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creation of an Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hrb7xece.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Iterator Indexes ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hqngpqag.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Positions of an Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h25zhm0d.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Current Position Movement with Retrieval Functions ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hn9jdbnd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieval of Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hy7j1t07.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Creating a Search Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hcyx2utx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieving and Unpacking Object and Attribute Name Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h9evr0ru.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieving and Unpacking Object, Attribute, and Value Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/htq89y7t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSItrAtEOF ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk29.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrAtFirst ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk36.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrClone ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk43.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCount ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk50.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCreateList ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk57.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCreateSearch ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk64.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrDestroy ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk71.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetCurrent ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk77.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetInfo ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk84.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetNext ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk91.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetPosition ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk98.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetPrev ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk105.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSetPosition ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSetPositionFromIterator ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk119.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSkip ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrTypeDown ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk133.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Iterator Example Code ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hw9m9u6o.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Cloning an Iterator Object: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hur66hmi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Counting with NDS Iterators: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hgllfzfg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creating and Using a List Iterator: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hfnbz1tw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creating a Search Iterator and Displaying the Results: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hhe6xegc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Getting Iterator Information: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hfg59w8k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Getting and Setting the Iterator's Position: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hh03dp06.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Listing in Reverse Order: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hsj5zfs1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Positioning the Iterator with Typedown: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hqvieqdk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Skipping Objects in the List: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/ho81tg5d.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + if (currentLevel > 1) currentLevel-- + + reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-114491.js b/js/src/tests/js1_5/Regress/regress-114491.js new file mode 100644 index 000000000..1592b0b5d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-114491.js @@ -0,0 +1,72 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 December 2001 + * SUMMARY: Regression test for bug 114491 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=114491 + * + * Rhino crashed on this code. It should produce a syntax error, not a crash. + * Using the () operator after a function STATEMENT is incorrect syntax. + * Rhino correctly caught the error when there was no |if (true)|. + * With the |if (true)|, however, Rhino crashed - + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 114491; +var summary = 'Regression test for bug 114491'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = 'Program execution did NOT fall into catch-block'; +expect = 'Program execution fell into into catch-block'; +try +{ + var sEval = 'if (true) function f(){}()'; + eval(sEval); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-114493.js b/js/src/tests/js1_5/Regress/regress-114493.js new file mode 100644 index 000000000..03dd6fe93 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-114493.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 December 2001 + * SUMMARY: Regression test for bug 114493 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=114493 + * + * Rhino crashed on this code. It should produce a syntax error, not a crash. + * Note that "3"[5] === undefined, and Rhino correctly gave an error if you + * tried to use the call operator on |undefined|: + * + * js> undefined(); + * js: TypeError: undefined is not a function. + * + * However, Rhino CRASHED if you tried to do "3"[5](). + * + * Rhino would NOT crash if you tried "3"[0]() or "3"[5]. Only array indices + * that were out of bounds, followed by the call operator, would crash. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 114493; +var summary = 'Regression test for bug 114493'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var sEval = ''; + + +status = inSection(1); +actual = 'Program execution did NOT fall into catch-block'; +expect = 'Program execution fell into into catch-block'; +try +{ + sEval = '"3"[5]()'; + eval(sEval); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-115436.js b/js/src/tests/js1_5/Regress/regress-115436.js new file mode 100644 index 000000000..0949bc64e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-115436.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 115436; +var summary = 'Do not crash javascript warning duplicate arguments'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); + +function x(y,y) +{ + return 3; +} + +var z = x(4,5); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-116228.js b/js/src/tests/js1_5/Regress/regress-116228.js new file mode 100644 index 000000000..7556d4333 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-116228.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 116228; +var summary = 'Do not crash - JSOP_THIS should null obj register'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = {}; +obj.toString = function() {return this();} + try + { + obj.toString(); + } + catch(e) + { + } +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-118849.js b/js/src/tests/js1_5/Regress/regress-118849.js new file mode 100644 index 000000000..49901344d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-118849.js @@ -0,0 +1,152 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 Jan 2002 + * SUMMARY: Just testing that we don't crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=118849 + * + * http://developer.netscape.com:80/docs/manuals/js/core/jsref/function.htm + * The Function constructor: + * Function ([arg1[, arg2[, ... argN]],] functionBody) + * + * Parameters + * arg1, arg2, ... argN + * (Optional) Names to be used by the function as formal argument names. + * Each must be a string that corresponds to a valid JavaScript identifier. + * + * functionBody + * A string containing JS statements comprising the function definition. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 118849; +var summary = 'Should not crash if we provide Function() with bad arguments' + var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var cnFAIL_1 = 'LEGAL call to Function() caused an ERROR!!!'; +var cnFAIL_2 = 'ILLEGAL call to Function() FAILED to cause an error'; +var cnSTRING = 'ASDF'; +var cnNUMBER = 123; + + +/***********************************************************/ +/**** THESE ARE LEGITMATE CALLS AND SHOULD ALL SUCCEED ***/ +/***********************************************************/ +status = inSection(1); +actual = cnFAIL_1; // initialize to failure +try +{ + Function(cnSTRING); + Function(cnNUMBER); // cnNUMBER is a valid functionBody + Function(cnSTRING,cnSTRING); + Function(cnSTRING,cnNUMBER); + Function(cnSTRING,cnSTRING,cnNUMBER); + + new Function(cnSTRING); + new Function(cnNUMBER); + new Function(cnSTRING,cnSTRING); + new Function(cnSTRING,cnNUMBER); + new Function(cnSTRING,cnSTRING,cnNUMBER); + + actual = expect; +} +catch(e) +{ +} +addThis(); + + + +/**********************************************************/ +/*** EACH CASE THAT FOLLOWS SHOULD TRIGGER AN ERROR ***/ +/*** (BUT NOT A CRASH) ***/ +/*** NOTE WE NOW USE cnFAIL_2 INSTEAD OF cnFAIL_1 ***/ +/**********************************************************/ +status = inSection(2); +actual = cnFAIL_2; +try +{ + Function(cnNUMBER,cnNUMBER); // cnNUMBER is an invalid JS identifier name +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(3); +actual = cnFAIL_2; +try +{ + Function(cnNUMBER,cnSTRING,cnSTRING); +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(4); +actual = cnFAIL_2; +try +{ + new Function(cnNUMBER,cnNUMBER); +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(5); +actual = cnFAIL_2; +try +{ + new Function(cnNUMBER,cnSTRING,cnSTRING); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-119719.js b/js/src/tests/js1_5/Regress/regress-119719.js new file mode 100644 index 000000000..06a314d0c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-119719.js @@ -0,0 +1,26 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 119719; +var summary = 'Rethrown errors should have line number updated.'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var err = new Error('this error was created on line 46'); +try +{ + throw err; // rethrow on line 49 +} +catch(e) +{ + expect = 49; + actual = err.lineNumber; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-127243.js b/js/src/tests/js1_5/Regress/regress-127243.js new file mode 100644 index 000000000..11779f803 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-127243.js @@ -0,0 +1,75 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 127243; +var summary = 'Do not crash on watch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window != 'undefined' && typeof document != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + window.addEventListener('load', handleLoad, false); +} +else +{ + printStatus('This test must be run in the browser'); + reportCompare(expect, actual, summary); + +} + +var div; + +function handleLoad() +{ + div = document.createElement('div'); + document.body.appendChild(div); + div.setAttribute('id', 'id1'); + div.style.width = '50px'; + div.style.height = '100px'; + div.style.overflow = 'auto'; + + for (var i = 0; i < 5; i++) + { + var p = document.createElement('p'); + var t = document.createTextNode('blah'); + p.appendChild(t); + div.appendChild(p); + } + + div.watch('scrollTop', wee); + + setTimeout('setScrollTop()', 1000); +} + +function wee(id, oldval, newval) +{ + var t = document.createTextNode('setting ' + id + + ' value ' + div.scrollTop + + ' oldval ' + oldval + + ' newval ' + newval); + var p = document.createElement('p'); + p.appendChild(t); + document.body.appendChild(p); + + return newval; +} + +function setScrollTop() +{ + div.scrollTop = 42; + + reportCompare(expect, actual, summary); + + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + +} diff --git a/js/src/tests/js1_5/Regress/regress-127557.js b/js/src/tests/js1_5/Regress/regress-127557.js new file mode 100644 index 000000000..bea62ac71 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-127557.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 Mar 2002 + * SUMMARY: Testing cloned function objects + * See http://bugzilla.mozilla.org/show_bug.cgi?id=127557 + * + * Before this bug was fixed, this testcase would error when run: + * + * ReferenceError: h_peer is not defined + * + * The line |g.prototype = new Object| below is essential: this is + * what was confusing the engine in its attempt to look up h_peer + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 127557; +var summary = 'Testing cloned function objects'; +var cnCOMMA = ','; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +if (typeof clone == 'function') +{ + status = inSection(1); + var f = evaluate("(function(x, y) {\n" + + " function h() { return h_peer(); }\n" + + " function h_peer() { return (x + cnCOMMA + y); }\n" + + " return h;\n" + + "})"); + var g = clone(f); + g.prototype = new Object; + var h = g(5,6); + actual = h(); + expect = '5,6'; + addThis(); +} +else +{ + reportCompare('Test not run', 'Test not run', 'shell only test requires clone()'); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-131510-001.js b/js/src/tests/js1_5/Regress/regress-131510-001.js new file mode 100644 index 000000000..bf4d605b4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-131510-001.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 16 Mar 2002 + * SUMMARY: Shouldn't crash if define |var arguments| inside a function + * See http://bugzilla.mozilla.org/show_bug.cgi?id=131510 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 131510; +var summary = "Shouldn't crash if define |var arguments| inside a function"; +printBugNumber(BUGNUMBER); +printStatus(summary); + + +function f() {var arguments;} +f(); + + +/* + * Put same example in function scope instead of global scope + */ +function g() { function f() {var arguments;}; f();}; +g(); + + +/* + * Put these examples in eval scope + */ +var s = 'function f() {var arguments;}; f();'; +eval(s); + +s = 'function g() { function f() {var arguments;}; f();}; g();'; +eval(s); + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-139316.js b/js/src/tests/js1_5/Regress/regress-139316.js new file mode 100644 index 000000000..45cf177d3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-139316.js @@ -0,0 +1,46 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 139316; +var summary = 'Do not crash in js_ReportIsNotDefined()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; + +function makeError () +{ + try + { + foo(); + } + catch (e) + { + return e; + } +} + + +f = function () +{ + var e = makeError (function c(){}, function (){}, + {a: 1}, null, undefined, + Number.MAX_VALUE, 0, new Number(1), + "hello world", str, new String ("newstring"), + true, new Boolean(0), + new Date()); + printStatus (e.stack); +} + + f(); + + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-140852.js b/js/src/tests/js1_5/Regress/regress-140852.js new file mode 100644 index 000000000..13d83ce89 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-140852.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 140852; +var summary = 'String(number) = xxxx:0000 for some numbers'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var value; + +value = 99999999999; +expect = '99999999999'; +actual = value.toString(); +reportCompare(expect, actual, summary); + +value = 100000000000; +expect = '100000000000'; +actual = value.toString(); +reportCompare(expect, actual, summary); + +value = 426067200000; +expect = '426067200000'; +actual = value.toString(); +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-140974.js b/js/src/tests/js1_5/Regress/regress-140974.js new file mode 100644 index 000000000..9ef6dafc2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-140974.js @@ -0,0 +1,106 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 04 May 2002 + * SUMMARY: |if (false) {var x;} should create the variable x + * See http://bugzilla.mozilla.org/show_bug.cgi?id=140974 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 140974; +var TEST_PASSED = 'variable was created'; +var TEST_FAILED = 'variable was NOT created'; +var summary = '|if (false) {var x;}| should create the variable x'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// -------------- THESE TWO SECTIONS TEST THE VARIABLE X -------------- +status = inSection(1); +actual = TEST_PASSED; +try{ X;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + +var X; + +status = inSection(2); +actual = TEST_PASSED; +try{ X;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + + + +// -------------- THESE TWO SECTIONS TEST THE VARIABLE Y -------------- +status = inSection(3); +actual = TEST_PASSED; +try{ Y;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + +if (false) {var Y;}; + +status = inSection(4); +actual = TEST_PASSED; +try{ Y;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + + + +// -------------- THESE TWO SECTIONS TEST THE VARIABLE Z -------------- +status = inSection(5); +actual = TEST_PASSED; +try{ Z;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + +if (false) { for (var Z; false;){} } + +status = inSection(6); +actual = TEST_PASSED; +try{ Z;} catch(e) {actual = TEST_FAILED} +expect = TEST_PASSED; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-146596.js b/js/src/tests/js1_5/Regress/regress-146596.js new file mode 100644 index 000000000..a96b2d3b8 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-146596.js @@ -0,0 +1,124 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 18 Jun 2002 + * SUMMARY: Shouldn't crash when catch parameter is "hidden" by varX + * See http://bugzilla.mozilla.org/show_bug.cgi?id=146596 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 146596; +var summary = "Shouldn't crash when catch parameter is 'hidden' by varX"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Just seeing we don't crash when executing this function - + * This example provided by jim-patterson@ncf.ca + * + * Brendan: "Jim, thanks for the testcase. But note that |var| + * in a JS function makes a function-scoped variable -- JS lacks + * block scope apart from for catch variables within catch blocks. + * + * Therefore the catch variable hides the function-local variable." + */ +function F() +{ + try + { + return "A simple exception"; + } + catch(e) + { + var e = "Another exception"; + } + + return 'XYZ'; +} + +status = inSection(1); +actual = F(); +expect = "A simple exception"; +addThis(); + + + +/* + * Sanity check by Brendan: "This should output + * + * 24 + * 42 + * undefined + * + * and throw no uncaught exception." + * + */ +function f(obj) +{ + var res = []; + + try + { + throw 42; + } + catch(e) + { + with(obj) + { + var e; + res[0] = e; // |with| binds tighter than |catch|; s/b |obj.e| + } + + res[1] = e; // |catch| binds tighter than function scope; s/b 42 + } + + res[2] = e; // |var e| has function scope; s/b visible but contain |undefined| + return res; +} + +status = inSection(2); +actual = f({e:24}); +expect = [24, 42, undefined]; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual.toString(); + expectedvalues[UBound] = expect.toString(); + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-152646.js b/js/src/tests/js1_5/Regress/regress-152646.js new file mode 100644 index 000000000..c401e394b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-152646.js @@ -0,0 +1,93 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 July 2002 + * SUMMARY: Testing expressions with large numbers of parentheses + * See http://bugzilla.mozilla.org/show_bug.cgi?id=152646 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 152646; +var summary = 'Testing expressions with large numbers of parentheses'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Just seeing that we don't crash when compiling this assignment - + * + * We will form an eval string to set the result-variable |actual|. + * To get a feel for this, suppose N were 3. Then the eval string is + * 'actual = (((0)));' The expected value for this after eval() is 0. + */ +status = inSection(1); + +var sLeft = '(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((('; +sLeft += sLeft; +sLeft += sLeft; +sLeft += sLeft; +sLeft += sLeft; +sLeft += sLeft; + +var sRight = '))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'; +sRight += sRight; +sRight += sRight; +sRight += sRight; +sRight += sRight; +sRight += sRight; + +var sEval = 'actual = ' + sLeft + '0' + sRight; +try +{ + eval(sEval); +} +catch(e) +{ + /* + * An exception during this eval is OK, as the runtime can throw one + * in response to too deep recursion. We haven't crashed; good! + */ + actual = 0; +} +expect = 0; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-155081-2.js b/js/src/tests/js1_5/Regress/regress-155081-2.js new file mode 100644 index 000000000..b51eee272 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-155081-2.js @@ -0,0 +1,17520 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 155081; +var summary = 'Limit of 64k literals'; +var actual = 'No Crash'; +var expect = 'No Crash, No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f(A,B,C,D) {} + +f('1','2','3','4'); +f('5','6','7','8'); +f('9','10','11','12'); +f('13','14','15','16'); +f('17','18','19','20'); +f('21','22','23','24'); +f('25','26','27','28'); +f('29','30','31','32'); +f('33','34','35','36'); +f('37','38','39','40'); +f('41','42','43','44'); +f('45','46','47','48'); +f('49','50','51','52'); +f('53','54','55','56'); +f('57','58','59','60'); +f('61','62','63','64'); +f('65','66','67','68'); +f('69','70','71','72'); +f('73','74','75','76'); +f('77','78','79','80'); +f('81','82','83','84'); +f('85','86','87','88'); +f('89','90','91','92'); +f('93','94','95','96'); +f('97','98','99','100'); +f('101','102','103','104'); +f('105','106','107','108'); +f('109','110','111','112'); +f('113','114','115','116'); +f('117','118','119','120'); +f('121','122','123','124'); +f('125','126','127','128'); +f('129','130','131','132'); +f('133','134','135','136'); +f('137','138','139','140'); +f('141','142','143','144'); +f('145','146','147','148'); +f('149','150','151','152'); +f('153','154','155','156'); +f('157','158','159','160'); +f('161','162','163','164'); +f('165','166','167','168'); +f('169','170','171','172'); +f('173','174','175','176'); +f('177','178','179','180'); +f('181','182','183','184'); +f('185','186','187','188'); +f('189','190','191','192'); +f('193','194','195','196'); +f('197','198','199','200'); +f('201','202','203','204'); +f('205','206','207','208'); +f('209','210','211','212'); +f('213','214','215','216'); +f('217','218','219','220'); +f('221','222','223','224'); +f('225','226','227','228'); +f('229','230','231','232'); +f('233','234','235','236'); +f('237','238','239','240'); +f('241','242','243','244'); +f('245','246','247','248'); +f('249','250','251','252'); +f('253','254','255','256'); +f('257','258','259','260'); +f('261','262','263','264'); +f('265','266','267','268'); +f('269','270','271','272'); +f('273','274','275','276'); +f('277','278','279','280'); +f('281','282','283','284'); +f('285','286','287','288'); +f('289','290','291','292'); +f('293','294','295','296'); +f('297','298','299','300'); +f('301','302','303','304'); +f('305','306','307','308'); +f('309','310','311','312'); +f('313','314','315','316'); +f('317','318','319','320'); +f('321','322','323','324'); +f('325','326','327','328'); +f('329','330','331','332'); +f('333','334','335','336'); +f('337','338','339','340'); +f('341','342','343','344'); +f('345','346','347','348'); +f('349','350','351','352'); +f('353','354','355','356'); +f('357','358','359','360'); +f('361','362','363','364'); +f('365','366','367','368'); +f('369','370','371','372'); +f('373','374','375','376'); +f('377','378','379','380'); +f('381','382','383','384'); +f('385','386','387','388'); +f('389','390','391','392'); +f('393','394','395','396'); +f('397','398','399','400'); +f('401','402','403','404'); +f('405','406','407','408'); +f('409','410','411','412'); +f('413','414','415','416'); +f('417','418','419','420'); +f('421','422','423','424'); +f('425','426','427','428'); +f('429','430','431','432'); +f('433','434','435','436'); +f('437','438','439','440'); +f('441','442','443','444'); +f('445','446','447','448'); +f('449','450','451','452'); +f('453','454','455','456'); +f('457','458','459','460'); +f('461','462','463','464'); +f('465','466','467','468'); +f('469','470','471','472'); +f('473','474','475','476'); +f('477','478','479','480'); +f('481','482','483','484'); +f('485','486','487','488'); +f('489','490','491','492'); +f('493','494','495','496'); +f('497','498','499','500'); +f('501','502','503','504'); +f('505','506','507','508'); +f('509','510','511','512'); +f('513','514','515','516'); +f('517','518','519','520'); +f('521','522','523','524'); +f('525','526','527','528'); +f('529','530','531','532'); +f('533','534','535','536'); +f('537','538','539','540'); +f('541','542','543','544'); +f('545','546','547','548'); +f('549','550','551','552'); +f('553','554','555','556'); +f('557','558','559','560'); +f('561','562','563','564'); +f('565','566','567','568'); +f('569','570','571','572'); +f('573','574','575','576'); +f('577','578','579','580'); +f('581','582','583','584'); +f('585','586','587','588'); +f('589','590','591','592'); +f('593','594','595','596'); +f('597','598','599','600'); +f('601','602','603','604'); +f('605','606','607','608'); +f('609','610','611','612'); +f('613','614','615','616'); +f('617','618','619','620'); +f('621','622','623','624'); +f('625','626','627','628'); +f('629','630','631','632'); +f('633','634','635','636'); +f('637','638','639','640'); +f('641','642','643','644'); +f('645','646','647','648'); +f('649','650','651','652'); +f('653','654','655','656'); +f('657','658','659','660'); +f('661','662','663','664'); +f('665','666','667','668'); +f('669','670','671','672'); +f('673','674','675','676'); +f('677','678','679','680'); +f('681','682','683','684'); +f('685','686','687','688'); +f('689','690','691','692'); +f('693','694','695','696'); +f('697','698','699','700'); +f('701','702','703','704'); +f('705','706','707','708'); +f('709','710','711','712'); +f('713','714','715','716'); +f('717','718','719','720'); +f('721','722','723','724'); +f('725','726','727','728'); +f('729','730','731','732'); +f('733','734','735','736'); +f('737','738','739','740'); +f('741','742','743','744'); +f('745','746','747','748'); +f('749','750','751','752'); +f('753','754','755','756'); +f('757','758','759','760'); +f('761','762','763','764'); +f('765','766','767','768'); +f('769','770','771','772'); +f('773','774','775','776'); +f('777','778','779','780'); +f('781','782','783','784'); +f('785','786','787','788'); +f('789','790','791','792'); +f('793','794','795','796'); +f('797','798','799','800'); +f('801','802','803','804'); +f('805','806','807','808'); +f('809','810','811','812'); +f('813','814','815','816'); +f('817','818','819','820'); +f('821','822','823','824'); +f('825','826','827','828'); +f('829','830','831','832'); +f('833','834','835','836'); +f('837','838','839','840'); +f('841','842','843','844'); +f('845','846','847','848'); +f('849','850','851','852'); +f('853','854','855','856'); +f('857','858','859','860'); +f('861','862','863','864'); +f('865','866','867','868'); +f('869','870','871','872'); +f('873','874','875','876'); +f('877','878','879','880'); +f('881','882','883','884'); +f('885','886','887','888'); +f('889','890','891','892'); +f('893','894','895','896'); +f('897','898','899','900'); +f('901','902','903','904'); +f('905','906','907','908'); +f('909','910','911','912'); +f('913','914','915','916'); +f('917','918','919','920'); +f('921','922','923','924'); +f('925','926','927','928'); +f('929','930','931','932'); +f('933','934','935','936'); +f('937','938','939','940'); +f('941','942','943','944'); +f('945','946','947','948'); +f('949','950','951','952'); +f('953','954','955','956'); +f('957','958','959','960'); +f('961','962','963','964'); +f('965','966','967','968'); +f('969','970','971','972'); +f('973','974','975','976'); +f('977','978','979','980'); +f('981','982','983','984'); +f('985','986','987','988'); +f('989','990','991','992'); +f('993','994','995','996'); +f('997','998','999','1000'); +f('1001','1002','1003','1004'); +f('1005','1006','1007','1008'); +f('1009','1010','1011','1012'); +f('1013','1014','1015','1016'); +f('1017','1018','1019','1020'); +f('1021','1022','1023','1024'); +f('1025','1026','1027','1028'); +f('1029','1030','1031','1032'); +f('1033','1034','1035','1036'); +f('1037','1038','1039','1040'); +f('1041','1042','1043','1044'); +f('1045','1046','1047','1048'); +f('1049','1050','1051','1052'); +f('1053','1054','1055','1056'); +f('1057','1058','1059','1060'); +f('1061','1062','1063','1064'); +f('1065','1066','1067','1068'); +f('1069','1070','1071','1072'); +f('1073','1074','1075','1076'); +f('1077','1078','1079','1080'); +f('1081','1082','1083','1084'); +f('1085','1086','1087','1088'); +f('1089','1090','1091','1092'); +f('1093','1094','1095','1096'); +f('1097','1098','1099','1100'); +f('1101','1102','1103','1104'); +f('1105','1106','1107','1108'); +f('1109','1110','1111','1112'); +f('1113','1114','1115','1116'); +f('1117','1118','1119','1120'); +f('1121','1122','1123','1124'); +f('1125','1126','1127','1128'); +f('1129','1130','1131','1132'); +f('1133','1134','1135','1136'); +f('1137','1138','1139','1140'); +f('1141','1142','1143','1144'); +f('1145','1146','1147','1148'); +f('1149','1150','1151','1152'); +f('1153','1154','1155','1156'); +f('1157','1158','1159','1160'); +f('1161','1162','1163','1164'); +f('1165','1166','1167','1168'); +f('1169','1170','1171','1172'); +f('1173','1174','1175','1176'); +f('1177','1178','1179','1180'); +f('1181','1182','1183','1184'); +f('1185','1186','1187','1188'); +f('1189','1190','1191','1192'); +f('1193','1194','1195','1196'); +f('1197','1198','1199','1200'); +f('1201','1202','1203','1204'); +f('1205','1206','1207','1208'); +f('1209','1210','1211','1212'); +f('1213','1214','1215','1216'); +f('1217','1218','1219','1220'); +f('1221','1222','1223','1224'); +f('1225','1226','1227','1228'); +f('1229','1230','1231','1232'); +f('1233','1234','1235','1236'); +f('1237','1238','1239','1240'); +f('1241','1242','1243','1244'); +f('1245','1246','1247','1248'); +f('1249','1250','1251','1252'); +f('1253','1254','1255','1256'); +f('1257','1258','1259','1260'); +f('1261','1262','1263','1264'); +f('1265','1266','1267','1268'); +f('1269','1270','1271','1272'); +f('1273','1274','1275','1276'); +f('1277','1278','1279','1280'); +f('1281','1282','1283','1284'); +f('1285','1286','1287','1288'); +f('1289','1290','1291','1292'); +f('1293','1294','1295','1296'); +f('1297','1298','1299','1300'); +f('1301','1302','1303','1304'); +f('1305','1306','1307','1308'); +f('1309','1310','1311','1312'); +f('1313','1314','1315','1316'); +f('1317','1318','1319','1320'); +f('1321','1322','1323','1324'); +f('1325','1326','1327','1328'); +f('1329','1330','1331','1332'); +f('1333','1334','1335','1336'); +f('1337','1338','1339','1340'); +f('1341','1342','1343','1344'); +f('1345','1346','1347','1348'); +f('1349','1350','1351','1352'); +f('1353','1354','1355','1356'); +f('1357','1358','1359','1360'); +f('1361','1362','1363','1364'); +f('1365','1366','1367','1368'); +f('1369','1370','1371','1372'); +f('1373','1374','1375','1376'); +f('1377','1378','1379','1380'); +f('1381','1382','1383','1384'); +f('1385','1386','1387','1388'); +f('1389','1390','1391','1392'); +f('1393','1394','1395','1396'); +f('1397','1398','1399','1400'); +f('1401','1402','1403','1404'); +f('1405','1406','1407','1408'); +f('1409','1410','1411','1412'); +f('1413','1414','1415','1416'); +f('1417','1418','1419','1420'); +f('1421','1422','1423','1424'); +f('1425','1426','1427','1428'); +f('1429','1430','1431','1432'); +f('1433','1434','1435','1436'); +f('1437','1438','1439','1440'); +f('1441','1442','1443','1444'); +f('1445','1446','1447','1448'); +f('1449','1450','1451','1452'); +f('1453','1454','1455','1456'); +f('1457','1458','1459','1460'); +f('1461','1462','1463','1464'); +f('1465','1466','1467','1468'); +f('1469','1470','1471','1472'); +f('1473','1474','1475','1476'); +f('1477','1478','1479','1480'); +f('1481','1482','1483','1484'); +f('1485','1486','1487','1488'); +f('1489','1490','1491','1492'); +f('1493','1494','1495','1496'); +f('1497','1498','1499','1500'); +f('1501','1502','1503','1504'); +f('1505','1506','1507','1508'); +f('1509','1510','1511','1512'); +f('1513','1514','1515','1516'); +f('1517','1518','1519','1520'); +f('1521','1522','1523','1524'); +f('1525','1526','1527','1528'); +f('1529','1530','1531','1532'); +f('1533','1534','1535','1536'); +f('1537','1538','1539','1540'); +f('1541','1542','1543','1544'); +f('1545','1546','1547','1548'); +f('1549','1550','1551','1552'); +f('1553','1554','1555','1556'); +f('1557','1558','1559','1560'); +f('1561','1562','1563','1564'); +f('1565','1566','1567','1568'); +f('1569','1570','1571','1572'); +f('1573','1574','1575','1576'); +f('1577','1578','1579','1580'); +f('1581','1582','1583','1584'); +f('1585','1586','1587','1588'); +f('1589','1590','1591','1592'); +f('1593','1594','1595','1596'); +f('1597','1598','1599','1600'); +f('1601','1602','1603','1604'); +f('1605','1606','1607','1608'); +f('1609','1610','1611','1612'); +f('1613','1614','1615','1616'); +f('1617','1618','1619','1620'); +f('1621','1622','1623','1624'); +f('1625','1626','1627','1628'); +f('1629','1630','1631','1632'); +f('1633','1634','1635','1636'); +f('1637','1638','1639','1640'); +f('1641','1642','1643','1644'); +f('1645','1646','1647','1648'); +f('1649','1650','1651','1652'); +f('1653','1654','1655','1656'); +f('1657','1658','1659','1660'); +f('1661','1662','1663','1664'); +f('1665','1666','1667','1668'); +f('1669','1670','1671','1672'); +f('1673','1674','1675','1676'); +f('1677','1678','1679','1680'); +f('1681','1682','1683','1684'); +f('1685','1686','1687','1688'); +f('1689','1690','1691','1692'); +f('1693','1694','1695','1696'); +f('1697','1698','1699','1700'); +f('1701','1702','1703','1704'); +f('1705','1706','1707','1708'); +f('1709','1710','1711','1712'); +f('1713','1714','1715','1716'); +f('1717','1718','1719','1720'); +f('1721','1722','1723','1724'); +f('1725','1726','1727','1728'); +f('1729','1730','1731','1732'); +f('1733','1734','1735','1736'); +f('1737','1738','1739','1740'); +f('1741','1742','1743','1744'); +f('1745','1746','1747','1748'); +f('1749','1750','1751','1752'); +f('1753','1754','1755','1756'); +f('1757','1758','1759','1760'); +f('1761','1762','1763','1764'); +f('1765','1766','1767','1768'); +f('1769','1770','1771','1772'); +f('1773','1774','1775','1776'); +f('1777','1778','1779','1780'); +f('1781','1782','1783','1784'); +f('1785','1786','1787','1788'); +f('1789','1790','1791','1792'); +f('1793','1794','1795','1796'); +f('1797','1798','1799','1800'); +f('1801','1802','1803','1804'); +f('1805','1806','1807','1808'); +f('1809','1810','1811','1812'); +f('1813','1814','1815','1816'); +f('1817','1818','1819','1820'); +f('1821','1822','1823','1824'); +f('1825','1826','1827','1828'); +f('1829','1830','1831','1832'); +f('1833','1834','1835','1836'); +f('1837','1838','1839','1840'); +f('1841','1842','1843','1844'); +f('1845','1846','1847','1848'); +f('1849','1850','1851','1852'); +f('1853','1854','1855','1856'); +f('1857','1858','1859','1860'); +f('1861','1862','1863','1864'); +f('1865','1866','1867','1868'); +f('1869','1870','1871','1872'); +f('1873','1874','1875','1876'); +f('1877','1878','1879','1880'); +f('1881','1882','1883','1884'); +f('1885','1886','1887','1888'); +f('1889','1890','1891','1892'); +f('1893','1894','1895','1896'); +f('1897','1898','1899','1900'); +f('1901','1902','1903','1904'); +f('1905','1906','1907','1908'); +f('1909','1910','1911','1912'); +f('1913','1914','1915','1916'); +f('1917','1918','1919','1920'); +f('1921','1922','1923','1924'); +f('1925','1926','1927','1928'); +f('1929','1930','1931','1932'); +f('1933','1934','1935','1936'); +f('1937','1938','1939','1940'); +f('1941','1942','1943','1944'); +f('1945','1946','1947','1948'); +f('1949','1950','1951','1952'); +f('1953','1954','1955','1956'); +f('1957','1958','1959','1960'); +f('1961','1962','1963','1964'); +f('1965','1966','1967','1968'); +f('1969','1970','1971','1972'); +f('1973','1974','1975','1976'); +f('1977','1978','1979','1980'); +f('1981','1982','1983','1984'); +f('1985','1986','1987','1988'); +f('1989','1990','1991','1992'); +f('1993','1994','1995','1996'); +f('1997','1998','1999','2000'); +f('2001','2002','2003','2004'); +f('2005','2006','2007','2008'); +f('2009','2010','2011','2012'); +f('2013','2014','2015','2016'); +f('2017','2018','2019','2020'); +f('2021','2022','2023','2024'); +f('2025','2026','2027','2028'); +f('2029','2030','2031','2032'); +f('2033','2034','2035','2036'); +f('2037','2038','2039','2040'); +f('2041','2042','2043','2044'); +f('2045','2046','2047','2048'); +f('2049','2050','2051','2052'); +f('2053','2054','2055','2056'); +f('2057','2058','2059','2060'); +f('2061','2062','2063','2064'); +f('2065','2066','2067','2068'); +f('2069','2070','2071','2072'); +f('2073','2074','2075','2076'); +f('2077','2078','2079','2080'); +f('2081','2082','2083','2084'); +f('2085','2086','2087','2088'); +f('2089','2090','2091','2092'); +f('2093','2094','2095','2096'); +f('2097','2098','2099','2100'); +f('2101','2102','2103','2104'); +f('2105','2106','2107','2108'); +f('2109','2110','2111','2112'); +f('2113','2114','2115','2116'); +f('2117','2118','2119','2120'); +f('2121','2122','2123','2124'); +f('2125','2126','2127','2128'); +f('2129','2130','2131','2132'); +f('2133','2134','2135','2136'); +f('2137','2138','2139','2140'); +f('2141','2142','2143','2144'); +f('2145','2146','2147','2148'); +f('2149','2150','2151','2152'); +f('2153','2154','2155','2156'); +f('2157','2158','2159','2160'); +f('2161','2162','2163','2164'); +f('2165','2166','2167','2168'); +f('2169','2170','2171','2172'); +f('2173','2174','2175','2176'); +f('2177','2178','2179','2180'); +f('2181','2182','2183','2184'); +f('2185','2186','2187','2188'); +f('2189','2190','2191','2192'); +f('2193','2194','2195','2196'); +f('2197','2198','2199','2200'); +f('2201','2202','2203','2204'); +f('2205','2206','2207','2208'); +f('2209','2210','2211','2212'); +f('2213','2214','2215','2216'); +f('2217','2218','2219','2220'); +f('2221','2222','2223','2224'); +f('2225','2226','2227','2228'); +f('2229','2230','2231','2232'); +f('2233','2234','2235','2236'); +f('2237','2238','2239','2240'); +f('2241','2242','2243','2244'); +f('2245','2246','2247','2248'); +f('2249','2250','2251','2252'); +f('2253','2254','2255','2256'); +f('2257','2258','2259','2260'); +f('2261','2262','2263','2264'); +f('2265','2266','2267','2268'); +f('2269','2270','2271','2272'); +f('2273','2274','2275','2276'); +f('2277','2278','2279','2280'); +f('2281','2282','2283','2284'); +f('2285','2286','2287','2288'); +f('2289','2290','2291','2292'); +f('2293','2294','2295','2296'); +f('2297','2298','2299','2300'); +f('2301','2302','2303','2304'); +f('2305','2306','2307','2308'); +f('2309','2310','2311','2312'); +f('2313','2314','2315','2316'); +f('2317','2318','2319','2320'); +f('2321','2322','2323','2324'); +f('2325','2326','2327','2328'); +f('2329','2330','2331','2332'); +f('2333','2334','2335','2336'); +f('2337','2338','2339','2340'); +f('2341','2342','2343','2344'); +f('2345','2346','2347','2348'); +f('2349','2350','2351','2352'); +f('2353','2354','2355','2356'); +f('2357','2358','2359','2360'); +f('2361','2362','2363','2364'); +f('2365','2366','2367','2368'); +f('2369','2370','2371','2372'); +f('2373','2374','2375','2376'); +f('2377','2378','2379','2380'); +f('2381','2382','2383','2384'); +f('2385','2386','2387','2388'); +f('2389','2390','2391','2392'); +f('2393','2394','2395','2396'); +f('2397','2398','2399','2400'); +f('2401','2402','2403','2404'); +f('2405','2406','2407','2408'); +f('2409','2410','2411','2412'); +f('2413','2414','2415','2416'); +f('2417','2418','2419','2420'); +f('2421','2422','2423','2424'); +f('2425','2426','2427','2428'); +f('2429','2430','2431','2432'); +f('2433','2434','2435','2436'); +f('2437','2438','2439','2440'); +f('2441','2442','2443','2444'); +f('2445','2446','2447','2448'); +f('2449','2450','2451','2452'); +f('2453','2454','2455','2456'); +f('2457','2458','2459','2460'); +f('2461','2462','2463','2464'); +f('2465','2466','2467','2468'); +f('2469','2470','2471','2472'); +f('2473','2474','2475','2476'); +f('2477','2478','2479','2480'); +f('2481','2482','2483','2484'); +f('2485','2486','2487','2488'); +f('2489','2490','2491','2492'); +f('2493','2494','2495','2496'); +f('2497','2498','2499','2500'); +f('2501','2502','2503','2504'); +f('2505','2506','2507','2508'); +f('2509','2510','2511','2512'); +f('2513','2514','2515','2516'); +f('2517','2518','2519','2520'); +f('2521','2522','2523','2524'); +f('2525','2526','2527','2528'); +f('2529','2530','2531','2532'); +f('2533','2534','2535','2536'); +f('2537','2538','2539','2540'); +f('2541','2542','2543','2544'); +f('2545','2546','2547','2548'); +f('2549','2550','2551','2552'); +f('2553','2554','2555','2556'); +f('2557','2558','2559','2560'); +f('2561','2562','2563','2564'); +f('2565','2566','2567','2568'); +f('2569','2570','2571','2572'); +f('2573','2574','2575','2576'); +f('2577','2578','2579','2580'); +f('2581','2582','2583','2584'); +f('2585','2586','2587','2588'); +f('2589','2590','2591','2592'); +f('2593','2594','2595','2596'); +f('2597','2598','2599','2600'); +f('2601','2602','2603','2604'); +f('2605','2606','2607','2608'); +f('2609','2610','2611','2612'); +f('2613','2614','2615','2616'); +f('2617','2618','2619','2620'); +f('2621','2622','2623','2624'); +f('2625','2626','2627','2628'); +f('2629','2630','2631','2632'); +f('2633','2634','2635','2636'); +f('2637','2638','2639','2640'); +f('2641','2642','2643','2644'); +f('2645','2646','2647','2648'); +f('2649','2650','2651','2652'); +f('2653','2654','2655','2656'); +f('2657','2658','2659','2660'); +f('2661','2662','2663','2664'); +f('2665','2666','2667','2668'); +f('2669','2670','2671','2672'); +f('2673','2674','2675','2676'); +f('2677','2678','2679','2680'); +f('2681','2682','2683','2684'); +f('2685','2686','2687','2688'); +f('2689','2690','2691','2692'); +f('2693','2694','2695','2696'); +f('2697','2698','2699','2700'); +f('2701','2702','2703','2704'); +f('2705','2706','2707','2708'); +f('2709','2710','2711','2712'); +f('2713','2714','2715','2716'); +f('2717','2718','2719','2720'); +f('2721','2722','2723','2724'); +f('2725','2726','2727','2728'); +f('2729','2730','2731','2732'); +f('2733','2734','2735','2736'); +f('2737','2738','2739','2740'); +f('2741','2742','2743','2744'); +f('2745','2746','2747','2748'); +f('2749','2750','2751','2752'); +f('2753','2754','2755','2756'); +f('2757','2758','2759','2760'); +f('2761','2762','2763','2764'); +f('2765','2766','2767','2768'); +f('2769','2770','2771','2772'); +f('2773','2774','2775','2776'); +f('2777','2778','2779','2780'); +f('2781','2782','2783','2784'); +f('2785','2786','2787','2788'); +f('2789','2790','2791','2792'); +f('2793','2794','2795','2796'); +f('2797','2798','2799','2800'); +f('2801','2802','2803','2804'); +f('2805','2806','2807','2808'); +f('2809','2810','2811','2812'); +f('2813','2814','2815','2816'); +f('2817','2818','2819','2820'); +f('2821','2822','2823','2824'); +f('2825','2826','2827','2828'); +f('2829','2830','2831','2832'); +f('2833','2834','2835','2836'); +f('2837','2838','2839','2840'); +f('2841','2842','2843','2844'); +f('2845','2846','2847','2848'); +f('2849','2850','2851','2852'); +f('2853','2854','2855','2856'); +f('2857','2858','2859','2860'); +f('2861','2862','2863','2864'); +f('2865','2866','2867','2868'); +f('2869','2870','2871','2872'); +f('2873','2874','2875','2876'); +f('2877','2878','2879','2880'); +f('2881','2882','2883','2884'); +f('2885','2886','2887','2888'); +f('2889','2890','2891','2892'); +f('2893','2894','2895','2896'); +f('2897','2898','2899','2900'); +f('2901','2902','2903','2904'); +f('2905','2906','2907','2908'); +f('2909','2910','2911','2912'); +f('2913','2914','2915','2916'); +f('2917','2918','2919','2920'); +f('2921','2922','2923','2924'); +f('2925','2926','2927','2928'); +f('2929','2930','2931','2932'); +f('2933','2934','2935','2936'); +f('2937','2938','2939','2940'); +f('2941','2942','2943','2944'); +f('2945','2946','2947','2948'); +f('2949','2950','2951','2952'); +f('2953','2954','2955','2956'); +f('2957','2958','2959','2960'); +f('2961','2962','2963','2964'); +f('2965','2966','2967','2968'); +f('2969','2970','2971','2972'); +f('2973','2974','2975','2976'); +f('2977','2978','2979','2980'); +f('2981','2982','2983','2984'); +f('2985','2986','2987','2988'); +f('2989','2990','2991','2992'); +f('2993','2994','2995','2996'); +f('2997','2998','2999','3000'); +f('3001','3002','3003','3004'); +f('3005','3006','3007','3008'); +f('3009','3010','3011','3012'); +f('3013','3014','3015','3016'); +f('3017','3018','3019','3020'); +f('3021','3022','3023','3024'); +f('3025','3026','3027','3028'); +f('3029','3030','3031','3032'); +f('3033','3034','3035','3036'); +f('3037','3038','3039','3040'); +f('3041','3042','3043','3044'); +f('3045','3046','3047','3048'); +f('3049','3050','3051','3052'); +f('3053','3054','3055','3056'); +f('3057','3058','3059','3060'); +f('3061','3062','3063','3064'); +f('3065','3066','3067','3068'); +f('3069','3070','3071','3072'); +f('3073','3074','3075','3076'); +f('3077','3078','3079','3080'); +f('3081','3082','3083','3084'); +f('3085','3086','3087','3088'); +f('3089','3090','3091','3092'); +f('3093','3094','3095','3096'); +f('3097','3098','3099','3100'); +f('3101','3102','3103','3104'); +f('3105','3106','3107','3108'); +f('3109','3110','3111','3112'); +f('3113','3114','3115','3116'); +f('3117','3118','3119','3120'); +f('3121','3122','3123','3124'); +f('3125','3126','3127','3128'); +f('3129','3130','3131','3132'); +f('3133','3134','3135','3136'); +f('3137','3138','3139','3140'); +f('3141','3142','3143','3144'); +f('3145','3146','3147','3148'); +f('3149','3150','3151','3152'); +f('3153','3154','3155','3156'); +f('3157','3158','3159','3160'); +f('3161','3162','3163','3164'); +f('3165','3166','3167','3168'); +f('3169','3170','3171','3172'); +f('3173','3174','3175','3176'); +f('3177','3178','3179','3180'); +f('3181','3182','3183','3184'); +f('3185','3186','3187','3188'); +f('3189','3190','3191','3192'); +f('3193','3194','3195','3196'); +f('3197','3198','3199','3200'); +f('3201','3202','3203','3204'); +f('3205','3206','3207','3208'); +f('3209','3210','3211','3212'); +f('3213','3214','3215','3216'); +f('3217','3218','3219','3220'); +f('3221','3222','3223','3224'); +f('3225','3226','3227','3228'); +f('3229','3230','3231','3232'); +f('3233','3234','3235','3236'); +f('3237','3238','3239','3240'); +f('3241','3242','3243','3244'); +f('3245','3246','3247','3248'); +f('3249','3250','3251','3252'); +f('3253','3254','3255','3256'); +f('3257','3258','3259','3260'); +f('3261','3262','3263','3264'); +f('3265','3266','3267','3268'); +f('3269','3270','3271','3272'); +f('3273','3274','3275','3276'); +f('3277','3278','3279','3280'); +f('3281','3282','3283','3284'); +f('3285','3286','3287','3288'); +f('3289','3290','3291','3292'); +f('3293','3294','3295','3296'); +f('3297','3298','3299','3300'); +f('3301','3302','3303','3304'); +f('3305','3306','3307','3308'); +f('3309','3310','3311','3312'); +f('3313','3314','3315','3316'); +f('3317','3318','3319','3320'); +f('3321','3322','3323','3324'); +f('3325','3326','3327','3328'); +f('3329','3330','3331','3332'); +f('3333','3334','3335','3336'); +f('3337','3338','3339','3340'); +f('3341','3342','3343','3344'); +f('3345','3346','3347','3348'); +f('3349','3350','3351','3352'); +f('3353','3354','3355','3356'); +f('3357','3358','3359','3360'); +f('3361','3362','3363','3364'); +f('3365','3366','3367','3368'); +f('3369','3370','3371','3372'); +f('3373','3374','3375','3376'); +f('3377','3378','3379','3380'); +f('3381','3382','3383','3384'); +f('3385','3386','3387','3388'); +f('3389','3390','3391','3392'); +f('3393','3394','3395','3396'); +f('3397','3398','3399','3400'); +f('3401','3402','3403','3404'); +f('3405','3406','3407','3408'); +f('3409','3410','3411','3412'); +f('3413','3414','3415','3416'); +f('3417','3418','3419','3420'); +f('3421','3422','3423','3424'); +f('3425','3426','3427','3428'); +f('3429','3430','3431','3432'); +f('3433','3434','3435','3436'); +f('3437','3438','3439','3440'); +f('3441','3442','3443','3444'); +f('3445','3446','3447','3448'); +f('3449','3450','3451','3452'); +f('3453','3454','3455','3456'); +f('3457','3458','3459','3460'); +f('3461','3462','3463','3464'); +f('3465','3466','3467','3468'); +f('3469','3470','3471','3472'); +f('3473','3474','3475','3476'); +f('3477','3478','3479','3480'); +f('3481','3482','3483','3484'); +f('3485','3486','3487','3488'); +f('3489','3490','3491','3492'); +f('3493','3494','3495','3496'); +f('3497','3498','3499','3500'); +f('3501','3502','3503','3504'); +f('3505','3506','3507','3508'); +f('3509','3510','3511','3512'); +f('3513','3514','3515','3516'); +f('3517','3518','3519','3520'); +f('3521','3522','3523','3524'); +f('3525','3526','3527','3528'); +f('3529','3530','3531','3532'); +f('3533','3534','3535','3536'); +f('3537','3538','3539','3540'); +f('3541','3542','3543','3544'); +f('3545','3546','3547','3548'); +f('3549','3550','3551','3552'); +f('3553','3554','3555','3556'); +f('3557','3558','3559','3560'); +f('3561','3562','3563','3564'); +f('3565','3566','3567','3568'); +f('3569','3570','3571','3572'); +f('3573','3574','3575','3576'); +f('3577','3578','3579','3580'); +f('3581','3582','3583','3584'); +f('3585','3586','3587','3588'); +f('3589','3590','3591','3592'); +f('3593','3594','3595','3596'); +f('3597','3598','3599','3600'); +f('3601','3602','3603','3604'); +f('3605','3606','3607','3608'); +f('3609','3610','3611','3612'); +f('3613','3614','3615','3616'); +f('3617','3618','3619','3620'); +f('3621','3622','3623','3624'); +f('3625','3626','3627','3628'); +f('3629','3630','3631','3632'); +f('3633','3634','3635','3636'); +f('3637','3638','3639','3640'); +f('3641','3642','3643','3644'); +f('3645','3646','3647','3648'); +f('3649','3650','3651','3652'); +f('3653','3654','3655','3656'); +f('3657','3658','3659','3660'); +f('3661','3662','3663','3664'); +f('3665','3666','3667','3668'); +f('3669','3670','3671','3672'); +f('3673','3674','3675','3676'); +f('3677','3678','3679','3680'); +f('3681','3682','3683','3684'); +f('3685','3686','3687','3688'); +f('3689','3690','3691','3692'); +f('3693','3694','3695','3696'); +f('3697','3698','3699','3700'); +f('3701','3702','3703','3704'); +f('3705','3706','3707','3708'); +f('3709','3710','3711','3712'); +f('3713','3714','3715','3716'); +f('3717','3718','3719','3720'); +f('3721','3722','3723','3724'); +f('3725','3726','3727','3728'); +f('3729','3730','3731','3732'); +f('3733','3734','3735','3736'); +f('3737','3738','3739','3740'); +f('3741','3742','3743','3744'); +f('3745','3746','3747','3748'); +f('3749','3750','3751','3752'); +f('3753','3754','3755','3756'); +f('3757','3758','3759','3760'); +f('3761','3762','3763','3764'); +f('3765','3766','3767','3768'); +f('3769','3770','3771','3772'); +f('3773','3774','3775','3776'); +f('3777','3778','3779','3780'); +f('3781','3782','3783','3784'); +f('3785','3786','3787','3788'); +f('3789','3790','3791','3792'); +f('3793','3794','3795','3796'); +f('3797','3798','3799','3800'); +f('3801','3802','3803','3804'); +f('3805','3806','3807','3808'); +f('3809','3810','3811','3812'); +f('3813','3814','3815','3816'); +f('3817','3818','3819','3820'); +f('3821','3822','3823','3824'); +f('3825','3826','3827','3828'); +f('3829','3830','3831','3832'); +f('3833','3834','3835','3836'); +f('3837','3838','3839','3840'); +f('3841','3842','3843','3844'); +f('3845','3846','3847','3848'); +f('3849','3850','3851','3852'); +f('3853','3854','3855','3856'); +f('3857','3858','3859','3860'); +f('3861','3862','3863','3864'); +f('3865','3866','3867','3868'); +f('3869','3870','3871','3872'); +f('3873','3874','3875','3876'); +f('3877','3878','3879','3880'); +f('3881','3882','3883','3884'); +f('3885','3886','3887','3888'); +f('3889','3890','3891','3892'); +f('3893','3894','3895','3896'); +f('3897','3898','3899','3900'); +f('3901','3902','3903','3904'); +f('3905','3906','3907','3908'); +f('3909','3910','3911','3912'); +f('3913','3914','3915','3916'); +f('3917','3918','3919','3920'); +f('3921','3922','3923','3924'); +f('3925','3926','3927','3928'); +f('3929','3930','3931','3932'); +f('3933','3934','3935','3936'); +f('3937','3938','3939','3940'); +f('3941','3942','3943','3944'); +f('3945','3946','3947','3948'); +f('3949','3950','3951','3952'); +f('3953','3954','3955','3956'); +f('3957','3958','3959','3960'); +f('3961','3962','3963','3964'); +f('3965','3966','3967','3968'); +f('3969','3970','3971','3972'); +f('3973','3974','3975','3976'); +f('3977','3978','3979','3980'); +f('3981','3982','3983','3984'); +f('3985','3986','3987','3988'); +f('3989','3990','3991','3992'); +f('3993','3994','3995','3996'); +f('3997','3998','3999','4000'); +f('4001','4002','4003','4004'); +f('4005','4006','4007','4008'); +f('4009','4010','4011','4012'); +f('4013','4014','4015','4016'); +f('4017','4018','4019','4020'); +f('4021','4022','4023','4024'); +f('4025','4026','4027','4028'); +f('4029','4030','4031','4032'); +f('4033','4034','4035','4036'); +f('4037','4038','4039','4040'); +f('4041','4042','4043','4044'); +f('4045','4046','4047','4048'); +f('4049','4050','4051','4052'); +f('4053','4054','4055','4056'); +f('4057','4058','4059','4060'); +f('4061','4062','4063','4064'); +f('4065','4066','4067','4068'); +f('4069','4070','4071','4072'); +f('4073','4074','4075','4076'); +f('4077','4078','4079','4080'); +f('4081','4082','4083','4084'); +f('4085','4086','4087','4088'); +f('4089','4090','4091','4092'); +f('4093','4094','4095','4096'); +f('4097','4098','4099','4100'); +f('4101','4102','4103','4104'); +f('4105','4106','4107','4108'); +f('4109','4110','4111','4112'); +f('4113','4114','4115','4116'); +f('4117','4118','4119','4120'); +f('4121','4122','4123','4124'); +f('4125','4126','4127','4128'); +f('4129','4130','4131','4132'); +f('4133','4134','4135','4136'); +f('4137','4138','4139','4140'); +f('4141','4142','4143','4144'); +f('4145','4146','4147','4148'); +f('4149','4150','4151','4152'); +f('4153','4154','4155','4156'); +f('4157','4158','4159','4160'); +f('4161','4162','4163','4164'); +f('4165','4166','4167','4168'); +f('4169','4170','4171','4172'); +f('4173','4174','4175','4176'); +f('4177','4178','4179','4180'); +f('4181','4182','4183','4184'); +f('4185','4186','4187','4188'); +f('4189','4190','4191','4192'); +f('4193','4194','4195','4196'); +f('4197','4198','4199','4200'); +f('4201','4202','4203','4204'); +f('4205','4206','4207','4208'); +f('4209','4210','4211','4212'); +f('4213','4214','4215','4216'); +f('4217','4218','4219','4220'); +f('4221','4222','4223','4224'); +f('4225','4226','4227','4228'); +f('4229','4230','4231','4232'); +f('4233','4234','4235','4236'); +f('4237','4238','4239','4240'); +f('4241','4242','4243','4244'); +f('4245','4246','4247','4248'); +f('4249','4250','4251','4252'); +f('4253','4254','4255','4256'); +f('4257','4258','4259','4260'); +f('4261','4262','4263','4264'); +f('4265','4266','4267','4268'); +f('4269','4270','4271','4272'); +f('4273','4274','4275','4276'); +f('4277','4278','4279','4280'); +f('4281','4282','4283','4284'); +f('4285','4286','4287','4288'); +f('4289','4290','4291','4292'); +f('4293','4294','4295','4296'); +f('4297','4298','4299','4300'); +f('4301','4302','4303','4304'); +f('4305','4306','4307','4308'); +f('4309','4310','4311','4312'); +f('4313','4314','4315','4316'); +f('4317','4318','4319','4320'); +f('4321','4322','4323','4324'); +f('4325','4326','4327','4328'); +f('4329','4330','4331','4332'); +f('4333','4334','4335','4336'); +f('4337','4338','4339','4340'); +f('4341','4342','4343','4344'); +f('4345','4346','4347','4348'); +f('4349','4350','4351','4352'); +f('4353','4354','4355','4356'); +f('4357','4358','4359','4360'); +f('4361','4362','4363','4364'); +f('4365','4366','4367','4368'); +f('4369','4370','4371','4372'); +f('4373','4374','4375','4376'); +f('4377','4378','4379','4380'); +f('4381','4382','4383','4384'); +f('4385','4386','4387','4388'); +f('4389','4390','4391','4392'); +f('4393','4394','4395','4396'); +f('4397','4398','4399','4400'); +f('4401','4402','4403','4404'); +f('4405','4406','4407','4408'); +f('4409','4410','4411','4412'); +f('4413','4414','4415','4416'); +f('4417','4418','4419','4420'); +f('4421','4422','4423','4424'); +f('4425','4426','4427','4428'); +f('4429','4430','4431','4432'); +f('4433','4434','4435','4436'); +f('4437','4438','4439','4440'); +f('4441','4442','4443','4444'); +f('4445','4446','4447','4448'); +f('4449','4450','4451','4452'); +f('4453','4454','4455','4456'); +f('4457','4458','4459','4460'); +f('4461','4462','4463','4464'); +f('4465','4466','4467','4468'); +f('4469','4470','4471','4472'); +f('4473','4474','4475','4476'); +f('4477','4478','4479','4480'); +f('4481','4482','4483','4484'); +f('4485','4486','4487','4488'); +f('4489','4490','4491','4492'); +f('4493','4494','4495','4496'); +f('4497','4498','4499','4500'); +f('4501','4502','4503','4504'); +f('4505','4506','4507','4508'); +f('4509','4510','4511','4512'); +f('4513','4514','4515','4516'); +f('4517','4518','4519','4520'); +f('4521','4522','4523','4524'); +f('4525','4526','4527','4528'); +f('4529','4530','4531','4532'); +f('4533','4534','4535','4536'); +f('4537','4538','4539','4540'); +f('4541','4542','4543','4544'); +f('4545','4546','4547','4548'); +f('4549','4550','4551','4552'); +f('4553','4554','4555','4556'); +f('4557','4558','4559','4560'); +f('4561','4562','4563','4564'); +f('4565','4566','4567','4568'); +f('4569','4570','4571','4572'); +f('4573','4574','4575','4576'); +f('4577','4578','4579','4580'); +f('4581','4582','4583','4584'); +f('4585','4586','4587','4588'); +f('4589','4590','4591','4592'); +f('4593','4594','4595','4596'); +f('4597','4598','4599','4600'); +f('4601','4602','4603','4604'); +f('4605','4606','4607','4608'); +f('4609','4610','4611','4612'); +f('4613','4614','4615','4616'); +f('4617','4618','4619','4620'); +f('4621','4622','4623','4624'); +f('4625','4626','4627','4628'); +f('4629','4630','4631','4632'); +f('4633','4634','4635','4636'); +f('4637','4638','4639','4640'); +f('4641','4642','4643','4644'); +f('4645','4646','4647','4648'); +f('4649','4650','4651','4652'); +f('4653','4654','4655','4656'); +f('4657','4658','4659','4660'); +f('4661','4662','4663','4664'); +f('4665','4666','4667','4668'); +f('4669','4670','4671','4672'); +f('4673','4674','4675','4676'); +f('4677','4678','4679','4680'); +f('4681','4682','4683','4684'); +f('4685','4686','4687','4688'); +f('4689','4690','4691','4692'); +f('4693','4694','4695','4696'); +f('4697','4698','4699','4700'); +f('4701','4702','4703','4704'); +f('4705','4706','4707','4708'); +f('4709','4710','4711','4712'); +f('4713','4714','4715','4716'); +f('4717','4718','4719','4720'); +f('4721','4722','4723','4724'); +f('4725','4726','4727','4728'); +f('4729','4730','4731','4732'); +f('4733','4734','4735','4736'); +f('4737','4738','4739','4740'); +f('4741','4742','4743','4744'); +f('4745','4746','4747','4748'); +f('4749','4750','4751','4752'); +f('4753','4754','4755','4756'); +f('4757','4758','4759','4760'); +f('4761','4762','4763','4764'); +f('4765','4766','4767','4768'); +f('4769','4770','4771','4772'); +f('4773','4774','4775','4776'); +f('4777','4778','4779','4780'); +f('4781','4782','4783','4784'); +f('4785','4786','4787','4788'); +f('4789','4790','4791','4792'); +f('4793','4794','4795','4796'); +f('4797','4798','4799','4800'); +f('4801','4802','4803','4804'); +f('4805','4806','4807','4808'); +f('4809','4810','4811','4812'); +f('4813','4814','4815','4816'); +f('4817','4818','4819','4820'); +f('4821','4822','4823','4824'); +f('4825','4826','4827','4828'); +f('4829','4830','4831','4832'); +f('4833','4834','4835','4836'); +f('4837','4838','4839','4840'); +f('4841','4842','4843','4844'); +f('4845','4846','4847','4848'); +f('4849','4850','4851','4852'); +f('4853','4854','4855','4856'); +f('4857','4858','4859','4860'); +f('4861','4862','4863','4864'); +f('4865','4866','4867','4868'); +f('4869','4870','4871','4872'); +f('4873','4874','4875','4876'); +f('4877','4878','4879','4880'); +f('4881','4882','4883','4884'); +f('4885','4886','4887','4888'); +f('4889','4890','4891','4892'); +f('4893','4894','4895','4896'); +f('4897','4898','4899','4900'); +f('4901','4902','4903','4904'); +f('4905','4906','4907','4908'); +f('4909','4910','4911','4912'); +f('4913','4914','4915','4916'); +f('4917','4918','4919','4920'); +f('4921','4922','4923','4924'); +f('4925','4926','4927','4928'); +f('4929','4930','4931','4932'); +f('4933','4934','4935','4936'); +f('4937','4938','4939','4940'); +f('4941','4942','4943','4944'); +f('4945','4946','4947','4948'); +f('4949','4950','4951','4952'); +f('4953','4954','4955','4956'); +f('4957','4958','4959','4960'); +f('4961','4962','4963','4964'); +f('4965','4966','4967','4968'); +f('4969','4970','4971','4972'); +f('4973','4974','4975','4976'); +f('4977','4978','4979','4980'); +f('4981','4982','4983','4984'); +f('4985','4986','4987','4988'); +f('4989','4990','4991','4992'); +f('4993','4994','4995','4996'); +f('4997','4998','4999','5000'); +f('5001','5002','5003','5004'); +f('5005','5006','5007','5008'); +f('5009','5010','5011','5012'); +f('5013','5014','5015','5016'); +f('5017','5018','5019','5020'); +f('5021','5022','5023','5024'); +f('5025','5026','5027','5028'); +f('5029','5030','5031','5032'); +f('5033','5034','5035','5036'); +f('5037','5038','5039','5040'); +f('5041','5042','5043','5044'); +f('5045','5046','5047','5048'); +f('5049','5050','5051','5052'); +f('5053','5054','5055','5056'); +f('5057','5058','5059','5060'); +f('5061','5062','5063','5064'); +f('5065','5066','5067','5068'); +f('5069','5070','5071','5072'); +f('5073','5074','5075','5076'); +f('5077','5078','5079','5080'); +f('5081','5082','5083','5084'); +f('5085','5086','5087','5088'); +f('5089','5090','5091','5092'); +f('5093','5094','5095','5096'); +f('5097','5098','5099','5100'); +f('5101','5102','5103','5104'); +f('5105','5106','5107','5108'); +f('5109','5110','5111','5112'); +f('5113','5114','5115','5116'); +f('5117','5118','5119','5120'); +f('5121','5122','5123','5124'); +f('5125','5126','5127','5128'); +f('5129','5130','5131','5132'); +f('5133','5134','5135','5136'); +f('5137','5138','5139','5140'); +f('5141','5142','5143','5144'); +f('5145','5146','5147','5148'); +f('5149','5150','5151','5152'); +f('5153','5154','5155','5156'); +f('5157','5158','5159','5160'); +f('5161','5162','5163','5164'); +f('5165','5166','5167','5168'); +f('5169','5170','5171','5172'); +f('5173','5174','5175','5176'); +f('5177','5178','5179','5180'); +f('5181','5182','5183','5184'); +f('5185','5186','5187','5188'); +f('5189','5190','5191','5192'); +f('5193','5194','5195','5196'); +f('5197','5198','5199','5200'); +f('5201','5202','5203','5204'); +f('5205','5206','5207','5208'); +f('5209','5210','5211','5212'); +f('5213','5214','5215','5216'); +f('5217','5218','5219','5220'); +f('5221','5222','5223','5224'); +f('5225','5226','5227','5228'); +f('5229','5230','5231','5232'); +f('5233','5234','5235','5236'); +f('5237','5238','5239','5240'); +f('5241','5242','5243','5244'); +f('5245','5246','5247','5248'); +f('5249','5250','5251','5252'); +f('5253','5254','5255','5256'); +f('5257','5258','5259','5260'); +f('5261','5262','5263','5264'); +f('5265','5266','5267','5268'); +f('5269','5270','5271','5272'); +f('5273','5274','5275','5276'); +f('5277','5278','5279','5280'); +f('5281','5282','5283','5284'); +f('5285','5286','5287','5288'); +f('5289','5290','5291','5292'); +f('5293','5294','5295','5296'); +f('5297','5298','5299','5300'); +f('5301','5302','5303','5304'); +f('5305','5306','5307','5308'); +f('5309','5310','5311','5312'); +f('5313','5314','5315','5316'); +f('5317','5318','5319','5320'); +f('5321','5322','5323','5324'); +f('5325','5326','5327','5328'); +f('5329','5330','5331','5332'); +f('5333','5334','5335','5336'); +f('5337','5338','5339','5340'); +f('5341','5342','5343','5344'); +f('5345','5346','5347','5348'); +f('5349','5350','5351','5352'); +f('5353','5354','5355','5356'); +f('5357','5358','5359','5360'); +f('5361','5362','5363','5364'); +f('5365','5366','5367','5368'); +f('5369','5370','5371','5372'); +f('5373','5374','5375','5376'); +f('5377','5378','5379','5380'); +f('5381','5382','5383','5384'); +f('5385','5386','5387','5388'); +f('5389','5390','5391','5392'); +f('5393','5394','5395','5396'); +f('5397','5398','5399','5400'); +f('5401','5402','5403','5404'); +f('5405','5406','5407','5408'); +f('5409','5410','5411','5412'); +f('5413','5414','5415','5416'); +f('5417','5418','5419','5420'); +f('5421','5422','5423','5424'); +f('5425','5426','5427','5428'); +f('5429','5430','5431','5432'); +f('5433','5434','5435','5436'); +f('5437','5438','5439','5440'); +f('5441','5442','5443','5444'); +f('5445','5446','5447','5448'); +f('5449','5450','5451','5452'); +f('5453','5454','5455','5456'); +f('5457','5458','5459','5460'); +f('5461','5462','5463','5464'); +f('5465','5466','5467','5468'); +f('5469','5470','5471','5472'); +f('5473','5474','5475','5476'); +f('5477','5478','5479','5480'); +f('5481','5482','5483','5484'); +f('5485','5486','5487','5488'); +f('5489','5490','5491','5492'); +f('5493','5494','5495','5496'); +f('5497','5498','5499','5500'); +f('5501','5502','5503','5504'); +f('5505','5506','5507','5508'); +f('5509','5510','5511','5512'); +f('5513','5514','5515','5516'); +f('5517','5518','5519','5520'); +f('5521','5522','5523','5524'); +f('5525','5526','5527','5528'); +f('5529','5530','5531','5532'); +f('5533','5534','5535','5536'); +f('5537','5538','5539','5540'); +f('5541','5542','5543','5544'); +f('5545','5546','5547','5548'); +f('5549','5550','5551','5552'); +f('5553','5554','5555','5556'); +f('5557','5558','5559','5560'); +f('5561','5562','5563','5564'); +f('5565','5566','5567','5568'); +f('5569','5570','5571','5572'); +f('5573','5574','5575','5576'); +f('5577','5578','5579','5580'); +f('5581','5582','5583','5584'); +f('5585','5586','5587','5588'); +f('5589','5590','5591','5592'); +f('5593','5594','5595','5596'); +f('5597','5598','5599','5600'); +f('5601','5602','5603','5604'); +f('5605','5606','5607','5608'); +f('5609','5610','5611','5612'); +f('5613','5614','5615','5616'); +f('5617','5618','5619','5620'); +f('5621','5622','5623','5624'); +f('5625','5626','5627','5628'); +f('5629','5630','5631','5632'); +f('5633','5634','5635','5636'); +f('5637','5638','5639','5640'); +f('5641','5642','5643','5644'); +f('5645','5646','5647','5648'); +f('5649','5650','5651','5652'); +f('5653','5654','5655','5656'); +f('5657','5658','5659','5660'); +f('5661','5662','5663','5664'); +f('5665','5666','5667','5668'); +f('5669','5670','5671','5672'); +f('5673','5674','5675','5676'); +f('5677','5678','5679','5680'); +f('5681','5682','5683','5684'); +f('5685','5686','5687','5688'); +f('5689','5690','5691','5692'); +f('5693','5694','5695','5696'); +f('5697','5698','5699','5700'); +f('5701','5702','5703','5704'); +f('5705','5706','5707','5708'); +f('5709','5710','5711','5712'); +f('5713','5714','5715','5716'); +f('5717','5718','5719','5720'); +f('5721','5722','5723','5724'); +f('5725','5726','5727','5728'); +f('5729','5730','5731','5732'); +f('5733','5734','5735','5736'); +f('5737','5738','5739','5740'); +f('5741','5742','5743','5744'); +f('5745','5746','5747','5748'); +f('5749','5750','5751','5752'); +f('5753','5754','5755','5756'); +f('5757','5758','5759','5760'); +f('5761','5762','5763','5764'); +f('5765','5766','5767','5768'); +f('5769','5770','5771','5772'); +f('5773','5774','5775','5776'); +f('5777','5778','5779','5780'); +f('5781','5782','5783','5784'); +f('5785','5786','5787','5788'); +f('5789','5790','5791','5792'); +f('5793','5794','5795','5796'); +f('5797','5798','5799','5800'); +f('5801','5802','5803','5804'); +f('5805','5806','5807','5808'); +f('5809','5810','5811','5812'); +f('5813','5814','5815','5816'); +f('5817','5818','5819','5820'); +f('5821','5822','5823','5824'); +f('5825','5826','5827','5828'); +f('5829','5830','5831','5832'); +f('5833','5834','5835','5836'); +f('5837','5838','5839','5840'); +f('5841','5842','5843','5844'); +f('5845','5846','5847','5848'); +f('5849','5850','5851','5852'); +f('5853','5854','5855','5856'); +f('5857','5858','5859','5860'); +f('5861','5862','5863','5864'); +f('5865','5866','5867','5868'); +f('5869','5870','5871','5872'); +f('5873','5874','5875','5876'); +f('5877','5878','5879','5880'); +f('5881','5882','5883','5884'); +f('5885','5886','5887','5888'); +f('5889','5890','5891','5892'); +f('5893','5894','5895','5896'); +f('5897','5898','5899','5900'); +f('5901','5902','5903','5904'); +f('5905','5906','5907','5908'); +f('5909','5910','5911','5912'); +f('5913','5914','5915','5916'); +f('5917','5918','5919','5920'); +f('5921','5922','5923','5924'); +f('5925','5926','5927','5928'); +f('5929','5930','5931','5932'); +f('5933','5934','5935','5936'); +f('5937','5938','5939','5940'); +f('5941','5942','5943','5944'); +f('5945','5946','5947','5948'); +f('5949','5950','5951','5952'); +f('5953','5954','5955','5956'); +f('5957','5958','5959','5960'); +f('5961','5962','5963','5964'); +f('5965','5966','5967','5968'); +f('5969','5970','5971','5972'); +f('5973','5974','5975','5976'); +f('5977','5978','5979','5980'); +f('5981','5982','5983','5984'); +f('5985','5986','5987','5988'); +f('5989','5990','5991','5992'); +f('5993','5994','5995','5996'); +f('5997','5998','5999','6000'); +f('6001','6002','6003','6004'); +f('6005','6006','6007','6008'); +f('6009','6010','6011','6012'); +f('6013','6014','6015','6016'); +f('6017','6018','6019','6020'); +f('6021','6022','6023','6024'); +f('6025','6026','6027','6028'); +f('6029','6030','6031','6032'); +f('6033','6034','6035','6036'); +f('6037','6038','6039','6040'); +f('6041','6042','6043','6044'); +f('6045','6046','6047','6048'); +f('6049','6050','6051','6052'); +f('6053','6054','6055','6056'); +f('6057','6058','6059','6060'); +f('6061','6062','6063','6064'); +f('6065','6066','6067','6068'); +f('6069','6070','6071','6072'); +f('6073','6074','6075','6076'); +f('6077','6078','6079','6080'); +f('6081','6082','6083','6084'); +f('6085','6086','6087','6088'); +f('6089','6090','6091','6092'); +f('6093','6094','6095','6096'); +f('6097','6098','6099','6100'); +f('6101','6102','6103','6104'); +f('6105','6106','6107','6108'); +f('6109','6110','6111','6112'); +f('6113','6114','6115','6116'); +f('6117','6118','6119','6120'); +f('6121','6122','6123','6124'); +f('6125','6126','6127','6128'); +f('6129','6130','6131','6132'); +f('6133','6134','6135','6136'); +f('6137','6138','6139','6140'); +f('6141','6142','6143','6144'); +f('6145','6146','6147','6148'); +f('6149','6150','6151','6152'); +f('6153','6154','6155','6156'); +f('6157','6158','6159','6160'); +f('6161','6162','6163','6164'); +f('6165','6166','6167','6168'); +f('6169','6170','6171','6172'); +f('6173','6174','6175','6176'); +f('6177','6178','6179','6180'); +f('6181','6182','6183','6184'); +f('6185','6186','6187','6188'); +f('6189','6190','6191','6192'); +f('6193','6194','6195','6196'); +f('6197','6198','6199','6200'); +f('6201','6202','6203','6204'); +f('6205','6206','6207','6208'); +f('6209','6210','6211','6212'); +f('6213','6214','6215','6216'); +f('6217','6218','6219','6220'); +f('6221','6222','6223','6224'); +f('6225','6226','6227','6228'); +f('6229','6230','6231','6232'); +f('6233','6234','6235','6236'); +f('6237','6238','6239','6240'); +f('6241','6242','6243','6244'); +f('6245','6246','6247','6248'); +f('6249','6250','6251','6252'); +f('6253','6254','6255','6256'); +f('6257','6258','6259','6260'); +f('6261','6262','6263','6264'); +f('6265','6266','6267','6268'); +f('6269','6270','6271','6272'); +f('6273','6274','6275','6276'); +f('6277','6278','6279','6280'); +f('6281','6282','6283','6284'); +f('6285','6286','6287','6288'); +f('6289','6290','6291','6292'); +f('6293','6294','6295','6296'); +f('6297','6298','6299','6300'); +f('6301','6302','6303','6304'); +f('6305','6306','6307','6308'); +f('6309','6310','6311','6312'); +f('6313','6314','6315','6316'); +f('6317','6318','6319','6320'); +f('6321','6322','6323','6324'); +f('6325','6326','6327','6328'); +f('6329','6330','6331','6332'); +f('6333','6334','6335','6336'); +f('6337','6338','6339','6340'); +f('6341','6342','6343','6344'); +f('6345','6346','6347','6348'); +f('6349','6350','6351','6352'); +f('6353','6354','6355','6356'); +f('6357','6358','6359','6360'); +f('6361','6362','6363','6364'); +f('6365','6366','6367','6368'); +f('6369','6370','6371','6372'); +f('6373','6374','6375','6376'); +f('6377','6378','6379','6380'); +f('6381','6382','6383','6384'); +f('6385','6386','6387','6388'); +f('6389','6390','6391','6392'); +f('6393','6394','6395','6396'); +f('6397','6398','6399','6400'); +f('6401','6402','6403','6404'); +f('6405','6406','6407','6408'); +f('6409','6410','6411','6412'); +f('6413','6414','6415','6416'); +f('6417','6418','6419','6420'); +f('6421','6422','6423','6424'); +f('6425','6426','6427','6428'); +f('6429','6430','6431','6432'); +f('6433','6434','6435','6436'); +f('6437','6438','6439','6440'); +f('6441','6442','6443','6444'); +f('6445','6446','6447','6448'); +f('6449','6450','6451','6452'); +f('6453','6454','6455','6456'); +f('6457','6458','6459','6460'); +f('6461','6462','6463','6464'); +f('6465','6466','6467','6468'); +f('6469','6470','6471','6472'); +f('6473','6474','6475','6476'); +f('6477','6478','6479','6480'); +f('6481','6482','6483','6484'); +f('6485','6486','6487','6488'); +f('6489','6490','6491','6492'); +f('6493','6494','6495','6496'); +f('6497','6498','6499','6500'); +f('6501','6502','6503','6504'); +f('6505','6506','6507','6508'); +f('6509','6510','6511','6512'); +f('6513','6514','6515','6516'); +f('6517','6518','6519','6520'); +f('6521','6522','6523','6524'); +f('6525','6526','6527','6528'); +f('6529','6530','6531','6532'); +f('6533','6534','6535','6536'); +f('6537','6538','6539','6540'); +f('6541','6542','6543','6544'); +f('6545','6546','6547','6548'); +f('6549','6550','6551','6552'); +f('6553','6554','6555','6556'); +f('6557','6558','6559','6560'); +f('6561','6562','6563','6564'); +f('6565','6566','6567','6568'); +f('6569','6570','6571','6572'); +f('6573','6574','6575','6576'); +f('6577','6578','6579','6580'); +f('6581','6582','6583','6584'); +f('6585','6586','6587','6588'); +f('6589','6590','6591','6592'); +f('6593','6594','6595','6596'); +f('6597','6598','6599','6600'); +f('6601','6602','6603','6604'); +f('6605','6606','6607','6608'); +f('6609','6610','6611','6612'); +f('6613','6614','6615','6616'); +f('6617','6618','6619','6620'); +f('6621','6622','6623','6624'); +f('6625','6626','6627','6628'); +f('6629','6630','6631','6632'); +f('6633','6634','6635','6636'); +f('6637','6638','6639','6640'); +f('6641','6642','6643','6644'); +f('6645','6646','6647','6648'); +f('6649','6650','6651','6652'); +f('6653','6654','6655','6656'); +f('6657','6658','6659','6660'); +f('6661','6662','6663','6664'); +f('6665','6666','6667','6668'); +f('6669','6670','6671','6672'); +f('6673','6674','6675','6676'); +f('6677','6678','6679','6680'); +f('6681','6682','6683','6684'); +f('6685','6686','6687','6688'); +f('6689','6690','6691','6692'); +f('6693','6694','6695','6696'); +f('6697','6698','6699','6700'); +f('6701','6702','6703','6704'); +f('6705','6706','6707','6708'); +f('6709','6710','6711','6712'); +f('6713','6714','6715','6716'); +f('6717','6718','6719','6720'); +f('6721','6722','6723','6724'); +f('6725','6726','6727','6728'); +f('6729','6730','6731','6732'); +f('6733','6734','6735','6736'); +f('6737','6738','6739','6740'); +f('6741','6742','6743','6744'); +f('6745','6746','6747','6748'); +f('6749','6750','6751','6752'); +f('6753','6754','6755','6756'); +f('6757','6758','6759','6760'); +f('6761','6762','6763','6764'); +f('6765','6766','6767','6768'); +f('6769','6770','6771','6772'); +f('6773','6774','6775','6776'); +f('6777','6778','6779','6780'); +f('6781','6782','6783','6784'); +f('6785','6786','6787','6788'); +f('6789','6790','6791','6792'); +f('6793','6794','6795','6796'); +f('6797','6798','6799','6800'); +f('6801','6802','6803','6804'); +f('6805','6806','6807','6808'); +f('6809','6810','6811','6812'); +f('6813','6814','6815','6816'); +f('6817','6818','6819','6820'); +f('6821','6822','6823','6824'); +f('6825','6826','6827','6828'); +f('6829','6830','6831','6832'); +f('6833','6834','6835','6836'); +f('6837','6838','6839','6840'); +f('6841','6842','6843','6844'); +f('6845','6846','6847','6848'); +f('6849','6850','6851','6852'); +f('6853','6854','6855','6856'); +f('6857','6858','6859','6860'); +f('6861','6862','6863','6864'); +f('6865','6866','6867','6868'); +f('6869','6870','6871','6872'); +f('6873','6874','6875','6876'); +f('6877','6878','6879','6880'); +f('6881','6882','6883','6884'); +f('6885','6886','6887','6888'); +f('6889','6890','6891','6892'); +f('6893','6894','6895','6896'); +f('6897','6898','6899','6900'); +f('6901','6902','6903','6904'); +f('6905','6906','6907','6908'); +f('6909','6910','6911','6912'); +f('6913','6914','6915','6916'); +f('6917','6918','6919','6920'); +f('6921','6922','6923','6924'); +f('6925','6926','6927','6928'); +f('6929','6930','6931','6932'); +f('6933','6934','6935','6936'); +f('6937','6938','6939','6940'); +f('6941','6942','6943','6944'); +f('6945','6946','6947','6948'); +f('6949','6950','6951','6952'); +f('6953','6954','6955','6956'); +f('6957','6958','6959','6960'); +f('6961','6962','6963','6964'); +f('6965','6966','6967','6968'); +f('6969','6970','6971','6972'); +f('6973','6974','6975','6976'); +f('6977','6978','6979','6980'); +f('6981','6982','6983','6984'); +f('6985','6986','6987','6988'); +f('6989','6990','6991','6992'); +f('6993','6994','6995','6996'); +f('6997','6998','6999','7000'); +f('7001','7002','7003','7004'); +f('7005','7006','7007','7008'); +f('7009','7010','7011','7012'); +f('7013','7014','7015','7016'); +f('7017','7018','7019','7020'); +f('7021','7022','7023','7024'); +f('7025','7026','7027','7028'); +f('7029','7030','7031','7032'); +f('7033','7034','7035','7036'); +f('7037','7038','7039','7040'); +f('7041','7042','7043','7044'); +f('7045','7046','7047','7048'); +f('7049','7050','7051','7052'); +f('7053','7054','7055','7056'); +f('7057','7058','7059','7060'); +f('7061','7062','7063','7064'); +f('7065','7066','7067','7068'); +f('7069','7070','7071','7072'); +f('7073','7074','7075','7076'); +f('7077','7078','7079','7080'); +f('7081','7082','7083','7084'); +f('7085','7086','7087','7088'); +f('7089','7090','7091','7092'); +f('7093','7094','7095','7096'); +f('7097','7098','7099','7100'); +f('7101','7102','7103','7104'); +f('7105','7106','7107','7108'); +f('7109','7110','7111','7112'); +f('7113','7114','7115','7116'); +f('7117','7118','7119','7120'); +f('7121','7122','7123','7124'); +f('7125','7126','7127','7128'); +f('7129','7130','7131','7132'); +f('7133','7134','7135','7136'); +f('7137','7138','7139','7140'); +f('7141','7142','7143','7144'); +f('7145','7146','7147','7148'); +f('7149','7150','7151','7152'); +f('7153','7154','7155','7156'); +f('7157','7158','7159','7160'); +f('7161','7162','7163','7164'); +f('7165','7166','7167','7168'); +f('7169','7170','7171','7172'); +f('7173','7174','7175','7176'); +f('7177','7178','7179','7180'); +f('7181','7182','7183','7184'); +f('7185','7186','7187','7188'); +f('7189','7190','7191','7192'); +f('7193','7194','7195','7196'); +f('7197','7198','7199','7200'); +f('7201','7202','7203','7204'); +f('7205','7206','7207','7208'); +f('7209','7210','7211','7212'); +f('7213','7214','7215','7216'); +f('7217','7218','7219','7220'); +f('7221','7222','7223','7224'); +f('7225','7226','7227','7228'); +f('7229','7230','7231','7232'); +f('7233','7234','7235','7236'); +f('7237','7238','7239','7240'); +f('7241','7242','7243','7244'); +f('7245','7246','7247','7248'); +f('7249','7250','7251','7252'); +f('7253','7254','7255','7256'); +f('7257','7258','7259','7260'); +f('7261','7262','7263','7264'); +f('7265','7266','7267','7268'); +f('7269','7270','7271','7272'); +f('7273','7274','7275','7276'); +f('7277','7278','7279','7280'); +f('7281','7282','7283','7284'); +f('7285','7286','7287','7288'); +f('7289','7290','7291','7292'); +f('7293','7294','7295','7296'); +f('7297','7298','7299','7300'); +f('7301','7302','7303','7304'); +f('7305','7306','7307','7308'); +f('7309','7310','7311','7312'); +f('7313','7314','7315','7316'); +f('7317','7318','7319','7320'); +f('7321','7322','7323','7324'); +f('7325','7326','7327','7328'); +f('7329','7330','7331','7332'); +f('7333','7334','7335','7336'); +f('7337','7338','7339','7340'); +f('7341','7342','7343','7344'); +f('7345','7346','7347','7348'); +f('7349','7350','7351','7352'); +f('7353','7354','7355','7356'); +f('7357','7358','7359','7360'); +f('7361','7362','7363','7364'); +f('7365','7366','7367','7368'); +f('7369','7370','7371','7372'); +f('7373','7374','7375','7376'); +f('7377','7378','7379','7380'); +f('7381','7382','7383','7384'); +f('7385','7386','7387','7388'); +f('7389','7390','7391','7392'); +f('7393','7394','7395','7396'); +f('7397','7398','7399','7400'); +f('7401','7402','7403','7404'); +f('7405','7406','7407','7408'); +f('7409','7410','7411','7412'); +f('7413','7414','7415','7416'); +f('7417','7418','7419','7420'); +f('7421','7422','7423','7424'); +f('7425','7426','7427','7428'); +f('7429','7430','7431','7432'); +f('7433','7434','7435','7436'); +f('7437','7438','7439','7440'); +f('7441','7442','7443','7444'); +f('7445','7446','7447','7448'); +f('7449','7450','7451','7452'); +f('7453','7454','7455','7456'); +f('7457','7458','7459','7460'); +f('7461','7462','7463','7464'); +f('7465','7466','7467','7468'); +f('7469','7470','7471','7472'); +f('7473','7474','7475','7476'); +f('7477','7478','7479','7480'); +f('7481','7482','7483','7484'); +f('7485','7486','7487','7488'); +f('7489','7490','7491','7492'); +f('7493','7494','7495','7496'); +f('7497','7498','7499','7500'); +f('7501','7502','7503','7504'); +f('7505','7506','7507','7508'); +f('7509','7510','7511','7512'); +f('7513','7514','7515','7516'); +f('7517','7518','7519','7520'); +f('7521','7522','7523','7524'); +f('7525','7526','7527','7528'); +f('7529','7530','7531','7532'); +f('7533','7534','7535','7536'); +f('7537','7538','7539','7540'); +f('7541','7542','7543','7544'); +f('7545','7546','7547','7548'); +f('7549','7550','7551','7552'); +f('7553','7554','7555','7556'); +f('7557','7558','7559','7560'); +f('7561','7562','7563','7564'); +f('7565','7566','7567','7568'); +f('7569','7570','7571','7572'); +f('7573','7574','7575','7576'); +f('7577','7578','7579','7580'); +f('7581','7582','7583','7584'); +f('7585','7586','7587','7588'); +f('7589','7590','7591','7592'); +f('7593','7594','7595','7596'); +f('7597','7598','7599','7600'); +f('7601','7602','7603','7604'); +f('7605','7606','7607','7608'); +f('7609','7610','7611','7612'); +f('7613','7614','7615','7616'); +f('7617','7618','7619','7620'); +f('7621','7622','7623','7624'); +f('7625','7626','7627','7628'); +f('7629','7630','7631','7632'); +f('7633','7634','7635','7636'); +f('7637','7638','7639','7640'); +f('7641','7642','7643','7644'); +f('7645','7646','7647','7648'); +f('7649','7650','7651','7652'); +f('7653','7654','7655','7656'); +f('7657','7658','7659','7660'); +f('7661','7662','7663','7664'); +f('7665','7666','7667','7668'); +f('7669','7670','7671','7672'); +f('7673','7674','7675','7676'); +f('7677','7678','7679','7680'); +f('7681','7682','7683','7684'); +f('7685','7686','7687','7688'); +f('7689','7690','7691','7692'); +f('7693','7694','7695','7696'); +f('7697','7698','7699','7700'); +f('7701','7702','7703','7704'); +f('7705','7706','7707','7708'); +f('7709','7710','7711','7712'); +f('7713','7714','7715','7716'); +f('7717','7718','7719','7720'); +f('7721','7722','7723','7724'); +f('7725','7726','7727','7728'); +f('7729','7730','7731','7732'); +f('7733','7734','7735','7736'); +f('7737','7738','7739','7740'); +f('7741','7742','7743','7744'); +f('7745','7746','7747','7748'); +f('7749','7750','7751','7752'); +f('7753','7754','7755','7756'); +f('7757','7758','7759','7760'); +f('7761','7762','7763','7764'); +f('7765','7766','7767','7768'); +f('7769','7770','7771','7772'); +f('7773','7774','7775','7776'); +f('7777','7778','7779','7780'); +f('7781','7782','7783','7784'); +f('7785','7786','7787','7788'); +f('7789','7790','7791','7792'); +f('7793','7794','7795','7796'); +f('7797','7798','7799','7800'); +f('7801','7802','7803','7804'); +f('7805','7806','7807','7808'); +f('7809','7810','7811','7812'); +f('7813','7814','7815','7816'); +f('7817','7818','7819','7820'); +f('7821','7822','7823','7824'); +f('7825','7826','7827','7828'); +f('7829','7830','7831','7832'); +f('7833','7834','7835','7836'); +f('7837','7838','7839','7840'); +f('7841','7842','7843','7844'); +f('7845','7846','7847','7848'); +f('7849','7850','7851','7852'); +f('7853','7854','7855','7856'); +f('7857','7858','7859','7860'); +f('7861','7862','7863','7864'); +f('7865','7866','7867','7868'); +f('7869','7870','7871','7872'); +f('7873','7874','7875','7876'); +f('7877','7878','7879','7880'); +f('7881','7882','7883','7884'); +f('7885','7886','7887','7888'); +f('7889','7890','7891','7892'); +f('7893','7894','7895','7896'); +f('7897','7898','7899','7900'); +f('7901','7902','7903','7904'); +f('7905','7906','7907','7908'); +f('7909','7910','7911','7912'); +f('7913','7914','7915','7916'); +f('7917','7918','7919','7920'); +f('7921','7922','7923','7924'); +f('7925','7926','7927','7928'); +f('7929','7930','7931','7932'); +f('7933','7934','7935','7936'); +f('7937','7938','7939','7940'); +f('7941','7942','7943','7944'); +f('7945','7946','7947','7948'); +f('7949','7950','7951','7952'); +f('7953','7954','7955','7956'); +f('7957','7958','7959','7960'); +f('7961','7962','7963','7964'); +f('7965','7966','7967','7968'); +f('7969','7970','7971','7972'); +f('7973','7974','7975','7976'); +f('7977','7978','7979','7980'); +f('7981','7982','7983','7984'); +f('7985','7986','7987','7988'); +f('7989','7990','7991','7992'); +f('7993','7994','7995','7996'); +f('7997','7998','7999','8000'); +f('8001','8002','8003','8004'); +f('8005','8006','8007','8008'); +f('8009','8010','8011','8012'); +f('8013','8014','8015','8016'); +f('8017','8018','8019','8020'); +f('8021','8022','8023','8024'); +f('8025','8026','8027','8028'); +f('8029','8030','8031','8032'); +f('8033','8034','8035','8036'); +f('8037','8038','8039','8040'); +f('8041','8042','8043','8044'); +f('8045','8046','8047','8048'); +f('8049','8050','8051','8052'); +f('8053','8054','8055','8056'); +f('8057','8058','8059','8060'); +f('8061','8062','8063','8064'); +f('8065','8066','8067','8068'); +f('8069','8070','8071','8072'); +f('8073','8074','8075','8076'); +f('8077','8078','8079','8080'); +f('8081','8082','8083','8084'); +f('8085','8086','8087','8088'); +f('8089','8090','8091','8092'); +f('8093','8094','8095','8096'); +f('8097','8098','8099','8100'); +f('8101','8102','8103','8104'); +f('8105','8106','8107','8108'); +f('8109','8110','8111','8112'); +f('8113','8114','8115','8116'); +f('8117','8118','8119','8120'); +f('8121','8122','8123','8124'); +f('8125','8126','8127','8128'); +f('8129','8130','8131','8132'); +f('8133','8134','8135','8136'); +f('8137','8138','8139','8140'); +f('8141','8142','8143','8144'); +f('8145','8146','8147','8148'); +f('8149','8150','8151','8152'); +f('8153','8154','8155','8156'); +f('8157','8158','8159','8160'); +f('8161','8162','8163','8164'); +f('8165','8166','8167','8168'); +f('8169','8170','8171','8172'); +f('8173','8174','8175','8176'); +f('8177','8178','8179','8180'); +f('8181','8182','8183','8184'); +f('8185','8186','8187','8188'); +f('8189','8190','8191','8192'); +f('8193','8194','8195','8196'); +f('8197','8198','8199','8200'); +f('8201','8202','8203','8204'); +f('8205','8206','8207','8208'); +f('8209','8210','8211','8212'); +f('8213','8214','8215','8216'); +f('8217','8218','8219','8220'); +f('8221','8222','8223','8224'); +f('8225','8226','8227','8228'); +f('8229','8230','8231','8232'); +f('8233','8234','8235','8236'); +f('8237','8238','8239','8240'); +f('8241','8242','8243','8244'); +f('8245','8246','8247','8248'); +f('8249','8250','8251','8252'); +f('8253','8254','8255','8256'); +f('8257','8258','8259','8260'); +f('8261','8262','8263','8264'); +f('8265','8266','8267','8268'); +f('8269','8270','8271','8272'); +f('8273','8274','8275','8276'); +f('8277','8278','8279','8280'); +f('8281','8282','8283','8284'); +f('8285','8286','8287','8288'); +f('8289','8290','8291','8292'); +f('8293','8294','8295','8296'); +f('8297','8298','8299','8300'); +f('8301','8302','8303','8304'); +f('8305','8306','8307','8308'); +f('8309','8310','8311','8312'); +f('8313','8314','8315','8316'); +f('8317','8318','8319','8320'); +f('8321','8322','8323','8324'); +f('8325','8326','8327','8328'); +f('8329','8330','8331','8332'); +f('8333','8334','8335','8336'); +f('8337','8338','8339','8340'); +f('8341','8342','8343','8344'); +f('8345','8346','8347','8348'); +f('8349','8350','8351','8352'); +f('8353','8354','8355','8356'); +f('8357','8358','8359','8360'); +f('8361','8362','8363','8364'); +f('8365','8366','8367','8368'); +f('8369','8370','8371','8372'); +f('8373','8374','8375','8376'); +f('8377','8378','8379','8380'); +f('8381','8382','8383','8384'); +f('8385','8386','8387','8388'); +f('8389','8390','8391','8392'); +f('8393','8394','8395','8396'); +f('8397','8398','8399','8400'); +f('8401','8402','8403','8404'); +f('8405','8406','8407','8408'); +f('8409','8410','8411','8412'); +f('8413','8414','8415','8416'); +f('8417','8418','8419','8420'); +f('8421','8422','8423','8424'); +f('8425','8426','8427','8428'); +f('8429','8430','8431','8432'); +f('8433','8434','8435','8436'); +f('8437','8438','8439','8440'); +f('8441','8442','8443','8444'); +f('8445','8446','8447','8448'); +f('8449','8450','8451','8452'); +f('8453','8454','8455','8456'); +f('8457','8458','8459','8460'); +f('8461','8462','8463','8464'); +f('8465','8466','8467','8468'); +f('8469','8470','8471','8472'); +f('8473','8474','8475','8476'); +f('8477','8478','8479','8480'); +f('8481','8482','8483','8484'); +f('8485','8486','8487','8488'); +f('8489','8490','8491','8492'); +f('8493','8494','8495','8496'); +f('8497','8498','8499','8500'); +f('8501','8502','8503','8504'); +f('8505','8506','8507','8508'); +f('8509','8510','8511','8512'); +f('8513','8514','8515','8516'); +f('8517','8518','8519','8520'); +f('8521','8522','8523','8524'); +f('8525','8526','8527','8528'); +f('8529','8530','8531','8532'); +f('8533','8534','8535','8536'); +f('8537','8538','8539','8540'); +f('8541','8542','8543','8544'); +f('8545','8546','8547','8548'); +f('8549','8550','8551','8552'); +f('8553','8554','8555','8556'); +f('8557','8558','8559','8560'); +f('8561','8562','8563','8564'); +f('8565','8566','8567','8568'); +f('8569','8570','8571','8572'); +f('8573','8574','8575','8576'); +f('8577','8578','8579','8580'); +f('8581','8582','8583','8584'); +f('8585','8586','8587','8588'); +f('8589','8590','8591','8592'); +f('8593','8594','8595','8596'); +f('8597','8598','8599','8600'); +f('8601','8602','8603','8604'); +f('8605','8606','8607','8608'); +f('8609','8610','8611','8612'); +f('8613','8614','8615','8616'); +f('8617','8618','8619','8620'); +f('8621','8622','8623','8624'); +f('8625','8626','8627','8628'); +f('8629','8630','8631','8632'); +f('8633','8634','8635','8636'); +f('8637','8638','8639','8640'); +f('8641','8642','8643','8644'); +f('8645','8646','8647','8648'); +f('8649','8650','8651','8652'); +f('8653','8654','8655','8656'); +f('8657','8658','8659','8660'); +f('8661','8662','8663','8664'); +f('8665','8666','8667','8668'); +f('8669','8670','8671','8672'); +f('8673','8674','8675','8676'); +f('8677','8678','8679','8680'); +f('8681','8682','8683','8684'); +f('8685','8686','8687','8688'); +f('8689','8690','8691','8692'); +f('8693','8694','8695','8696'); +f('8697','8698','8699','8700'); +f('8701','8702','8703','8704'); +f('8705','8706','8707','8708'); +f('8709','8710','8711','8712'); +f('8713','8714','8715','8716'); +f('8717','8718','8719','8720'); +f('8721','8722','8723','8724'); +f('8725','8726','8727','8728'); +f('8729','8730','8731','8732'); +f('8733','8734','8735','8736'); +f('8737','8738','8739','8740'); +f('8741','8742','8743','8744'); +f('8745','8746','8747','8748'); +f('8749','8750','8751','8752'); +f('8753','8754','8755','8756'); +f('8757','8758','8759','8760'); +f('8761','8762','8763','8764'); +f('8765','8766','8767','8768'); +f('8769','8770','8771','8772'); +f('8773','8774','8775','8776'); +f('8777','8778','8779','8780'); +f('8781','8782','8783','8784'); +f('8785','8786','8787','8788'); +f('8789','8790','8791','8792'); +f('8793','8794','8795','8796'); +f('8797','8798','8799','8800'); +f('8801','8802','8803','8804'); +f('8805','8806','8807','8808'); +f('8809','8810','8811','8812'); +f('8813','8814','8815','8816'); +f('8817','8818','8819','8820'); +f('8821','8822','8823','8824'); +f('8825','8826','8827','8828'); +f('8829','8830','8831','8832'); +f('8833','8834','8835','8836'); +f('8837','8838','8839','8840'); +f('8841','8842','8843','8844'); +f('8845','8846','8847','8848'); +f('8849','8850','8851','8852'); +f('8853','8854','8855','8856'); +f('8857','8858','8859','8860'); +f('8861','8862','8863','8864'); +f('8865','8866','8867','8868'); +f('8869','8870','8871','8872'); +f('8873','8874','8875','8876'); +f('8877','8878','8879','8880'); +f('8881','8882','8883','8884'); +f('8885','8886','8887','8888'); +f('8889','8890','8891','8892'); +f('8893','8894','8895','8896'); +f('8897','8898','8899','8900'); +f('8901','8902','8903','8904'); +f('8905','8906','8907','8908'); +f('8909','8910','8911','8912'); +f('8913','8914','8915','8916'); +f('8917','8918','8919','8920'); +f('8921','8922','8923','8924'); +f('8925','8926','8927','8928'); +f('8929','8930','8931','8932'); +f('8933','8934','8935','8936'); +f('8937','8938','8939','8940'); +f('8941','8942','8943','8944'); +f('8945','8946','8947','8948'); +f('8949','8950','8951','8952'); +f('8953','8954','8955','8956'); +f('8957','8958','8959','8960'); +f('8961','8962','8963','8964'); +f('8965','8966','8967','8968'); +f('8969','8970','8971','8972'); +f('8973','8974','8975','8976'); +f('8977','8978','8979','8980'); +f('8981','8982','8983','8984'); +f('8985','8986','8987','8988'); +f('8989','8990','8991','8992'); +f('8993','8994','8995','8996'); +f('8997','8998','8999','9000'); +f('9001','9002','9003','9004'); +f('9005','9006','9007','9008'); +f('9009','9010','9011','9012'); +f('9013','9014','9015','9016'); +f('9017','9018','9019','9020'); +f('9021','9022','9023','9024'); +f('9025','9026','9027','9028'); +f('9029','9030','9031','9032'); +f('9033','9034','9035','9036'); +f('9037','9038','9039','9040'); +f('9041','9042','9043','9044'); +f('9045','9046','9047','9048'); +f('9049','9050','9051','9052'); +f('9053','9054','9055','9056'); +f('9057','9058','9059','9060'); +f('9061','9062','9063','9064'); +f('9065','9066','9067','9068'); +f('9069','9070','9071','9072'); +f('9073','9074','9075','9076'); +f('9077','9078','9079','9080'); +f('9081','9082','9083','9084'); +f('9085','9086','9087','9088'); +f('9089','9090','9091','9092'); +f('9093','9094','9095','9096'); +f('9097','9098','9099','9100'); +f('9101','9102','9103','9104'); +f('9105','9106','9107','9108'); +f('9109','9110','9111','9112'); +f('9113','9114','9115','9116'); +f('9117','9118','9119','9120'); +f('9121','9122','9123','9124'); +f('9125','9126','9127','9128'); +f('9129','9130','9131','9132'); +f('9133','9134','9135','9136'); +f('9137','9138','9139','9140'); +f('9141','9142','9143','9144'); +f('9145','9146','9147','9148'); +f('9149','9150','9151','9152'); +f('9153','9154','9155','9156'); +f('9157','9158','9159','9160'); +f('9161','9162','9163','9164'); +f('9165','9166','9167','9168'); +f('9169','9170','9171','9172'); +f('9173','9174','9175','9176'); +f('9177','9178','9179','9180'); +f('9181','9182','9183','9184'); +f('9185','9186','9187','9188'); +f('9189','9190','9191','9192'); +f('9193','9194','9195','9196'); +f('9197','9198','9199','9200'); +f('9201','9202','9203','9204'); +f('9205','9206','9207','9208'); +f('9209','9210','9211','9212'); +f('9213','9214','9215','9216'); +f('9217','9218','9219','9220'); +f('9221','9222','9223','9224'); +f('9225','9226','9227','9228'); +f('9229','9230','9231','9232'); +f('9233','9234','9235','9236'); +f('9237','9238','9239','9240'); +f('9241','9242','9243','9244'); +f('9245','9246','9247','9248'); +f('9249','9250','9251','9252'); +f('9253','9254','9255','9256'); +f('9257','9258','9259','9260'); +f('9261','9262','9263','9264'); +f('9265','9266','9267','9268'); +f('9269','9270','9271','9272'); +f('9273','9274','9275','9276'); +f('9277','9278','9279','9280'); +f('9281','9282','9283','9284'); +f('9285','9286','9287','9288'); +f('9289','9290','9291','9292'); +f('9293','9294','9295','9296'); +f('9297','9298','9299','9300'); +f('9301','9302','9303','9304'); +f('9305','9306','9307','9308'); +f('9309','9310','9311','9312'); +f('9313','9314','9315','9316'); +f('9317','9318','9319','9320'); +f('9321','9322','9323','9324'); +f('9325','9326','9327','9328'); +f('9329','9330','9331','9332'); +f('9333','9334','9335','9336'); +f('9337','9338','9339','9340'); +f('9341','9342','9343','9344'); +f('9345','9346','9347','9348'); +f('9349','9350','9351','9352'); +f('9353','9354','9355','9356'); +f('9357','9358','9359','9360'); +f('9361','9362','9363','9364'); +f('9365','9366','9367','9368'); +f('9369','9370','9371','9372'); +f('9373','9374','9375','9376'); +f('9377','9378','9379','9380'); +f('9381','9382','9383','9384'); +f('9385','9386','9387','9388'); +f('9389','9390','9391','9392'); +f('9393','9394','9395','9396'); +f('9397','9398','9399','9400'); +f('9401','9402','9403','9404'); +f('9405','9406','9407','9408'); +f('9409','9410','9411','9412'); +f('9413','9414','9415','9416'); +f('9417','9418','9419','9420'); +f('9421','9422','9423','9424'); +f('9425','9426','9427','9428'); +f('9429','9430','9431','9432'); +f('9433','9434','9435','9436'); +f('9437','9438','9439','9440'); +f('9441','9442','9443','9444'); +f('9445','9446','9447','9448'); +f('9449','9450','9451','9452'); +f('9453','9454','9455','9456'); +f('9457','9458','9459','9460'); +f('9461','9462','9463','9464'); +f('9465','9466','9467','9468'); +f('9469','9470','9471','9472'); +f('9473','9474','9475','9476'); +f('9477','9478','9479','9480'); +f('9481','9482','9483','9484'); +f('9485','9486','9487','9488'); +f('9489','9490','9491','9492'); +f('9493','9494','9495','9496'); +f('9497','9498','9499','9500'); +f('9501','9502','9503','9504'); +f('9505','9506','9507','9508'); +f('9509','9510','9511','9512'); +f('9513','9514','9515','9516'); +f('9517','9518','9519','9520'); +f('9521','9522','9523','9524'); +f('9525','9526','9527','9528'); +f('9529','9530','9531','9532'); +f('9533','9534','9535','9536'); +f('9537','9538','9539','9540'); +f('9541','9542','9543','9544'); +f('9545','9546','9547','9548'); +f('9549','9550','9551','9552'); +f('9553','9554','9555','9556'); +f('9557','9558','9559','9560'); +f('9561','9562','9563','9564'); +f('9565','9566','9567','9568'); +f('9569','9570','9571','9572'); +f('9573','9574','9575','9576'); +f('9577','9578','9579','9580'); +f('9581','9582','9583','9584'); +f('9585','9586','9587','9588'); +f('9589','9590','9591','9592'); +f('9593','9594','9595','9596'); +f('9597','9598','9599','9600'); +f('9601','9602','9603','9604'); +f('9605','9606','9607','9608'); +f('9609','9610','9611','9612'); +f('9613','9614','9615','9616'); +f('9617','9618','9619','9620'); +f('9621','9622','9623','9624'); +f('9625','9626','9627','9628'); +f('9629','9630','9631','9632'); +f('9633','9634','9635','9636'); +f('9637','9638','9639','9640'); +f('9641','9642','9643','9644'); +f('9645','9646','9647','9648'); +f('9649','9650','9651','9652'); +f('9653','9654','9655','9656'); +f('9657','9658','9659','9660'); +f('9661','9662','9663','9664'); +f('9665','9666','9667','9668'); +f('9669','9670','9671','9672'); +f('9673','9674','9675','9676'); +f('9677','9678','9679','9680'); +f('9681','9682','9683','9684'); +f('9685','9686','9687','9688'); +f('9689','9690','9691','9692'); +f('9693','9694','9695','9696'); +f('9697','9698','9699','9700'); +f('9701','9702','9703','9704'); +f('9705','9706','9707','9708'); +f('9709','9710','9711','9712'); +f('9713','9714','9715','9716'); +f('9717','9718','9719','9720'); +f('9721','9722','9723','9724'); +f('9725','9726','9727','9728'); +f('9729','9730','9731','9732'); +f('9733','9734','9735','9736'); +f('9737','9738','9739','9740'); +f('9741','9742','9743','9744'); +f('9745','9746','9747','9748'); +f('9749','9750','9751','9752'); +f('9753','9754','9755','9756'); +f('9757','9758','9759','9760'); +f('9761','9762','9763','9764'); +f('9765','9766','9767','9768'); +f('9769','9770','9771','9772'); +f('9773','9774','9775','9776'); +f('9777','9778','9779','9780'); +f('9781','9782','9783','9784'); +f('9785','9786','9787','9788'); +f('9789','9790','9791','9792'); +f('9793','9794','9795','9796'); +f('9797','9798','9799','9800'); +f('9801','9802','9803','9804'); +f('9805','9806','9807','9808'); +f('9809','9810','9811','9812'); +f('9813','9814','9815','9816'); +f('9817','9818','9819','9820'); +f('9821','9822','9823','9824'); +f('9825','9826','9827','9828'); +f('9829','9830','9831','9832'); +f('9833','9834','9835','9836'); +f('9837','9838','9839','9840'); +f('9841','9842','9843','9844'); +f('9845','9846','9847','9848'); +f('9849','9850','9851','9852'); +f('9853','9854','9855','9856'); +f('9857','9858','9859','9860'); +f('9861','9862','9863','9864'); +f('9865','9866','9867','9868'); +f('9869','9870','9871','9872'); +f('9873','9874','9875','9876'); +f('9877','9878','9879','9880'); +f('9881','9882','9883','9884'); +f('9885','9886','9887','9888'); +f('9889','9890','9891','9892'); +f('9893','9894','9895','9896'); +f('9897','9898','9899','9900'); +f('9901','9902','9903','9904'); +f('9905','9906','9907','9908'); +f('9909','9910','9911','9912'); +f('9913','9914','9915','9916'); +f('9917','9918','9919','9920'); +f('9921','9922','9923','9924'); +f('9925','9926','9927','9928'); +f('9929','9930','9931','9932'); +f('9933','9934','9935','9936'); +f('9937','9938','9939','9940'); +f('9941','9942','9943','9944'); +f('9945','9946','9947','9948'); +f('9949','9950','9951','9952'); +f('9953','9954','9955','9956'); +f('9957','9958','9959','9960'); +f('9961','9962','9963','9964'); +f('9965','9966','9967','9968'); +f('9969','9970','9971','9972'); +f('9973','9974','9975','9976'); +f('9977','9978','9979','9980'); +f('9981','9982','9983','9984'); +f('9985','9986','9987','9988'); +f('9989','9990','9991','9992'); +f('9993','9994','9995','9996'); +f('9997','9998','9999','10000'); +f('10001','10002','10003','10004'); +f('10005','10006','10007','10008'); +f('10009','10010','10011','10012'); +f('10013','10014','10015','10016'); +f('10017','10018','10019','10020'); +f('10021','10022','10023','10024'); +f('10025','10026','10027','10028'); +f('10029','10030','10031','10032'); +f('10033','10034','10035','10036'); +f('10037','10038','10039','10040'); +f('10041','10042','10043','10044'); +f('10045','10046','10047','10048'); +f('10049','10050','10051','10052'); +f('10053','10054','10055','10056'); +f('10057','10058','10059','10060'); +f('10061','10062','10063','10064'); +f('10065','10066','10067','10068'); +f('10069','10070','10071','10072'); +f('10073','10074','10075','10076'); +f('10077','10078','10079','10080'); +f('10081','10082','10083','10084'); +f('10085','10086','10087','10088'); +f('10089','10090','10091','10092'); +f('10093','10094','10095','10096'); +f('10097','10098','10099','10100'); +f('10101','10102','10103','10104'); +f('10105','10106','10107','10108'); +f('10109','10110','10111','10112'); +f('10113','10114','10115','10116'); +f('10117','10118','10119','10120'); +f('10121','10122','10123','10124'); +f('10125','10126','10127','10128'); +f('10129','10130','10131','10132'); +f('10133','10134','10135','10136'); +f('10137','10138','10139','10140'); +f('10141','10142','10143','10144'); +f('10145','10146','10147','10148'); +f('10149','10150','10151','10152'); +f('10153','10154','10155','10156'); +f('10157','10158','10159','10160'); +f('10161','10162','10163','10164'); +f('10165','10166','10167','10168'); +f('10169','10170','10171','10172'); +f('10173','10174','10175','10176'); +f('10177','10178','10179','10180'); +f('10181','10182','10183','10184'); +f('10185','10186','10187','10188'); +f('10189','10190','10191','10192'); +f('10193','10194','10195','10196'); +f('10197','10198','10199','10200'); +f('10201','10202','10203','10204'); +f('10205','10206','10207','10208'); +f('10209','10210','10211','10212'); +f('10213','10214','10215','10216'); +f('10217','10218','10219','10220'); +f('10221','10222','10223','10224'); +f('10225','10226','10227','10228'); +f('10229','10230','10231','10232'); +f('10233','10234','10235','10236'); +f('10237','10238','10239','10240'); +f('10241','10242','10243','10244'); +f('10245','10246','10247','10248'); +f('10249','10250','10251','10252'); +f('10253','10254','10255','10256'); +f('10257','10258','10259','10260'); +f('10261','10262','10263','10264'); +f('10265','10266','10267','10268'); +f('10269','10270','10271','10272'); +f('10273','10274','10275','10276'); +f('10277','10278','10279','10280'); +f('10281','10282','10283','10284'); +f('10285','10286','10287','10288'); +f('10289','10290','10291','10292'); +f('10293','10294','10295','10296'); +f('10297','10298','10299','10300'); +f('10301','10302','10303','10304'); +f('10305','10306','10307','10308'); +f('10309','10310','10311','10312'); +f('10313','10314','10315','10316'); +f('10317','10318','10319','10320'); +f('10321','10322','10323','10324'); +f('10325','10326','10327','10328'); +f('10329','10330','10331','10332'); +f('10333','10334','10335','10336'); +f('10337','10338','10339','10340'); +f('10341','10342','10343','10344'); +f('10345','10346','10347','10348'); +f('10349','10350','10351','10352'); +f('10353','10354','10355','10356'); +f('10357','10358','10359','10360'); +f('10361','10362','10363','10364'); +f('10365','10366','10367','10368'); +f('10369','10370','10371','10372'); +f('10373','10374','10375','10376'); +f('10377','10378','10379','10380'); +f('10381','10382','10383','10384'); +f('10385','10386','10387','10388'); +f('10389','10390','10391','10392'); +f('10393','10394','10395','10396'); +f('10397','10398','10399','10400'); +f('10401','10402','10403','10404'); +f('10405','10406','10407','10408'); +f('10409','10410','10411','10412'); +f('10413','10414','10415','10416'); +f('10417','10418','10419','10420'); +f('10421','10422','10423','10424'); +f('10425','10426','10427','10428'); +f('10429','10430','10431','10432'); +f('10433','10434','10435','10436'); +f('10437','10438','10439','10440'); +f('10441','10442','10443','10444'); +f('10445','10446','10447','10448'); +f('10449','10450','10451','10452'); +f('10453','10454','10455','10456'); +f('10457','10458','10459','10460'); +f('10461','10462','10463','10464'); +f('10465','10466','10467','10468'); +f('10469','10470','10471','10472'); +f('10473','10474','10475','10476'); +f('10477','10478','10479','10480'); +f('10481','10482','10483','10484'); +f('10485','10486','10487','10488'); +f('10489','10490','10491','10492'); +f('10493','10494','10495','10496'); +f('10497','10498','10499','10500'); +f('10501','10502','10503','10504'); +f('10505','10506','10507','10508'); +f('10509','10510','10511','10512'); +f('10513','10514','10515','10516'); +f('10517','10518','10519','10520'); +f('10521','10522','10523','10524'); +f('10525','10526','10527','10528'); +f('10529','10530','10531','10532'); +f('10533','10534','10535','10536'); +f('10537','10538','10539','10540'); +f('10541','10542','10543','10544'); +f('10545','10546','10547','10548'); +f('10549','10550','10551','10552'); +f('10553','10554','10555','10556'); +f('10557','10558','10559','10560'); +f('10561','10562','10563','10564'); +f('10565','10566','10567','10568'); +f('10569','10570','10571','10572'); +f('10573','10574','10575','10576'); +f('10577','10578','10579','10580'); +f('10581','10582','10583','10584'); +f('10585','10586','10587','10588'); +f('10589','10590','10591','10592'); +f('10593','10594','10595','10596'); +f('10597','10598','10599','10600'); +f('10601','10602','10603','10604'); +f('10605','10606','10607','10608'); +f('10609','10610','10611','10612'); +f('10613','10614','10615','10616'); +f('10617','10618','10619','10620'); +f('10621','10622','10623','10624'); +f('10625','10626','10627','10628'); +f('10629','10630','10631','10632'); +f('10633','10634','10635','10636'); +f('10637','10638','10639','10640'); +f('10641','10642','10643','10644'); +f('10645','10646','10647','10648'); +f('10649','10650','10651','10652'); +f('10653','10654','10655','10656'); +f('10657','10658','10659','10660'); +f('10661','10662','10663','10664'); +f('10665','10666','10667','10668'); +f('10669','10670','10671','10672'); +f('10673','10674','10675','10676'); +f('10677','10678','10679','10680'); +f('10681','10682','10683','10684'); +f('10685','10686','10687','10688'); +f('10689','10690','10691','10692'); +f('10693','10694','10695','10696'); +f('10697','10698','10699','10700'); +f('10701','10702','10703','10704'); +f('10705','10706','10707','10708'); +f('10709','10710','10711','10712'); +f('10713','10714','10715','10716'); +f('10717','10718','10719','10720'); +f('10721','10722','10723','10724'); +f('10725','10726','10727','10728'); +f('10729','10730','10731','10732'); +f('10733','10734','10735','10736'); +f('10737','10738','10739','10740'); +f('10741','10742','10743','10744'); +f('10745','10746','10747','10748'); +f('10749','10750','10751','10752'); +f('10753','10754','10755','10756'); +f('10757','10758','10759','10760'); +f('10761','10762','10763','10764'); +f('10765','10766','10767','10768'); +f('10769','10770','10771','10772'); +f('10773','10774','10775','10776'); +f('10777','10778','10779','10780'); +f('10781','10782','10783','10784'); +f('10785','10786','10787','10788'); +f('10789','10790','10791','10792'); +f('10793','10794','10795','10796'); +f('10797','10798','10799','10800'); +f('10801','10802','10803','10804'); +f('10805','10806','10807','10808'); +f('10809','10810','10811','10812'); +f('10813','10814','10815','10816'); +f('10817','10818','10819','10820'); +f('10821','10822','10823','10824'); +f('10825','10826','10827','10828'); +f('10829','10830','10831','10832'); +f('10833','10834','10835','10836'); +f('10837','10838','10839','10840'); +f('10841','10842','10843','10844'); +f('10845','10846','10847','10848'); +f('10849','10850','10851','10852'); +f('10853','10854','10855','10856'); +f('10857','10858','10859','10860'); +f('10861','10862','10863','10864'); +f('10865','10866','10867','10868'); +f('10869','10870','10871','10872'); +f('10873','10874','10875','10876'); +f('10877','10878','10879','10880'); +f('10881','10882','10883','10884'); +f('10885','10886','10887','10888'); +f('10889','10890','10891','10892'); +f('10893','10894','10895','10896'); +f('10897','10898','10899','10900'); +f('10901','10902','10903','10904'); +f('10905','10906','10907','10908'); +f('10909','10910','10911','10912'); +f('10913','10914','10915','10916'); +f('10917','10918','10919','10920'); +f('10921','10922','10923','10924'); +f('10925','10926','10927','10928'); +f('10929','10930','10931','10932'); +f('10933','10934','10935','10936'); +f('10937','10938','10939','10940'); +f('10941','10942','10943','10944'); +f('10945','10946','10947','10948'); +f('10949','10950','10951','10952'); +f('10953','10954','10955','10956'); +f('10957','10958','10959','10960'); +f('10961','10962','10963','10964'); +f('10965','10966','10967','10968'); +f('10969','10970','10971','10972'); +f('10973','10974','10975','10976'); +f('10977','10978','10979','10980'); +f('10981','10982','10983','10984'); +f('10985','10986','10987','10988'); +f('10989','10990','10991','10992'); +f('10993','10994','10995','10996'); +f('10997','10998','10999','11000'); +f('11001','11002','11003','11004'); +f('11005','11006','11007','11008'); +f('11009','11010','11011','11012'); +f('11013','11014','11015','11016'); +f('11017','11018','11019','11020'); +f('11021','11022','11023','11024'); +f('11025','11026','11027','11028'); +f('11029','11030','11031','11032'); +f('11033','11034','11035','11036'); +f('11037','11038','11039','11040'); +f('11041','11042','11043','11044'); +f('11045','11046','11047','11048'); +f('11049','11050','11051','11052'); +f('11053','11054','11055','11056'); +f('11057','11058','11059','11060'); +f('11061','11062','11063','11064'); +f('11065','11066','11067','11068'); +f('11069','11070','11071','11072'); +f('11073','11074','11075','11076'); +f('11077','11078','11079','11080'); +f('11081','11082','11083','11084'); +f('11085','11086','11087','11088'); +f('11089','11090','11091','11092'); +f('11093','11094','11095','11096'); +f('11097','11098','11099','11100'); +f('11101','11102','11103','11104'); +f('11105','11106','11107','11108'); +f('11109','11110','11111','11112'); +f('11113','11114','11115','11116'); +f('11117','11118','11119','11120'); +f('11121','11122','11123','11124'); +f('11125','11126','11127','11128'); +f('11129','11130','11131','11132'); +f('11133','11134','11135','11136'); +f('11137','11138','11139','11140'); +f('11141','11142','11143','11144'); +f('11145','11146','11147','11148'); +f('11149','11150','11151','11152'); +f('11153','11154','11155','11156'); +f('11157','11158','11159','11160'); +f('11161','11162','11163','11164'); +f('11165','11166','11167','11168'); +f('11169','11170','11171','11172'); +f('11173','11174','11175','11176'); +f('11177','11178','11179','11180'); +f('11181','11182','11183','11184'); +f('11185','11186','11187','11188'); +f('11189','11190','11191','11192'); +f('11193','11194','11195','11196'); +f('11197','11198','11199','11200'); +f('11201','11202','11203','11204'); +f('11205','11206','11207','11208'); +f('11209','11210','11211','11212'); +f('11213','11214','11215','11216'); +f('11217','11218','11219','11220'); +f('11221','11222','11223','11224'); +f('11225','11226','11227','11228'); +f('11229','11230','11231','11232'); +f('11233','11234','11235','11236'); +f('11237','11238','11239','11240'); +f('11241','11242','11243','11244'); +f('11245','11246','11247','11248'); +f('11249','11250','11251','11252'); +f('11253','11254','11255','11256'); +f('11257','11258','11259','11260'); +f('11261','11262','11263','11264'); +f('11265','11266','11267','11268'); +f('11269','11270','11271','11272'); +f('11273','11274','11275','11276'); +f('11277','11278','11279','11280'); +f('11281','11282','11283','11284'); +f('11285','11286','11287','11288'); +f('11289','11290','11291','11292'); +f('11293','11294','11295','11296'); +f('11297','11298','11299','11300'); +f('11301','11302','11303','11304'); +f('11305','11306','11307','11308'); +f('11309','11310','11311','11312'); +f('11313','11314','11315','11316'); +f('11317','11318','11319','11320'); +f('11321','11322','11323','11324'); +f('11325','11326','11327','11328'); +f('11329','11330','11331','11332'); +f('11333','11334','11335','11336'); +f('11337','11338','11339','11340'); +f('11341','11342','11343','11344'); +f('11345','11346','11347','11348'); +f('11349','11350','11351','11352'); +f('11353','11354','11355','11356'); +f('11357','11358','11359','11360'); +f('11361','11362','11363','11364'); +f('11365','11366','11367','11368'); +f('11369','11370','11371','11372'); +f('11373','11374','11375','11376'); +f('11377','11378','11379','11380'); +f('11381','11382','11383','11384'); +f('11385','11386','11387','11388'); +f('11389','11390','11391','11392'); +f('11393','11394','11395','11396'); +f('11397','11398','11399','11400'); +f('11401','11402','11403','11404'); +f('11405','11406','11407','11408'); +f('11409','11410','11411','11412'); +f('11413','11414','11415','11416'); +f('11417','11418','11419','11420'); +f('11421','11422','11423','11424'); +f('11425','11426','11427','11428'); +f('11429','11430','11431','11432'); +f('11433','11434','11435','11436'); +f('11437','11438','11439','11440'); +f('11441','11442','11443','11444'); +f('11445','11446','11447','11448'); +f('11449','11450','11451','11452'); +f('11453','11454','11455','11456'); +f('11457','11458','11459','11460'); +f('11461','11462','11463','11464'); +f('11465','11466','11467','11468'); +f('11469','11470','11471','11472'); +f('11473','11474','11475','11476'); +f('11477','11478','11479','11480'); +f('11481','11482','11483','11484'); +f('11485','11486','11487','11488'); +f('11489','11490','11491','11492'); +f('11493','11494','11495','11496'); +f('11497','11498','11499','11500'); +f('11501','11502','11503','11504'); +f('11505','11506','11507','11508'); +f('11509','11510','11511','11512'); +f('11513','11514','11515','11516'); +f('11517','11518','11519','11520'); +f('11521','11522','11523','11524'); +f('11525','11526','11527','11528'); +f('11529','11530','11531','11532'); +f('11533','11534','11535','11536'); +f('11537','11538','11539','11540'); +f('11541','11542','11543','11544'); +f('11545','11546','11547','11548'); +f('11549','11550','11551','11552'); +f('11553','11554','11555','11556'); +f('11557','11558','11559','11560'); +f('11561','11562','11563','11564'); +f('11565','11566','11567','11568'); +f('11569','11570','11571','11572'); +f('11573','11574','11575','11576'); +f('11577','11578','11579','11580'); +f('11581','11582','11583','11584'); +f('11585','11586','11587','11588'); +f('11589','11590','11591','11592'); +f('11593','11594','11595','11596'); +f('11597','11598','11599','11600'); +f('11601','11602','11603','11604'); +f('11605','11606','11607','11608'); +f('11609','11610','11611','11612'); +f('11613','11614','11615','11616'); +f('11617','11618','11619','11620'); +f('11621','11622','11623','11624'); +f('11625','11626','11627','11628'); +f('11629','11630','11631','11632'); +f('11633','11634','11635','11636'); +f('11637','11638','11639','11640'); +f('11641','11642','11643','11644'); +f('11645','11646','11647','11648'); +f('11649','11650','11651','11652'); +f('11653','11654','11655','11656'); +f('11657','11658','11659','11660'); +f('11661','11662','11663','11664'); +f('11665','11666','11667','11668'); +f('11669','11670','11671','11672'); +f('11673','11674','11675','11676'); +f('11677','11678','11679','11680'); +f('11681','11682','11683','11684'); +f('11685','11686','11687','11688'); +f('11689','11690','11691','11692'); +f('11693','11694','11695','11696'); +f('11697','11698','11699','11700'); +f('11701','11702','11703','11704'); +f('11705','11706','11707','11708'); +f('11709','11710','11711','11712'); +f('11713','11714','11715','11716'); +f('11717','11718','11719','11720'); +f('11721','11722','11723','11724'); +f('11725','11726','11727','11728'); +f('11729','11730','11731','11732'); +f('11733','11734','11735','11736'); +f('11737','11738','11739','11740'); +f('11741','11742','11743','11744'); +f('11745','11746','11747','11748'); +f('11749','11750','11751','11752'); +f('11753','11754','11755','11756'); +f('11757','11758','11759','11760'); +f('11761','11762','11763','11764'); +f('11765','11766','11767','11768'); +f('11769','11770','11771','11772'); +f('11773','11774','11775','11776'); +f('11777','11778','11779','11780'); +f('11781','11782','11783','11784'); +f('11785','11786','11787','11788'); +f('11789','11790','11791','11792'); +f('11793','11794','11795','11796'); +f('11797','11798','11799','11800'); +f('11801','11802','11803','11804'); +f('11805','11806','11807','11808'); +f('11809','11810','11811','11812'); +f('11813','11814','11815','11816'); +f('11817','11818','11819','11820'); +f('11821','11822','11823','11824'); +f('11825','11826','11827','11828'); +f('11829','11830','11831','11832'); +f('11833','11834','11835','11836'); +f('11837','11838','11839','11840'); +f('11841','11842','11843','11844'); +f('11845','11846','11847','11848'); +f('11849','11850','11851','11852'); +f('11853','11854','11855','11856'); +f('11857','11858','11859','11860'); +f('11861','11862','11863','11864'); +f('11865','11866','11867','11868'); +f('11869','11870','11871','11872'); +f('11873','11874','11875','11876'); +f('11877','11878','11879','11880'); +f('11881','11882','11883','11884'); +f('11885','11886','11887','11888'); +f('11889','11890','11891','11892'); +f('11893','11894','11895','11896'); +f('11897','11898','11899','11900'); +f('11901','11902','11903','11904'); +f('11905','11906','11907','11908'); +f('11909','11910','11911','11912'); +f('11913','11914','11915','11916'); +f('11917','11918','11919','11920'); +f('11921','11922','11923','11924'); +f('11925','11926','11927','11928'); +f('11929','11930','11931','11932'); +f('11933','11934','11935','11936'); +f('11937','11938','11939','11940'); +f('11941','11942','11943','11944'); +f('11945','11946','11947','11948'); +f('11949','11950','11951','11952'); +f('11953','11954','11955','11956'); +f('11957','11958','11959','11960'); +f('11961','11962','11963','11964'); +f('11965','11966','11967','11968'); +f('11969','11970','11971','11972'); +f('11973','11974','11975','11976'); +f('11977','11978','11979','11980'); +f('11981','11982','11983','11984'); +f('11985','11986','11987','11988'); +f('11989','11990','11991','11992'); +f('11993','11994','11995','11996'); +f('11997','11998','11999','12000'); +f('12001','12002','12003','12004'); +f('12005','12006','12007','12008'); +f('12009','12010','12011','12012'); +f('12013','12014','12015','12016'); +f('12017','12018','12019','12020'); +f('12021','12022','12023','12024'); +f('12025','12026','12027','12028'); +f('12029','12030','12031','12032'); +f('12033','12034','12035','12036'); +f('12037','12038','12039','12040'); +f('12041','12042','12043','12044'); +f('12045','12046','12047','12048'); +f('12049','12050','12051','12052'); +f('12053','12054','12055','12056'); +f('12057','12058','12059','12060'); +f('12061','12062','12063','12064'); +f('12065','12066','12067','12068'); +f('12069','12070','12071','12072'); +f('12073','12074','12075','12076'); +f('12077','12078','12079','12080'); +f('12081','12082','12083','12084'); +f('12085','12086','12087','12088'); +f('12089','12090','12091','12092'); +f('12093','12094','12095','12096'); +f('12097','12098','12099','12100'); +f('12101','12102','12103','12104'); +f('12105','12106','12107','12108'); +f('12109','12110','12111','12112'); +f('12113','12114','12115','12116'); +f('12117','12118','12119','12120'); +f('12121','12122','12123','12124'); +f('12125','12126','12127','12128'); +f('12129','12130','12131','12132'); +f('12133','12134','12135','12136'); +f('12137','12138','12139','12140'); +f('12141','12142','12143','12144'); +f('12145','12146','12147','12148'); +f('12149','12150','12151','12152'); +f('12153','12154','12155','12156'); +f('12157','12158','12159','12160'); +f('12161','12162','12163','12164'); +f('12165','12166','12167','12168'); +f('12169','12170','12171','12172'); +f('12173','12174','12175','12176'); +f('12177','12178','12179','12180'); +f('12181','12182','12183','12184'); +f('12185','12186','12187','12188'); +f('12189','12190','12191','12192'); +f('12193','12194','12195','12196'); +f('12197','12198','12199','12200'); +f('12201','12202','12203','12204'); +f('12205','12206','12207','12208'); +f('12209','12210','12211','12212'); +f('12213','12214','12215','12216'); +f('12217','12218','12219','12220'); +f('12221','12222','12223','12224'); +f('12225','12226','12227','12228'); +f('12229','12230','12231','12232'); +f('12233','12234','12235','12236'); +f('12237','12238','12239','12240'); +f('12241','12242','12243','12244'); +f('12245','12246','12247','12248'); +f('12249','12250','12251','12252'); +f('12253','12254','12255','12256'); +f('12257','12258','12259','12260'); +f('12261','12262','12263','12264'); +f('12265','12266','12267','12268'); +f('12269','12270','12271','12272'); +f('12273','12274','12275','12276'); +f('12277','12278','12279','12280'); +f('12281','12282','12283','12284'); +f('12285','12286','12287','12288'); +f('12289','12290','12291','12292'); +f('12293','12294','12295','12296'); +f('12297','12298','12299','12300'); +f('12301','12302','12303','12304'); +f('12305','12306','12307','12308'); +f('12309','12310','12311','12312'); +f('12313','12314','12315','12316'); +f('12317','12318','12319','12320'); +f('12321','12322','12323','12324'); +f('12325','12326','12327','12328'); +f('12329','12330','12331','12332'); +f('12333','12334','12335','12336'); +f('12337','12338','12339','12340'); +f('12341','12342','12343','12344'); +f('12345','12346','12347','12348'); +f('12349','12350','12351','12352'); +f('12353','12354','12355','12356'); +f('12357','12358','12359','12360'); +f('12361','12362','12363','12364'); +f('12365','12366','12367','12368'); +f('12369','12370','12371','12372'); +f('12373','12374','12375','12376'); +f('12377','12378','12379','12380'); +f('12381','12382','12383','12384'); +f('12385','12386','12387','12388'); +f('12389','12390','12391','12392'); +f('12393','12394','12395','12396'); +f('12397','12398','12399','12400'); +f('12401','12402','12403','12404'); +f('12405','12406','12407','12408'); +f('12409','12410','12411','12412'); +f('12413','12414','12415','12416'); +f('12417','12418','12419','12420'); +f('12421','12422','12423','12424'); +f('12425','12426','12427','12428'); +f('12429','12430','12431','12432'); +f('12433','12434','12435','12436'); +f('12437','12438','12439','12440'); +f('12441','12442','12443','12444'); +f('12445','12446','12447','12448'); +f('12449','12450','12451','12452'); +f('12453','12454','12455','12456'); +f('12457','12458','12459','12460'); +f('12461','12462','12463','12464'); +f('12465','12466','12467','12468'); +f('12469','12470','12471','12472'); +f('12473','12474','12475','12476'); +f('12477','12478','12479','12480'); +f('12481','12482','12483','12484'); +f('12485','12486','12487','12488'); +f('12489','12490','12491','12492'); +f('12493','12494','12495','12496'); +f('12497','12498','12499','12500'); +f('12501','12502','12503','12504'); +f('12505','12506','12507','12508'); +f('12509','12510','12511','12512'); +f('12513','12514','12515','12516'); +f('12517','12518','12519','12520'); +f('12521','12522','12523','12524'); +f('12525','12526','12527','12528'); +f('12529','12530','12531','12532'); +f('12533','12534','12535','12536'); +f('12537','12538','12539','12540'); +f('12541','12542','12543','12544'); +f('12545','12546','12547','12548'); +f('12549','12550','12551','12552'); +f('12553','12554','12555','12556'); +f('12557','12558','12559','12560'); +f('12561','12562','12563','12564'); +f('12565','12566','12567','12568'); +f('12569','12570','12571','12572'); +f('12573','12574','12575','12576'); +f('12577','12578','12579','12580'); +f('12581','12582','12583','12584'); +f('12585','12586','12587','12588'); +f('12589','12590','12591','12592'); +f('12593','12594','12595','12596'); +f('12597','12598','12599','12600'); +f('12601','12602','12603','12604'); +f('12605','12606','12607','12608'); +f('12609','12610','12611','12612'); +f('12613','12614','12615','12616'); +f('12617','12618','12619','12620'); +f('12621','12622','12623','12624'); +f('12625','12626','12627','12628'); +f('12629','12630','12631','12632'); +f('12633','12634','12635','12636'); +f('12637','12638','12639','12640'); +f('12641','12642','12643','12644'); +f('12645','12646','12647','12648'); +f('12649','12650','12651','12652'); +f('12653','12654','12655','12656'); +f('12657','12658','12659','12660'); +f('12661','12662','12663','12664'); +f('12665','12666','12667','12668'); +f('12669','12670','12671','12672'); +f('12673','12674','12675','12676'); +f('12677','12678','12679','12680'); +f('12681','12682','12683','12684'); +f('12685','12686','12687','12688'); +f('12689','12690','12691','12692'); +f('12693','12694','12695','12696'); +f('12697','12698','12699','12700'); +f('12701','12702','12703','12704'); +f('12705','12706','12707','12708'); +f('12709','12710','12711','12712'); +f('12713','12714','12715','12716'); +f('12717','12718','12719','12720'); +f('12721','12722','12723','12724'); +f('12725','12726','12727','12728'); +f('12729','12730','12731','12732'); +f('12733','12734','12735','12736'); +f('12737','12738','12739','12740'); +f('12741','12742','12743','12744'); +f('12745','12746','12747','12748'); +f('12749','12750','12751','12752'); +f('12753','12754','12755','12756'); +f('12757','12758','12759','12760'); +f('12761','12762','12763','12764'); +f('12765','12766','12767','12768'); +f('12769','12770','12771','12772'); +f('12773','12774','12775','12776'); +f('12777','12778','12779','12780'); +f('12781','12782','12783','12784'); +f('12785','12786','12787','12788'); +f('12789','12790','12791','12792'); +f('12793','12794','12795','12796'); +f('12797','12798','12799','12800'); +f('12801','12802','12803','12804'); +f('12805','12806','12807','12808'); +f('12809','12810','12811','12812'); +f('12813','12814','12815','12816'); +f('12817','12818','12819','12820'); +f('12821','12822','12823','12824'); +f('12825','12826','12827','12828'); +f('12829','12830','12831','12832'); +f('12833','12834','12835','12836'); +f('12837','12838','12839','12840'); +f('12841','12842','12843','12844'); +f('12845','12846','12847','12848'); +f('12849','12850','12851','12852'); +f('12853','12854','12855','12856'); +f('12857','12858','12859','12860'); +f('12861','12862','12863','12864'); +f('12865','12866','12867','12868'); +f('12869','12870','12871','12872'); +f('12873','12874','12875','12876'); +f('12877','12878','12879','12880'); +f('12881','12882','12883','12884'); +f('12885','12886','12887','12888'); +f('12889','12890','12891','12892'); +f('12893','12894','12895','12896'); +f('12897','12898','12899','12900'); +f('12901','12902','12903','12904'); +f('12905','12906','12907','12908'); +f('12909','12910','12911','12912'); +f('12913','12914','12915','12916'); +f('12917','12918','12919','12920'); +f('12921','12922','12923','12924'); +f('12925','12926','12927','12928'); +f('12929','12930','12931','12932'); +f('12933','12934','12935','12936'); +f('12937','12938','12939','12940'); +f('12941','12942','12943','12944'); +f('12945','12946','12947','12948'); +f('12949','12950','12951','12952'); +f('12953','12954','12955','12956'); +f('12957','12958','12959','12960'); +f('12961','12962','12963','12964'); +f('12965','12966','12967','12968'); +f('12969','12970','12971','12972'); +f('12973','12974','12975','12976'); +f('12977','12978','12979','12980'); +f('12981','12982','12983','12984'); +f('12985','12986','12987','12988'); +f('12989','12990','12991','12992'); +f('12993','12994','12995','12996'); +f('12997','12998','12999','13000'); +f('13001','13002','13003','13004'); +f('13005','13006','13007','13008'); +f('13009','13010','13011','13012'); +f('13013','13014','13015','13016'); +f('13017','13018','13019','13020'); +f('13021','13022','13023','13024'); +f('13025','13026','13027','13028'); +f('13029','13030','13031','13032'); +f('13033','13034','13035','13036'); +f('13037','13038','13039','13040'); +f('13041','13042','13043','13044'); +f('13045','13046','13047','13048'); +f('13049','13050','13051','13052'); +f('13053','13054','13055','13056'); +f('13057','13058','13059','13060'); +f('13061','13062','13063','13064'); +f('13065','13066','13067','13068'); +f('13069','13070','13071','13072'); +f('13073','13074','13075','13076'); +f('13077','13078','13079','13080'); +f('13081','13082','13083','13084'); +f('13085','13086','13087','13088'); +f('13089','13090','13091','13092'); +f('13093','13094','13095','13096'); +f('13097','13098','13099','13100'); +f('13101','13102','13103','13104'); +f('13105','13106','13107','13108'); +f('13109','13110','13111','13112'); +f('13113','13114','13115','13116'); +f('13117','13118','13119','13120'); +f('13121','13122','13123','13124'); +f('13125','13126','13127','13128'); +f('13129','13130','13131','13132'); +f('13133','13134','13135','13136'); +f('13137','13138','13139','13140'); +f('13141','13142','13143','13144'); +f('13145','13146','13147','13148'); +f('13149','13150','13151','13152'); +f('13153','13154','13155','13156'); +f('13157','13158','13159','13160'); +f('13161','13162','13163','13164'); +f('13165','13166','13167','13168'); +f('13169','13170','13171','13172'); +f('13173','13174','13175','13176'); +f('13177','13178','13179','13180'); +f('13181','13182','13183','13184'); +f('13185','13186','13187','13188'); +f('13189','13190','13191','13192'); +f('13193','13194','13195','13196'); +f('13197','13198','13199','13200'); +f('13201','13202','13203','13204'); +f('13205','13206','13207','13208'); +f('13209','13210','13211','13212'); +f('13213','13214','13215','13216'); +f('13217','13218','13219','13220'); +f('13221','13222','13223','13224'); +f('13225','13226','13227','13228'); +f('13229','13230','13231','13232'); +f('13233','13234','13235','13236'); +f('13237','13238','13239','13240'); +f('13241','13242','13243','13244'); +f('13245','13246','13247','13248'); +f('13249','13250','13251','13252'); +f('13253','13254','13255','13256'); +f('13257','13258','13259','13260'); +f('13261','13262','13263','13264'); +f('13265','13266','13267','13268'); +f('13269','13270','13271','13272'); +f('13273','13274','13275','13276'); +f('13277','13278','13279','13280'); +f('13281','13282','13283','13284'); +f('13285','13286','13287','13288'); +f('13289','13290','13291','13292'); +f('13293','13294','13295','13296'); +f('13297','13298','13299','13300'); +f('13301','13302','13303','13304'); +f('13305','13306','13307','13308'); +f('13309','13310','13311','13312'); +f('13313','13314','13315','13316'); +f('13317','13318','13319','13320'); +f('13321','13322','13323','13324'); +f('13325','13326','13327','13328'); +f('13329','13330','13331','13332'); +f('13333','13334','13335','13336'); +f('13337','13338','13339','13340'); +f('13341','13342','13343','13344'); +f('13345','13346','13347','13348'); +f('13349','13350','13351','13352'); +f('13353','13354','13355','13356'); +f('13357','13358','13359','13360'); +f('13361','13362','13363','13364'); +f('13365','13366','13367','13368'); +f('13369','13370','13371','13372'); +f('13373','13374','13375','13376'); +f('13377','13378','13379','13380'); +f('13381','13382','13383','13384'); +f('13385','13386','13387','13388'); +f('13389','13390','13391','13392'); +f('13393','13394','13395','13396'); +f('13397','13398','13399','13400'); +f('13401','13402','13403','13404'); +f('13405','13406','13407','13408'); +f('13409','13410','13411','13412'); +f('13413','13414','13415','13416'); +f('13417','13418','13419','13420'); +f('13421','13422','13423','13424'); +f('13425','13426','13427','13428'); +f('13429','13430','13431','13432'); +f('13433','13434','13435','13436'); +f('13437','13438','13439','13440'); +f('13441','13442','13443','13444'); +f('13445','13446','13447','13448'); +f('13449','13450','13451','13452'); +f('13453','13454','13455','13456'); +f('13457','13458','13459','13460'); +f('13461','13462','13463','13464'); +f('13465','13466','13467','13468'); +f('13469','13470','13471','13472'); +f('13473','13474','13475','13476'); +f('13477','13478','13479','13480'); +f('13481','13482','13483','13484'); +f('13485','13486','13487','13488'); +f('13489','13490','13491','13492'); +f('13493','13494','13495','13496'); +f('13497','13498','13499','13500'); +f('13501','13502','13503','13504'); +f('13505','13506','13507','13508'); +f('13509','13510','13511','13512'); +f('13513','13514','13515','13516'); +f('13517','13518','13519','13520'); +f('13521','13522','13523','13524'); +f('13525','13526','13527','13528'); +f('13529','13530','13531','13532'); +f('13533','13534','13535','13536'); +f('13537','13538','13539','13540'); +f('13541','13542','13543','13544'); +f('13545','13546','13547','13548'); +f('13549','13550','13551','13552'); +f('13553','13554','13555','13556'); +f('13557','13558','13559','13560'); +f('13561','13562','13563','13564'); +f('13565','13566','13567','13568'); +f('13569','13570','13571','13572'); +f('13573','13574','13575','13576'); +f('13577','13578','13579','13580'); +f('13581','13582','13583','13584'); +f('13585','13586','13587','13588'); +f('13589','13590','13591','13592'); +f('13593','13594','13595','13596'); +f('13597','13598','13599','13600'); +f('13601','13602','13603','13604'); +f('13605','13606','13607','13608'); +f('13609','13610','13611','13612'); +f('13613','13614','13615','13616'); +f('13617','13618','13619','13620'); +f('13621','13622','13623','13624'); +f('13625','13626','13627','13628'); +f('13629','13630','13631','13632'); +f('13633','13634','13635','13636'); +f('13637','13638','13639','13640'); +f('13641','13642','13643','13644'); +f('13645','13646','13647','13648'); +f('13649','13650','13651','13652'); +f('13653','13654','13655','13656'); +f('13657','13658','13659','13660'); +f('13661','13662','13663','13664'); +f('13665','13666','13667','13668'); +f('13669','13670','13671','13672'); +f('13673','13674','13675','13676'); +f('13677','13678','13679','13680'); +f('13681','13682','13683','13684'); +f('13685','13686','13687','13688'); +f('13689','13690','13691','13692'); +f('13693','13694','13695','13696'); +f('13697','13698','13699','13700'); +f('13701','13702','13703','13704'); +f('13705','13706','13707','13708'); +f('13709','13710','13711','13712'); +f('13713','13714','13715','13716'); +f('13717','13718','13719','13720'); +f('13721','13722','13723','13724'); +f('13725','13726','13727','13728'); +f('13729','13730','13731','13732'); +f('13733','13734','13735','13736'); +f('13737','13738','13739','13740'); +f('13741','13742','13743','13744'); +f('13745','13746','13747','13748'); +f('13749','13750','13751','13752'); +f('13753','13754','13755','13756'); +f('13757','13758','13759','13760'); +f('13761','13762','13763','13764'); +f('13765','13766','13767','13768'); +f('13769','13770','13771','13772'); +f('13773','13774','13775','13776'); +f('13777','13778','13779','13780'); +f('13781','13782','13783','13784'); +f('13785','13786','13787','13788'); +f('13789','13790','13791','13792'); +f('13793','13794','13795','13796'); +f('13797','13798','13799','13800'); +f('13801','13802','13803','13804'); +f('13805','13806','13807','13808'); +f('13809','13810','13811','13812'); +f('13813','13814','13815','13816'); +f('13817','13818','13819','13820'); +f('13821','13822','13823','13824'); +f('13825','13826','13827','13828'); +f('13829','13830','13831','13832'); +f('13833','13834','13835','13836'); +f('13837','13838','13839','13840'); +f('13841','13842','13843','13844'); +f('13845','13846','13847','13848'); +f('13849','13850','13851','13852'); +f('13853','13854','13855','13856'); +f('13857','13858','13859','13860'); +f('13861','13862','13863','13864'); +f('13865','13866','13867','13868'); +f('13869','13870','13871','13872'); +f('13873','13874','13875','13876'); +f('13877','13878','13879','13880'); +f('13881','13882','13883','13884'); +f('13885','13886','13887','13888'); +f('13889','13890','13891','13892'); +f('13893','13894','13895','13896'); +f('13897','13898','13899','13900'); +f('13901','13902','13903','13904'); +f('13905','13906','13907','13908'); +f('13909','13910','13911','13912'); +f('13913','13914','13915','13916'); +f('13917','13918','13919','13920'); +f('13921','13922','13923','13924'); +f('13925','13926','13927','13928'); +f('13929','13930','13931','13932'); +f('13933','13934','13935','13936'); +f('13937','13938','13939','13940'); +f('13941','13942','13943','13944'); +f('13945','13946','13947','13948'); +f('13949','13950','13951','13952'); +f('13953','13954','13955','13956'); +f('13957','13958','13959','13960'); +f('13961','13962','13963','13964'); +f('13965','13966','13967','13968'); +f('13969','13970','13971','13972'); +f('13973','13974','13975','13976'); +f('13977','13978','13979','13980'); +f('13981','13982','13983','13984'); +f('13985','13986','13987','13988'); +f('13989','13990','13991','13992'); +f('13993','13994','13995','13996'); +f('13997','13998','13999','14000'); +f('14001','14002','14003','14004'); +f('14005','14006','14007','14008'); +f('14009','14010','14011','14012'); +f('14013','14014','14015','14016'); +f('14017','14018','14019','14020'); +f('14021','14022','14023','14024'); +f('14025','14026','14027','14028'); +f('14029','14030','14031','14032'); +f('14033','14034','14035','14036'); +f('14037','14038','14039','14040'); +f('14041','14042','14043','14044'); +f('14045','14046','14047','14048'); +f('14049','14050','14051','14052'); +f('14053','14054','14055','14056'); +f('14057','14058','14059','14060'); +f('14061','14062','14063','14064'); +f('14065','14066','14067','14068'); +f('14069','14070','14071','14072'); +f('14073','14074','14075','14076'); +f('14077','14078','14079','14080'); +f('14081','14082','14083','14084'); +f('14085','14086','14087','14088'); +f('14089','14090','14091','14092'); +f('14093','14094','14095','14096'); +f('14097','14098','14099','14100'); +f('14101','14102','14103','14104'); +f('14105','14106','14107','14108'); +f('14109','14110','14111','14112'); +f('14113','14114','14115','14116'); +f('14117','14118','14119','14120'); +f('14121','14122','14123','14124'); +f('14125','14126','14127','14128'); +f('14129','14130','14131','14132'); +f('14133','14134','14135','14136'); +f('14137','14138','14139','14140'); +f('14141','14142','14143','14144'); +f('14145','14146','14147','14148'); +f('14149','14150','14151','14152'); +f('14153','14154','14155','14156'); +f('14157','14158','14159','14160'); +f('14161','14162','14163','14164'); +f('14165','14166','14167','14168'); +f('14169','14170','14171','14172'); +f('14173','14174','14175','14176'); +f('14177','14178','14179','14180'); +f('14181','14182','14183','14184'); +f('14185','14186','14187','14188'); +f('14189','14190','14191','14192'); +f('14193','14194','14195','14196'); +f('14197','14198','14199','14200'); +f('14201','14202','14203','14204'); +f('14205','14206','14207','14208'); +f('14209','14210','14211','14212'); +f('14213','14214','14215','14216'); +f('14217','14218','14219','14220'); +f('14221','14222','14223','14224'); +f('14225','14226','14227','14228'); +f('14229','14230','14231','14232'); +f('14233','14234','14235','14236'); +f('14237','14238','14239','14240'); +f('14241','14242','14243','14244'); +f('14245','14246','14247','14248'); +f('14249','14250','14251','14252'); +f('14253','14254','14255','14256'); +f('14257','14258','14259','14260'); +f('14261','14262','14263','14264'); +f('14265','14266','14267','14268'); +f('14269','14270','14271','14272'); +f('14273','14274','14275','14276'); +f('14277','14278','14279','14280'); +f('14281','14282','14283','14284'); +f('14285','14286','14287','14288'); +f('14289','14290','14291','14292'); +f('14293','14294','14295','14296'); +f('14297','14298','14299','14300'); +f('14301','14302','14303','14304'); +f('14305','14306','14307','14308'); +f('14309','14310','14311','14312'); +f('14313','14314','14315','14316'); +f('14317','14318','14319','14320'); +f('14321','14322','14323','14324'); +f('14325','14326','14327','14328'); +f('14329','14330','14331','14332'); +f('14333','14334','14335','14336'); +f('14337','14338','14339','14340'); +f('14341','14342','14343','14344'); +f('14345','14346','14347','14348'); +f('14349','14350','14351','14352'); +f('14353','14354','14355','14356'); +f('14357','14358','14359','14360'); +f('14361','14362','14363','14364'); +f('14365','14366','14367','14368'); +f('14369','14370','14371','14372'); +f('14373','14374','14375','14376'); +f('14377','14378','14379','14380'); +f('14381','14382','14383','14384'); +f('14385','14386','14387','14388'); +f('14389','14390','14391','14392'); +f('14393','14394','14395','14396'); +f('14397','14398','14399','14400'); +f('14401','14402','14403','14404'); +f('14405','14406','14407','14408'); +f('14409','14410','14411','14412'); +f('14413','14414','14415','14416'); +f('14417','14418','14419','14420'); +f('14421','14422','14423','14424'); +f('14425','14426','14427','14428'); +f('14429','14430','14431','14432'); +f('14433','14434','14435','14436'); +f('14437','14438','14439','14440'); +f('14441','14442','14443','14444'); +f('14445','14446','14447','14448'); +f('14449','14450','14451','14452'); +f('14453','14454','14455','14456'); +f('14457','14458','14459','14460'); +f('14461','14462','14463','14464'); +f('14465','14466','14467','14468'); +f('14469','14470','14471','14472'); +f('14473','14474','14475','14476'); +f('14477','14478','14479','14480'); +f('14481','14482','14483','14484'); +f('14485','14486','14487','14488'); +f('14489','14490','14491','14492'); +f('14493','14494','14495','14496'); +f('14497','14498','14499','14500'); +f('14501','14502','14503','14504'); +f('14505','14506','14507','14508'); +f('14509','14510','14511','14512'); +f('14513','14514','14515','14516'); +f('14517','14518','14519','14520'); +f('14521','14522','14523','14524'); +f('14525','14526','14527','14528'); +f('14529','14530','14531','14532'); +f('14533','14534','14535','14536'); +f('14537','14538','14539','14540'); +f('14541','14542','14543','14544'); +f('14545','14546','14547','14548'); +f('14549','14550','14551','14552'); +f('14553','14554','14555','14556'); +f('14557','14558','14559','14560'); +f('14561','14562','14563','14564'); +f('14565','14566','14567','14568'); +f('14569','14570','14571','14572'); +f('14573','14574','14575','14576'); +f('14577','14578','14579','14580'); +f('14581','14582','14583','14584'); +f('14585','14586','14587','14588'); +f('14589','14590','14591','14592'); +f('14593','14594','14595','14596'); +f('14597','14598','14599','14600'); +f('14601','14602','14603','14604'); +f('14605','14606','14607','14608'); +f('14609','14610','14611','14612'); +f('14613','14614','14615','14616'); +f('14617','14618','14619','14620'); +f('14621','14622','14623','14624'); +f('14625','14626','14627','14628'); +f('14629','14630','14631','14632'); +f('14633','14634','14635','14636'); +f('14637','14638','14639','14640'); +f('14641','14642','14643','14644'); +f('14645','14646','14647','14648'); +f('14649','14650','14651','14652'); +f('14653','14654','14655','14656'); +f('14657','14658','14659','14660'); +f('14661','14662','14663','14664'); +f('14665','14666','14667','14668'); +f('14669','14670','14671','14672'); +f('14673','14674','14675','14676'); +f('14677','14678','14679','14680'); +f('14681','14682','14683','14684'); +f('14685','14686','14687','14688'); +f('14689','14690','14691','14692'); +f('14693','14694','14695','14696'); +f('14697','14698','14699','14700'); +f('14701','14702','14703','14704'); +f('14705','14706','14707','14708'); +f('14709','14710','14711','14712'); +f('14713','14714','14715','14716'); +f('14717','14718','14719','14720'); +f('14721','14722','14723','14724'); +f('14725','14726','14727','14728'); +f('14729','14730','14731','14732'); +f('14733','14734','14735','14736'); +f('14737','14738','14739','14740'); +f('14741','14742','14743','14744'); +f('14745','14746','14747','14748'); +f('14749','14750','14751','14752'); +f('14753','14754','14755','14756'); +f('14757','14758','14759','14760'); +f('14761','14762','14763','14764'); +f('14765','14766','14767','14768'); +f('14769','14770','14771','14772'); +f('14773','14774','14775','14776'); +f('14777','14778','14779','14780'); +f('14781','14782','14783','14784'); +f('14785','14786','14787','14788'); +f('14789','14790','14791','14792'); +f('14793','14794','14795','14796'); +f('14797','14798','14799','14800'); +f('14801','14802','14803','14804'); +f('14805','14806','14807','14808'); +f('14809','14810','14811','14812'); +f('14813','14814','14815','14816'); +f('14817','14818','14819','14820'); +f('14821','14822','14823','14824'); +f('14825','14826','14827','14828'); +f('14829','14830','14831','14832'); +f('14833','14834','14835','14836'); +f('14837','14838','14839','14840'); +f('14841','14842','14843','14844'); +f('14845','14846','14847','14848'); +f('14849','14850','14851','14852'); +f('14853','14854','14855','14856'); +f('14857','14858','14859','14860'); +f('14861','14862','14863','14864'); +f('14865','14866','14867','14868'); +f('14869','14870','14871','14872'); +f('14873','14874','14875','14876'); +f('14877','14878','14879','14880'); +f('14881','14882','14883','14884'); +f('14885','14886','14887','14888'); +f('14889','14890','14891','14892'); +f('14893','14894','14895','14896'); +f('14897','14898','14899','14900'); +f('14901','14902','14903','14904'); +f('14905','14906','14907','14908'); +f('14909','14910','14911','14912'); +f('14913','14914','14915','14916'); +f('14917','14918','14919','14920'); +f('14921','14922','14923','14924'); +f('14925','14926','14927','14928'); +f('14929','14930','14931','14932'); +f('14933','14934','14935','14936'); +f('14937','14938','14939','14940'); +f('14941','14942','14943','14944'); +f('14945','14946','14947','14948'); +f('14949','14950','14951','14952'); +f('14953','14954','14955','14956'); +f('14957','14958','14959','14960'); +f('14961','14962','14963','14964'); +f('14965','14966','14967','14968'); +f('14969','14970','14971','14972'); +f('14973','14974','14975','14976'); +f('14977','14978','14979','14980'); +f('14981','14982','14983','14984'); +f('14985','14986','14987','14988'); +f('14989','14990','14991','14992'); +f('14993','14994','14995','14996'); +f('14997','14998','14999','15000'); +f('15001','15002','15003','15004'); +f('15005','15006','15007','15008'); +f('15009','15010','15011','15012'); +f('15013','15014','15015','15016'); +f('15017','15018','15019','15020'); +f('15021','15022','15023','15024'); +f('15025','15026','15027','15028'); +f('15029','15030','15031','15032'); +f('15033','15034','15035','15036'); +f('15037','15038','15039','15040'); +f('15041','15042','15043','15044'); +f('15045','15046','15047','15048'); +f('15049','15050','15051','15052'); +f('15053','15054','15055','15056'); +f('15057','15058','15059','15060'); +f('15061','15062','15063','15064'); +f('15065','15066','15067','15068'); +f('15069','15070','15071','15072'); +f('15073','15074','15075','15076'); +f('15077','15078','15079','15080'); +f('15081','15082','15083','15084'); +f('15085','15086','15087','15088'); +f('15089','15090','15091','15092'); +f('15093','15094','15095','15096'); +f('15097','15098','15099','15100'); +f('15101','15102','15103','15104'); +f('15105','15106','15107','15108'); +f('15109','15110','15111','15112'); +f('15113','15114','15115','15116'); +f('15117','15118','15119','15120'); +f('15121','15122','15123','15124'); +f('15125','15126','15127','15128'); +f('15129','15130','15131','15132'); +f('15133','15134','15135','15136'); +f('15137','15138','15139','15140'); +f('15141','15142','15143','15144'); +f('15145','15146','15147','15148'); +f('15149','15150','15151','15152'); +f('15153','15154','15155','15156'); +f('15157','15158','15159','15160'); +f('15161','15162','15163','15164'); +f('15165','15166','15167','15168'); +f('15169','15170','15171','15172'); +f('15173','15174','15175','15176'); +f('15177','15178','15179','15180'); +f('15181','15182','15183','15184'); +f('15185','15186','15187','15188'); +f('15189','15190','15191','15192'); +f('15193','15194','15195','15196'); +f('15197','15198','15199','15200'); +f('15201','15202','15203','15204'); +f('15205','15206','15207','15208'); +f('15209','15210','15211','15212'); +f('15213','15214','15215','15216'); +f('15217','15218','15219','15220'); +f('15221','15222','15223','15224'); +f('15225','15226','15227','15228'); +f('15229','15230','15231','15232'); +f('15233','15234','15235','15236'); +f('15237','15238','15239','15240'); +f('15241','15242','15243','15244'); +f('15245','15246','15247','15248'); +f('15249','15250','15251','15252'); +f('15253','15254','15255','15256'); +f('15257','15258','15259','15260'); +f('15261','15262','15263','15264'); +f('15265','15266','15267','15268'); +f('15269','15270','15271','15272'); +f('15273','15274','15275','15276'); +f('15277','15278','15279','15280'); +f('15281','15282','15283','15284'); +f('15285','15286','15287','15288'); +f('15289','15290','15291','15292'); +f('15293','15294','15295','15296'); +f('15297','15298','15299','15300'); +f('15301','15302','15303','15304'); +f('15305','15306','15307','15308'); +f('15309','15310','15311','15312'); +f('15313','15314','15315','15316'); +f('15317','15318','15319','15320'); +f('15321','15322','15323','15324'); +f('15325','15326','15327','15328'); +f('15329','15330','15331','15332'); +f('15333','15334','15335','15336'); +f('15337','15338','15339','15340'); +f('15341','15342','15343','15344'); +f('15345','15346','15347','15348'); +f('15349','15350','15351','15352'); +f('15353','15354','15355','15356'); +f('15357','15358','15359','15360'); +f('15361','15362','15363','15364'); +f('15365','15366','15367','15368'); +f('15369','15370','15371','15372'); +f('15373','15374','15375','15376'); +f('15377','15378','15379','15380'); +f('15381','15382','15383','15384'); +f('15385','15386','15387','15388'); +f('15389','15390','15391','15392'); +f('15393','15394','15395','15396'); +f('15397','15398','15399','15400'); +f('15401','15402','15403','15404'); +f('15405','15406','15407','15408'); +f('15409','15410','15411','15412'); +f('15413','15414','15415','15416'); +f('15417','15418','15419','15420'); +f('15421','15422','15423','15424'); +f('15425','15426','15427','15428'); +f('15429','15430','15431','15432'); +f('15433','15434','15435','15436'); +f('15437','15438','15439','15440'); +f('15441','15442','15443','15444'); +f('15445','15446','15447','15448'); +f('15449','15450','15451','15452'); +f('15453','15454','15455','15456'); +f('15457','15458','15459','15460'); +f('15461','15462','15463','15464'); +f('15465','15466','15467','15468'); +f('15469','15470','15471','15472'); +f('15473','15474','15475','15476'); +f('15477','15478','15479','15480'); +f('15481','15482','15483','15484'); +f('15485','15486','15487','15488'); +f('15489','15490','15491','15492'); +f('15493','15494','15495','15496'); +f('15497','15498','15499','15500'); +f('15501','15502','15503','15504'); +f('15505','15506','15507','15508'); +f('15509','15510','15511','15512'); +f('15513','15514','15515','15516'); +f('15517','15518','15519','15520'); +f('15521','15522','15523','15524'); +f('15525','15526','15527','15528'); +f('15529','15530','15531','15532'); +f('15533','15534','15535','15536'); +f('15537','15538','15539','15540'); +f('15541','15542','15543','15544'); +f('15545','15546','15547','15548'); +f('15549','15550','15551','15552'); +f('15553','15554','15555','15556'); +f('15557','15558','15559','15560'); +f('15561','15562','15563','15564'); +f('15565','15566','15567','15568'); +f('15569','15570','15571','15572'); +f('15573','15574','15575','15576'); +f('15577','15578','15579','15580'); +f('15581','15582','15583','15584'); +f('15585','15586','15587','15588'); +f('15589','15590','15591','15592'); +f('15593','15594','15595','15596'); +f('15597','15598','15599','15600'); +f('15601','15602','15603','15604'); +f('15605','15606','15607','15608'); +f('15609','15610','15611','15612'); +f('15613','15614','15615','15616'); +f('15617','15618','15619','15620'); +f('15621','15622','15623','15624'); +f('15625','15626','15627','15628'); +f('15629','15630','15631','15632'); +f('15633','15634','15635','15636'); +f('15637','15638','15639','15640'); +f('15641','15642','15643','15644'); +f('15645','15646','15647','15648'); +f('15649','15650','15651','15652'); +f('15653','15654','15655','15656'); +f('15657','15658','15659','15660'); +f('15661','15662','15663','15664'); +f('15665','15666','15667','15668'); +f('15669','15670','15671','15672'); +f('15673','15674','15675','15676'); +f('15677','15678','15679','15680'); +f('15681','15682','15683','15684'); +f('15685','15686','15687','15688'); +f('15689','15690','15691','15692'); +f('15693','15694','15695','15696'); +f('15697','15698','15699','15700'); +f('15701','15702','15703','15704'); +f('15705','15706','15707','15708'); +f('15709','15710','15711','15712'); +f('15713','15714','15715','15716'); +f('15717','15718','15719','15720'); +f('15721','15722','15723','15724'); +f('15725','15726','15727','15728'); +f('15729','15730','15731','15732'); +f('15733','15734','15735','15736'); +f('15737','15738','15739','15740'); +f('15741','15742','15743','15744'); +f('15745','15746','15747','15748'); +f('15749','15750','15751','15752'); +f('15753','15754','15755','15756'); +f('15757','15758','15759','15760'); +f('15761','15762','15763','15764'); +f('15765','15766','15767','15768'); +f('15769','15770','15771','15772'); +f('15773','15774','15775','15776'); +f('15777','15778','15779','15780'); +f('15781','15782','15783','15784'); +f('15785','15786','15787','15788'); +f('15789','15790','15791','15792'); +f('15793','15794','15795','15796'); +f('15797','15798','15799','15800'); +f('15801','15802','15803','15804'); +f('15805','15806','15807','15808'); +f('15809','15810','15811','15812'); +f('15813','15814','15815','15816'); +f('15817','15818','15819','15820'); +f('15821','15822','15823','15824'); +f('15825','15826','15827','15828'); +f('15829','15830','15831','15832'); +f('15833','15834','15835','15836'); +f('15837','15838','15839','15840'); +f('15841','15842','15843','15844'); +f('15845','15846','15847','15848'); +f('15849','15850','15851','15852'); +f('15853','15854','15855','15856'); +f('15857','15858','15859','15860'); +f('15861','15862','15863','15864'); +f('15865','15866','15867','15868'); +f('15869','15870','15871','15872'); +f('15873','15874','15875','15876'); +f('15877','15878','15879','15880'); +f('15881','15882','15883','15884'); +f('15885','15886','15887','15888'); +f('15889','15890','15891','15892'); +f('15893','15894','15895','15896'); +f('15897','15898','15899','15900'); +f('15901','15902','15903','15904'); +f('15905','15906','15907','15908'); +f('15909','15910','15911','15912'); +f('15913','15914','15915','15916'); +f('15917','15918','15919','15920'); +f('15921','15922','15923','15924'); +f('15925','15926','15927','15928'); +f('15929','15930','15931','15932'); +f('15933','15934','15935','15936'); +f('15937','15938','15939','15940'); +f('15941','15942','15943','15944'); +f('15945','15946','15947','15948'); +f('15949','15950','15951','15952'); +f('15953','15954','15955','15956'); +f('15957','15958','15959','15960'); +f('15961','15962','15963','15964'); +f('15965','15966','15967','15968'); +f('15969','15970','15971','15972'); +f('15973','15974','15975','15976'); +f('15977','15978','15979','15980'); +f('15981','15982','15983','15984'); +f('15985','15986','15987','15988'); +f('15989','15990','15991','15992'); +f('15993','15994','15995','15996'); +f('15997','15998','15999','16000'); +f('16001','16002','16003','16004'); +f('16005','16006','16007','16008'); +f('16009','16010','16011','16012'); +f('16013','16014','16015','16016'); +f('16017','16018','16019','16020'); +f('16021','16022','16023','16024'); +f('16025','16026','16027','16028'); +f('16029','16030','16031','16032'); +f('16033','16034','16035','16036'); +f('16037','16038','16039','16040'); +f('16041','16042','16043','16044'); +f('16045','16046','16047','16048'); +f('16049','16050','16051','16052'); +f('16053','16054','16055','16056'); +f('16057','16058','16059','16060'); +f('16061','16062','16063','16064'); +f('16065','16066','16067','16068'); +f('16069','16070','16071','16072'); +f('16073','16074','16075','16076'); +f('16077','16078','16079','16080'); +f('16081','16082','16083','16084'); +f('16085','16086','16087','16088'); +f('16089','16090','16091','16092'); +f('16093','16094','16095','16096'); +f('16097','16098','16099','16100'); +f('16101','16102','16103','16104'); +f('16105','16106','16107','16108'); +f('16109','16110','16111','16112'); +f('16113','16114','16115','16116'); +f('16117','16118','16119','16120'); +f('16121','16122','16123','16124'); +f('16125','16126','16127','16128'); +f('16129','16130','16131','16132'); +f('16133','16134','16135','16136'); +f('16137','16138','16139','16140'); +f('16141','16142','16143','16144'); +f('16145','16146','16147','16148'); +f('16149','16150','16151','16152'); +f('16153','16154','16155','16156'); +f('16157','16158','16159','16160'); +f('16161','16162','16163','16164'); +f('16165','16166','16167','16168'); +f('16169','16170','16171','16172'); +f('16173','16174','16175','16176'); +f('16177','16178','16179','16180'); +f('16181','16182','16183','16184'); +f('16185','16186','16187','16188'); +f('16189','16190','16191','16192'); +f('16193','16194','16195','16196'); +f('16197','16198','16199','16200'); +f('16201','16202','16203','16204'); +f('16205','16206','16207','16208'); +f('16209','16210','16211','16212'); +f('16213','16214','16215','16216'); +f('16217','16218','16219','16220'); +f('16221','16222','16223','16224'); +f('16225','16226','16227','16228'); +f('16229','16230','16231','16232'); +f('16233','16234','16235','16236'); +f('16237','16238','16239','16240'); +f('16241','16242','16243','16244'); +f('16245','16246','16247','16248'); +f('16249','16250','16251','16252'); +f('16253','16254','16255','16256'); +f('16257','16258','16259','16260'); +f('16261','16262','16263','16264'); +f('16265','16266','16267','16268'); +f('16269','16270','16271','16272'); +f('16273','16274','16275','16276'); +f('16277','16278','16279','16280'); +f('16281','16282','16283','16284'); +f('16285','16286','16287','16288'); +f('16289','16290','16291','16292'); +f('16293','16294','16295','16296'); +f('16297','16298','16299','16300'); +f('16301','16302','16303','16304'); +f('16305','16306','16307','16308'); +f('16309','16310','16311','16312'); +f('16313','16314','16315','16316'); +f('16317','16318','16319','16320'); +f('16321','16322','16323','16324'); +f('16325','16326','16327','16328'); +f('16329','16330','16331','16332'); +f('16333','16334','16335','16336'); +f('16337','16338','16339','16340'); +f('16341','16342','16343','16344'); +f('16345','16346','16347','16348'); +f('16349','16350','16351','16352'); +f('16353','16354','16355','16356'); +f('16357','16358','16359','16360'); +f('16361','16362','16363','16364'); +f('16365','16366','16367','16368'); +f('16369','16370','16371','16372'); +f('16373','16374','16375','16376'); +f('16377','16378','16379','16380'); +f('16381','16382','16383','16384'); +f('16385','16386','16387','16388'); +f('16389','16390','16391','16392'); +f('16393','16394','16395','16396'); +f('16397','16398','16399','16400'); +f('16401','16402','16403','16404'); +f('16405','16406','16407','16408'); +f('16409','16410','16411','16412'); +f('16413','16414','16415','16416'); +f('16417','16418','16419','16420'); +f('16421','16422','16423','16424'); +f('16425','16426','16427','16428'); +f('16429','16430','16431','16432'); +f('16433','16434','16435','16436'); +f('16437','16438','16439','16440'); +f('16441','16442','16443','16444'); +f('16445','16446','16447','16448'); +f('16449','16450','16451','16452'); +f('16453','16454','16455','16456'); +f('16457','16458','16459','16460'); +f('16461','16462','16463','16464'); +f('16465','16466','16467','16468'); +f('16469','16470','16471','16472'); +f('16473','16474','16475','16476'); +f('16477','16478','16479','16480'); +f('16481','16482','16483','16484'); +f('16485','16486','16487','16488'); +f('16489','16490','16491','16492'); +f('16493','16494','16495','16496'); +f('16497','16498','16499','16500'); +f('16501','16502','16503','16504'); +f('16505','16506','16507','16508'); +f('16509','16510','16511','16512'); +f('16513','16514','16515','16516'); +f('16517','16518','16519','16520'); +f('16521','16522','16523','16524'); +f('16525','16526','16527','16528'); +f('16529','16530','16531','16532'); +f('16533','16534','16535','16536'); +f('16537','16538','16539','16540'); +f('16541','16542','16543','16544'); +f('16545','16546','16547','16548'); +f('16549','16550','16551','16552'); +f('16553','16554','16555','16556'); +f('16557','16558','16559','16560'); +f('16561','16562','16563','16564'); +f('16565','16566','16567','16568'); +f('16569','16570','16571','16572'); +f('16573','16574','16575','16576'); +f('16577','16578','16579','16580'); +f('16581','16582','16583','16584'); +f('16585','16586','16587','16588'); +f('16589','16590','16591','16592'); +f('16593','16594','16595','16596'); +f('16597','16598','16599','16600'); +f('16601','16602','16603','16604'); +f('16605','16606','16607','16608'); +f('16609','16610','16611','16612'); +f('16613','16614','16615','16616'); +f('16617','16618','16619','16620'); +f('16621','16622','16623','16624'); +f('16625','16626','16627','16628'); +f('16629','16630','16631','16632'); +f('16633','16634','16635','16636'); +f('16637','16638','16639','16640'); +f('16641','16642','16643','16644'); +f('16645','16646','16647','16648'); +f('16649','16650','16651','16652'); +f('16653','16654','16655','16656'); +f('16657','16658','16659','16660'); +f('16661','16662','16663','16664'); +f('16665','16666','16667','16668'); +f('16669','16670','16671','16672'); +f('16673','16674','16675','16676'); +f('16677','16678','16679','16680'); +f('16681','16682','16683','16684'); +f('16685','16686','16687','16688'); +f('16689','16690','16691','16692'); +f('16693','16694','16695','16696'); +f('16697','16698','16699','16700'); +f('16701','16702','16703','16704'); +f('16705','16706','16707','16708'); +f('16709','16710','16711','16712'); +f('16713','16714','16715','16716'); +f('16717','16718','16719','16720'); +f('16721','16722','16723','16724'); +f('16725','16726','16727','16728'); +f('16729','16730','16731','16732'); +f('16733','16734','16735','16736'); +f('16737','16738','16739','16740'); +f('16741','16742','16743','16744'); +f('16745','16746','16747','16748'); +f('16749','16750','16751','16752'); +f('16753','16754','16755','16756'); +f('16757','16758','16759','16760'); +f('16761','16762','16763','16764'); +f('16765','16766','16767','16768'); +f('16769','16770','16771','16772'); +f('16773','16774','16775','16776'); +f('16777','16778','16779','16780'); +f('16781','16782','16783','16784'); +f('16785','16786','16787','16788'); +f('16789','16790','16791','16792'); +f('16793','16794','16795','16796'); +f('16797','16798','16799','16800'); +f('16801','16802','16803','16804'); +f('16805','16806','16807','16808'); +f('16809','16810','16811','16812'); +f('16813','16814','16815','16816'); +f('16817','16818','16819','16820'); +f('16821','16822','16823','16824'); +f('16825','16826','16827','16828'); +f('16829','16830','16831','16832'); +f('16833','16834','16835','16836'); +f('16837','16838','16839','16840'); +f('16841','16842','16843','16844'); +f('16845','16846','16847','16848'); +f('16849','16850','16851','16852'); +f('16853','16854','16855','16856'); +f('16857','16858','16859','16860'); +f('16861','16862','16863','16864'); +f('16865','16866','16867','16868'); +f('16869','16870','16871','16872'); +f('16873','16874','16875','16876'); +f('16877','16878','16879','16880'); +f('16881','16882','16883','16884'); +f('16885','16886','16887','16888'); +f('16889','16890','16891','16892'); +f('16893','16894','16895','16896'); +f('16897','16898','16899','16900'); +f('16901','16902','16903','16904'); +f('16905','16906','16907','16908'); +f('16909','16910','16911','16912'); +f('16913','16914','16915','16916'); +f('16917','16918','16919','16920'); +f('16921','16922','16923','16924'); +f('16925','16926','16927','16928'); +f('16929','16930','16931','16932'); +f('16933','16934','16935','16936'); +f('16937','16938','16939','16940'); +f('16941','16942','16943','16944'); +f('16945','16946','16947','16948'); +f('16949','16950','16951','16952'); +f('16953','16954','16955','16956'); +f('16957','16958','16959','16960'); +f('16961','16962','16963','16964'); +f('16965','16966','16967','16968'); +f('16969','16970','16971','16972'); +f('16973','16974','16975','16976'); +f('16977','16978','16979','16980'); +f('16981','16982','16983','16984'); +f('16985','16986','16987','16988'); +f('16989','16990','16991','16992'); +f('16993','16994','16995','16996'); +f('16997','16998','16999','17000'); +f('17001','17002','17003','17004'); +f('17005','17006','17007','17008'); +f('17009','17010','17011','17012'); +f('17013','17014','17015','17016'); +f('17017','17018','17019','17020'); +f('17021','17022','17023','17024'); +f('17025','17026','17027','17028'); +f('17029','17030','17031','17032'); +f('17033','17034','17035','17036'); +f('17037','17038','17039','17040'); +f('17041','17042','17043','17044'); +f('17045','17046','17047','17048'); +f('17049','17050','17051','17052'); +f('17053','17054','17055','17056'); +f('17057','17058','17059','17060'); +f('17061','17062','17063','17064'); +f('17065','17066','17067','17068'); +f('17069','17070','17071','17072'); +f('17073','17074','17075','17076'); +f('17077','17078','17079','17080'); +f('17081','17082','17083','17084'); +f('17085','17086','17087','17088'); +f('17089','17090','17091','17092'); +f('17093','17094','17095','17096'); +f('17097','17098','17099','17100'); +f('17101','17102','17103','17104'); +f('17105','17106','17107','17108'); +f('17109','17110','17111','17112'); +f('17113','17114','17115','17116'); +f('17117','17118','17119','17120'); +f('17121','17122','17123','17124'); +f('17125','17126','17127','17128'); +f('17129','17130','17131','17132'); +f('17133','17134','17135','17136'); +f('17137','17138','17139','17140'); +f('17141','17142','17143','17144'); +f('17145','17146','17147','17148'); +f('17149','17150','17151','17152'); +f('17153','17154','17155','17156'); +f('17157','17158','17159','17160'); +f('17161','17162','17163','17164'); +f('17165','17166','17167','17168'); +f('17169','17170','17171','17172'); +f('17173','17174','17175','17176'); +f('17177','17178','17179','17180'); +f('17181','17182','17183','17184'); +f('17185','17186','17187','17188'); +f('17189','17190','17191','17192'); +f('17193','17194','17195','17196'); +f('17197','17198','17199','17200'); +f('17201','17202','17203','17204'); +f('17205','17206','17207','17208'); +f('17209','17210','17211','17212'); +f('17213','17214','17215','17216'); +f('17217','17218','17219','17220'); +f('17221','17222','17223','17224'); +f('17225','17226','17227','17228'); +f('17229','17230','17231','17232'); +f('17233','17234','17235','17236'); +f('17237','17238','17239','17240'); +f('17241','17242','17243','17244'); +f('17245','17246','17247','17248'); +f('17249','17250','17251','17252'); +f('17253','17254','17255','17256'); +f('17257','17258','17259','17260'); +f('17261','17262','17263','17264'); +f('17265','17266','17267','17268'); +f('17269','17270','17271','17272'); +f('17273','17274','17275','17276'); +f('17277','17278','17279','17280'); +f('17281','17282','17283','17284'); +f('17285','17286','17287','17288'); +f('17289','17290','17291','17292'); +f('17293','17294','17295','17296'); +f('17297','17298','17299','17300'); +f('17301','17302','17303','17304'); +f('17305','17306','17307','17308'); +f('17309','17310','17311','17312'); +f('17313','17314','17315','17316'); +f('17317','17318','17319','17320'); +f('17321','17322','17323','17324'); +f('17325','17326','17327','17328'); +f('17329','17330','17331','17332'); +f('17333','17334','17335','17336'); +f('17337','17338','17339','17340'); +f('17341','17342','17343','17344'); +f('17345','17346','17347','17348'); +f('17349','17350','17351','17352'); +f('17353','17354','17355','17356'); +f('17357','17358','17359','17360'); +f('17361','17362','17363','17364'); +f('17365','17366','17367','17368'); +f('17369','17370','17371','17372'); +f('17373','17374','17375','17376'); +f('17377','17378','17379','17380'); +f('17381','17382','17383','17384'); +f('17385','17386','17387','17388'); +f('17389','17390','17391','17392'); +f('17393','17394','17395','17396'); +f('17397','17398','17399','17400'); +f('17401','17402','17403','17404'); +f('17405','17406','17407','17408'); +f('17409','17410','17411','17412'); +f('17413','17414','17415','17416'); +f('17417','17418','17419','17420'); +f('17421','17422','17423','17424'); +f('17425','17426','17427','17428'); +f('17429','17430','17431','17432'); +f('17433','17434','17435','17436'); +f('17437','17438','17439','17440'); +f('17441','17442','17443','17444'); +f('17445','17446','17447','17448'); +f('17449','17450','17451','17452'); +f('17453','17454','17455','17456'); +f('17457','17458','17459','17460'); +f('17461','17462','17463','17464'); +f('17465','17466','17467','17468'); +f('17469','17470','17471','17472'); +f('17473','17474','17475','17476'); +f('17477','17478','17479','17480'); +f('17481','17482','17483','17484'); +f('17485','17486','17487','17488'); +f('17489','17490','17491','17492'); +f('17493','17494','17495','17496'); +f('17497','17498','17499','17500'); +f('17501','17502','17503','17504'); +f('17505','17506','17507','17508'); +f('17509','17510','17511','17512'); +f('17513','17514','17515','17516'); +f('17517','17518','17519','17520'); +f('17521','17522','17523','17524'); +f('17525','17526','17527','17528'); +f('17529','17530','17531','17532'); +f('17533','17534','17535','17536'); +f('17537','17538','17539','17540'); +f('17541','17542','17543','17544'); +f('17545','17546','17547','17548'); +f('17549','17550','17551','17552'); +f('17553','17554','17555','17556'); +f('17557','17558','17559','17560'); +f('17561','17562','17563','17564'); +f('17565','17566','17567','17568'); +f('17569','17570','17571','17572'); +f('17573','17574','17575','17576'); +f('17577','17578','17579','17580'); +f('17581','17582','17583','17584'); +f('17585','17586','17587','17588'); +f('17589','17590','17591','17592'); +f('17593','17594','17595','17596'); +f('17597','17598','17599','17600'); +f('17601','17602','17603','17604'); +f('17605','17606','17607','17608'); +f('17609','17610','17611','17612'); +f('17613','17614','17615','17616'); +f('17617','17618','17619','17620'); +f('17621','17622','17623','17624'); +f('17625','17626','17627','17628'); +f('17629','17630','17631','17632'); +f('17633','17634','17635','17636'); +f('17637','17638','17639','17640'); +f('17641','17642','17643','17644'); +f('17645','17646','17647','17648'); +f('17649','17650','17651','17652'); +f('17653','17654','17655','17656'); +f('17657','17658','17659','17660'); +f('17661','17662','17663','17664'); +f('17665','17666','17667','17668'); +f('17669','17670','17671','17672'); +f('17673','17674','17675','17676'); +f('17677','17678','17679','17680'); +f('17681','17682','17683','17684'); +f('17685','17686','17687','17688'); +f('17689','17690','17691','17692'); +f('17693','17694','17695','17696'); +f('17697','17698','17699','17700'); +f('17701','17702','17703','17704'); +f('17705','17706','17707','17708'); +f('17709','17710','17711','17712'); +f('17713','17714','17715','17716'); +f('17717','17718','17719','17720'); +f('17721','17722','17723','17724'); +f('17725','17726','17727','17728'); +f('17729','17730','17731','17732'); +f('17733','17734','17735','17736'); +f('17737','17738','17739','17740'); +f('17741','17742','17743','17744'); +f('17745','17746','17747','17748'); +f('17749','17750','17751','17752'); +f('17753','17754','17755','17756'); +f('17757','17758','17759','17760'); +f('17761','17762','17763','17764'); +f('17765','17766','17767','17768'); +f('17769','17770','17771','17772'); +f('17773','17774','17775','17776'); +f('17777','17778','17779','17780'); +f('17781','17782','17783','17784'); +f('17785','17786','17787','17788'); +f('17789','17790','17791','17792'); +f('17793','17794','17795','17796'); +f('17797','17798','17799','17800'); +f('17801','17802','17803','17804'); +f('17805','17806','17807','17808'); +f('17809','17810','17811','17812'); +f('17813','17814','17815','17816'); +f('17817','17818','17819','17820'); +f('17821','17822','17823','17824'); +f('17825','17826','17827','17828'); +f('17829','17830','17831','17832'); +f('17833','17834','17835','17836'); +f('17837','17838','17839','17840'); +f('17841','17842','17843','17844'); +f('17845','17846','17847','17848'); +f('17849','17850','17851','17852'); +f('17853','17854','17855','17856'); +f('17857','17858','17859','17860'); +f('17861','17862','17863','17864'); +f('17865','17866','17867','17868'); +f('17869','17870','17871','17872'); +f('17873','17874','17875','17876'); +f('17877','17878','17879','17880'); +f('17881','17882','17883','17884'); +f('17885','17886','17887','17888'); +f('17889','17890','17891','17892'); +f('17893','17894','17895','17896'); +f('17897','17898','17899','17900'); +f('17901','17902','17903','17904'); +f('17905','17906','17907','17908'); +f('17909','17910','17911','17912'); +f('17913','17914','17915','17916'); +f('17917','17918','17919','17920'); +f('17921','17922','17923','17924'); +f('17925','17926','17927','17928'); +f('17929','17930','17931','17932'); +f('17933','17934','17935','17936'); +f('17937','17938','17939','17940'); +f('17941','17942','17943','17944'); +f('17945','17946','17947','17948'); +f('17949','17950','17951','17952'); +f('17953','17954','17955','17956'); +f('17957','17958','17959','17960'); +f('17961','17962','17963','17964'); +f('17965','17966','17967','17968'); +f('17969','17970','17971','17972'); +f('17973','17974','17975','17976'); +f('17977','17978','17979','17980'); +f('17981','17982','17983','17984'); +f('17985','17986','17987','17988'); +f('17989','17990','17991','17992'); +f('17993','17994','17995','17996'); +f('17997','17998','17999','18000'); +f('18001','18002','18003','18004'); +f('18005','18006','18007','18008'); +f('18009','18010','18011','18012'); +f('18013','18014','18015','18016'); +f('18017','18018','18019','18020'); +f('18021','18022','18023','18024'); +f('18025','18026','18027','18028'); +f('18029','18030','18031','18032'); +f('18033','18034','18035','18036'); +f('18037','18038','18039','18040'); +f('18041','18042','18043','18044'); +f('18045','18046','18047','18048'); +f('18049','18050','18051','18052'); +f('18053','18054','18055','18056'); +f('18057','18058','18059','18060'); +f('18061','18062','18063','18064'); +f('18065','18066','18067','18068'); +f('18069','18070','18071','18072'); +f('18073','18074','18075','18076'); +f('18077','18078','18079','18080'); +f('18081','18082','18083','18084'); +f('18085','18086','18087','18088'); +f('18089','18090','18091','18092'); +f('18093','18094','18095','18096'); +f('18097','18098','18099','18100'); +f('18101','18102','18103','18104'); +f('18105','18106','18107','18108'); +f('18109','18110','18111','18112'); +f('18113','18114','18115','18116'); +f('18117','18118','18119','18120'); +f('18121','18122','18123','18124'); +f('18125','18126','18127','18128'); +f('18129','18130','18131','18132'); +f('18133','18134','18135','18136'); +f('18137','18138','18139','18140'); +f('18141','18142','18143','18144'); +f('18145','18146','18147','18148'); +f('18149','18150','18151','18152'); +f('18153','18154','18155','18156'); +f('18157','18158','18159','18160'); +f('18161','18162','18163','18164'); +f('18165','18166','18167','18168'); +f('18169','18170','18171','18172'); +f('18173','18174','18175','18176'); +f('18177','18178','18179','18180'); +f('18181','18182','18183','18184'); +f('18185','18186','18187','18188'); +f('18189','18190','18191','18192'); +f('18193','18194','18195','18196'); +f('18197','18198','18199','18200'); +f('18201','18202','18203','18204'); +f('18205','18206','18207','18208'); +f('18209','18210','18211','18212'); +f('18213','18214','18215','18216'); +f('18217','18218','18219','18220'); +f('18221','18222','18223','18224'); +f('18225','18226','18227','18228'); +f('18229','18230','18231','18232'); +f('18233','18234','18235','18236'); +f('18237','18238','18239','18240'); +f('18241','18242','18243','18244'); +f('18245','18246','18247','18248'); +f('18249','18250','18251','18252'); +f('18253','18254','18255','18256'); +f('18257','18258','18259','18260'); +f('18261','18262','18263','18264'); +f('18265','18266','18267','18268'); +f('18269','18270','18271','18272'); +f('18273','18274','18275','18276'); +f('18277','18278','18279','18280'); +f('18281','18282','18283','18284'); +f('18285','18286','18287','18288'); +f('18289','18290','18291','18292'); +f('18293','18294','18295','18296'); +f('18297','18298','18299','18300'); +f('18301','18302','18303','18304'); +f('18305','18306','18307','18308'); +f('18309','18310','18311','18312'); +f('18313','18314','18315','18316'); +f('18317','18318','18319','18320'); +f('18321','18322','18323','18324'); +f('18325','18326','18327','18328'); +f('18329','18330','18331','18332'); +f('18333','18334','18335','18336'); +f('18337','18338','18339','18340'); +f('18341','18342','18343','18344'); +f('18345','18346','18347','18348'); +f('18349','18350','18351','18352'); +f('18353','18354','18355','18356'); +f('18357','18358','18359','18360'); +f('18361','18362','18363','18364'); +f('18365','18366','18367','18368'); +f('18369','18370','18371','18372'); +f('18373','18374','18375','18376'); +f('18377','18378','18379','18380'); +f('18381','18382','18383','18384'); +f('18385','18386','18387','18388'); +f('18389','18390','18391','18392'); +f('18393','18394','18395','18396'); +f('18397','18398','18399','18400'); +f('18401','18402','18403','18404'); +f('18405','18406','18407','18408'); +f('18409','18410','18411','18412'); +f('18413','18414','18415','18416'); +f('18417','18418','18419','18420'); +f('18421','18422','18423','18424'); +f('18425','18426','18427','18428'); +f('18429','18430','18431','18432'); +f('18433','18434','18435','18436'); +f('18437','18438','18439','18440'); +f('18441','18442','18443','18444'); +f('18445','18446','18447','18448'); +f('18449','18450','18451','18452'); +f('18453','18454','18455','18456'); +f('18457','18458','18459','18460'); +f('18461','18462','18463','18464'); +f('18465','18466','18467','18468'); +f('18469','18470','18471','18472'); +f('18473','18474','18475','18476'); +f('18477','18478','18479','18480'); +f('18481','18482','18483','18484'); +f('18485','18486','18487','18488'); +f('18489','18490','18491','18492'); +f('18493','18494','18495','18496'); +f('18497','18498','18499','18500'); +f('18501','18502','18503','18504'); +f('18505','18506','18507','18508'); +f('18509','18510','18511','18512'); +f('18513','18514','18515','18516'); +f('18517','18518','18519','18520'); +f('18521','18522','18523','18524'); +f('18525','18526','18527','18528'); +f('18529','18530','18531','18532'); +f('18533','18534','18535','18536'); +f('18537','18538','18539','18540'); +f('18541','18542','18543','18544'); +f('18545','18546','18547','18548'); +f('18549','18550','18551','18552'); +f('18553','18554','18555','18556'); +f('18557','18558','18559','18560'); +f('18561','18562','18563','18564'); +f('18565','18566','18567','18568'); +f('18569','18570','18571','18572'); +f('18573','18574','18575','18576'); +f('18577','18578','18579','18580'); +f('18581','18582','18583','18584'); +f('18585','18586','18587','18588'); +f('18589','18590','18591','18592'); +f('18593','18594','18595','18596'); +f('18597','18598','18599','18600'); +f('18601','18602','18603','18604'); +f('18605','18606','18607','18608'); +f('18609','18610','18611','18612'); +f('18613','18614','18615','18616'); +f('18617','18618','18619','18620'); +f('18621','18622','18623','18624'); +f('18625','18626','18627','18628'); +f('18629','18630','18631','18632'); +f('18633','18634','18635','18636'); +f('18637','18638','18639','18640'); +f('18641','18642','18643','18644'); +f('18645','18646','18647','18648'); +f('18649','18650','18651','18652'); +f('18653','18654','18655','18656'); +f('18657','18658','18659','18660'); +f('18661','18662','18663','18664'); +f('18665','18666','18667','18668'); +f('18669','18670','18671','18672'); +f('18673','18674','18675','18676'); +f('18677','18678','18679','18680'); +f('18681','18682','18683','18684'); +f('18685','18686','18687','18688'); +f('18689','18690','18691','18692'); +f('18693','18694','18695','18696'); +f('18697','18698','18699','18700'); +f('18701','18702','18703','18704'); +f('18705','18706','18707','18708'); +f('18709','18710','18711','18712'); +f('18713','18714','18715','18716'); +f('18717','18718','18719','18720'); +f('18721','18722','18723','18724'); +f('18725','18726','18727','18728'); +f('18729','18730','18731','18732'); +f('18733','18734','18735','18736'); +f('18737','18738','18739','18740'); +f('18741','18742','18743','18744'); +f('18745','18746','18747','18748'); +f('18749','18750','18751','18752'); +f('18753','18754','18755','18756'); +f('18757','18758','18759','18760'); +f('18761','18762','18763','18764'); +f('18765','18766','18767','18768'); +f('18769','18770','18771','18772'); +f('18773','18774','18775','18776'); +f('18777','18778','18779','18780'); +f('18781','18782','18783','18784'); +f('18785','18786','18787','18788'); +f('18789','18790','18791','18792'); +f('18793','18794','18795','18796'); +f('18797','18798','18799','18800'); +f('18801','18802','18803','18804'); +f('18805','18806','18807','18808'); +f('18809','18810','18811','18812'); +f('18813','18814','18815','18816'); +f('18817','18818','18819','18820'); +f('18821','18822','18823','18824'); +f('18825','18826','18827','18828'); +f('18829','18830','18831','18832'); +f('18833','18834','18835','18836'); +f('18837','18838','18839','18840'); +f('18841','18842','18843','18844'); +f('18845','18846','18847','18848'); +f('18849','18850','18851','18852'); +f('18853','18854','18855','18856'); +f('18857','18858','18859','18860'); +f('18861','18862','18863','18864'); +f('18865','18866','18867','18868'); +f('18869','18870','18871','18872'); +f('18873','18874','18875','18876'); +f('18877','18878','18879','18880'); +f('18881','18882','18883','18884'); +f('18885','18886','18887','18888'); +f('18889','18890','18891','18892'); +f('18893','18894','18895','18896'); +f('18897','18898','18899','18900'); +f('18901','18902','18903','18904'); +f('18905','18906','18907','18908'); +f('18909','18910','18911','18912'); +f('18913','18914','18915','18916'); +f('18917','18918','18919','18920'); +f('18921','18922','18923','18924'); +f('18925','18926','18927','18928'); +f('18929','18930','18931','18932'); +f('18933','18934','18935','18936'); +f('18937','18938','18939','18940'); +f('18941','18942','18943','18944'); +f('18945','18946','18947','18948'); +f('18949','18950','18951','18952'); +f('18953','18954','18955','18956'); +f('18957','18958','18959','18960'); +f('18961','18962','18963','18964'); +f('18965','18966','18967','18968'); +f('18969','18970','18971','18972'); +f('18973','18974','18975','18976'); +f('18977','18978','18979','18980'); +f('18981','18982','18983','18984'); +f('18985','18986','18987','18988'); +f('18989','18990','18991','18992'); +f('18993','18994','18995','18996'); +f('18997','18998','18999','19000'); +f('19001','19002','19003','19004'); +f('19005','19006','19007','19008'); +f('19009','19010','19011','19012'); +f('19013','19014','19015','19016'); +f('19017','19018','19019','19020'); +f('19021','19022','19023','19024'); +f('19025','19026','19027','19028'); +f('19029','19030','19031','19032'); +f('19033','19034','19035','19036'); +f('19037','19038','19039','19040'); +f('19041','19042','19043','19044'); +f('19045','19046','19047','19048'); +f('19049','19050','19051','19052'); +f('19053','19054','19055','19056'); +f('19057','19058','19059','19060'); +f('19061','19062','19063','19064'); +f('19065','19066','19067','19068'); +f('19069','19070','19071','19072'); +f('19073','19074','19075','19076'); +f('19077','19078','19079','19080'); +f('19081','19082','19083','19084'); +f('19085','19086','19087','19088'); +f('19089','19090','19091','19092'); +f('19093','19094','19095','19096'); +f('19097','19098','19099','19100'); +f('19101','19102','19103','19104'); +f('19105','19106','19107','19108'); +f('19109','19110','19111','19112'); +f('19113','19114','19115','19116'); +f('19117','19118','19119','19120'); +f('19121','19122','19123','19124'); +f('19125','19126','19127','19128'); +f('19129','19130','19131','19132'); +f('19133','19134','19135','19136'); +f('19137','19138','19139','19140'); +f('19141','19142','19143','19144'); +f('19145','19146','19147','19148'); +f('19149','19150','19151','19152'); +f('19153','19154','19155','19156'); +f('19157','19158','19159','19160'); +f('19161','19162','19163','19164'); +f('19165','19166','19167','19168'); +f('19169','19170','19171','19172'); +f('19173','19174','19175','19176'); +f('19177','19178','19179','19180'); +f('19181','19182','19183','19184'); +f('19185','19186','19187','19188'); +f('19189','19190','19191','19192'); +f('19193','19194','19195','19196'); +f('19197','19198','19199','19200'); +f('19201','19202','19203','19204'); +f('19205','19206','19207','19208'); +f('19209','19210','19211','19212'); +f('19213','19214','19215','19216'); +f('19217','19218','19219','19220'); +f('19221','19222','19223','19224'); +f('19225','19226','19227','19228'); +f('19229','19230','19231','19232'); +f('19233','19234','19235','19236'); +f('19237','19238','19239','19240'); +f('19241','19242','19243','19244'); +f('19245','19246','19247','19248'); +f('19249','19250','19251','19252'); +f('19253','19254','19255','19256'); +f('19257','19258','19259','19260'); +f('19261','19262','19263','19264'); +f('19265','19266','19267','19268'); +f('19269','19270','19271','19272'); +f('19273','19274','19275','19276'); +f('19277','19278','19279','19280'); +f('19281','19282','19283','19284'); +f('19285','19286','19287','19288'); +f('19289','19290','19291','19292'); +f('19293','19294','19295','19296'); +f('19297','19298','19299','19300'); +f('19301','19302','19303','19304'); +f('19305','19306','19307','19308'); +f('19309','19310','19311','19312'); +f('19313','19314','19315','19316'); +f('19317','19318','19319','19320'); +f('19321','19322','19323','19324'); +f('19325','19326','19327','19328'); +f('19329','19330','19331','19332'); +f('19333','19334','19335','19336'); +f('19337','19338','19339','19340'); +f('19341','19342','19343','19344'); +f('19345','19346','19347','19348'); +f('19349','19350','19351','19352'); +f('19353','19354','19355','19356'); +f('19357','19358','19359','19360'); +f('19361','19362','19363','19364'); +f('19365','19366','19367','19368'); +f('19369','19370','19371','19372'); +f('19373','19374','19375','19376'); +f('19377','19378','19379','19380'); +f('19381','19382','19383','19384'); +f('19385','19386','19387','19388'); +f('19389','19390','19391','19392'); +f('19393','19394','19395','19396'); +f('19397','19398','19399','19400'); +f('19401','19402','19403','19404'); +f('19405','19406','19407','19408'); +f('19409','19410','19411','19412'); +f('19413','19414','19415','19416'); +f('19417','19418','19419','19420'); +f('19421','19422','19423','19424'); +f('19425','19426','19427','19428'); +f('19429','19430','19431','19432'); +f('19433','19434','19435','19436'); +f('19437','19438','19439','19440'); +f('19441','19442','19443','19444'); +f('19445','19446','19447','19448'); +f('19449','19450','19451','19452'); +f('19453','19454','19455','19456'); +f('19457','19458','19459','19460'); +f('19461','19462','19463','19464'); +f('19465','19466','19467','19468'); +f('19469','19470','19471','19472'); +f('19473','19474','19475','19476'); +f('19477','19478','19479','19480'); +f('19481','19482','19483','19484'); +f('19485','19486','19487','19488'); +f('19489','19490','19491','19492'); +f('19493','19494','19495','19496'); +f('19497','19498','19499','19500'); +f('19501','19502','19503','19504'); +f('19505','19506','19507','19508'); +f('19509','19510','19511','19512'); +f('19513','19514','19515','19516'); +f('19517','19518','19519','19520'); +f('19521','19522','19523','19524'); +f('19525','19526','19527','19528'); +f('19529','19530','19531','19532'); +f('19533','19534','19535','19536'); +f('19537','19538','19539','19540'); +f('19541','19542','19543','19544'); +f('19545','19546','19547','19548'); +f('19549','19550','19551','19552'); +f('19553','19554','19555','19556'); +f('19557','19558','19559','19560'); +f('19561','19562','19563','19564'); +f('19565','19566','19567','19568'); +f('19569','19570','19571','19572'); +f('19573','19574','19575','19576'); +f('19577','19578','19579','19580'); +f('19581','19582','19583','19584'); +f('19585','19586','19587','19588'); +f('19589','19590','19591','19592'); +f('19593','19594','19595','19596'); +f('19597','19598','19599','19600'); +f('19601','19602','19603','19604'); +f('19605','19606','19607','19608'); +f('19609','19610','19611','19612'); +f('19613','19614','19615','19616'); +f('19617','19618','19619','19620'); +f('19621','19622','19623','19624'); +f('19625','19626','19627','19628'); +f('19629','19630','19631','19632'); +f('19633','19634','19635','19636'); +f('19637','19638','19639','19640'); +f('19641','19642','19643','19644'); +f('19645','19646','19647','19648'); +f('19649','19650','19651','19652'); +f('19653','19654','19655','19656'); +f('19657','19658','19659','19660'); +f('19661','19662','19663','19664'); +f('19665','19666','19667','19668'); +f('19669','19670','19671','19672'); +f('19673','19674','19675','19676'); +f('19677','19678','19679','19680'); +f('19681','19682','19683','19684'); +f('19685','19686','19687','19688'); +f('19689','19690','19691','19692'); +f('19693','19694','19695','19696'); +f('19697','19698','19699','19700'); +f('19701','19702','19703','19704'); +f('19705','19706','19707','19708'); +f('19709','19710','19711','19712'); +f('19713','19714','19715','19716'); +f('19717','19718','19719','19720'); +f('19721','19722','19723','19724'); +f('19725','19726','19727','19728'); +f('19729','19730','19731','19732'); +f('19733','19734','19735','19736'); +f('19737','19738','19739','19740'); +f('19741','19742','19743','19744'); +f('19745','19746','19747','19748'); +f('19749','19750','19751','19752'); +f('19753','19754','19755','19756'); +f('19757','19758','19759','19760'); +f('19761','19762','19763','19764'); +f('19765','19766','19767','19768'); +f('19769','19770','19771','19772'); +f('19773','19774','19775','19776'); +f('19777','19778','19779','19780'); +f('19781','19782','19783','19784'); +f('19785','19786','19787','19788'); +f('19789','19790','19791','19792'); +f('19793','19794','19795','19796'); +f('19797','19798','19799','19800'); +f('19801','19802','19803','19804'); +f('19805','19806','19807','19808'); +f('19809','19810','19811','19812'); +f('19813','19814','19815','19816'); +f('19817','19818','19819','19820'); +f('19821','19822','19823','19824'); +f('19825','19826','19827','19828'); +f('19829','19830','19831','19832'); +f('19833','19834','19835','19836'); +f('19837','19838','19839','19840'); +f('19841','19842','19843','19844'); +f('19845','19846','19847','19848'); +f('19849','19850','19851','19852'); +f('19853','19854','19855','19856'); +f('19857','19858','19859','19860'); +f('19861','19862','19863','19864'); +f('19865','19866','19867','19868'); +f('19869','19870','19871','19872'); +f('19873','19874','19875','19876'); +f('19877','19878','19879','19880'); +f('19881','19882','19883','19884'); +f('19885','19886','19887','19888'); +f('19889','19890','19891','19892'); +f('19893','19894','19895','19896'); +f('19897','19898','19899','19900'); +f('19901','19902','19903','19904'); +f('19905','19906','19907','19908'); +f('19909','19910','19911','19912'); +f('19913','19914','19915','19916'); +f('19917','19918','19919','19920'); +f('19921','19922','19923','19924'); +f('19925','19926','19927','19928'); +f('19929','19930','19931','19932'); +f('19933','19934','19935','19936'); +f('19937','19938','19939','19940'); +f('19941','19942','19943','19944'); +f('19945','19946','19947','19948'); +f('19949','19950','19951','19952'); +f('19953','19954','19955','19956'); +f('19957','19958','19959','19960'); +f('19961','19962','19963','19964'); +f('19965','19966','19967','19968'); +f('19969','19970','19971','19972'); +f('19973','19974','19975','19976'); +f('19977','19978','19979','19980'); +f('19981','19982','19983','19984'); +f('19985','19986','19987','19988'); +f('19989','19990','19991','19992'); +f('19993','19994','19995','19996'); +f('19997','19998','19999','20000'); +f('20001','20002','20003','20004'); +f('20005','20006','20007','20008'); +f('20009','20010','20011','20012'); +f('20013','20014','20015','20016'); +f('20017','20018','20019','20020'); +f('20021','20022','20023','20024'); +f('20025','20026','20027','20028'); +f('20029','20030','20031','20032'); +f('20033','20034','20035','20036'); +f('20037','20038','20039','20040'); +f('20041','20042','20043','20044'); +f('20045','20046','20047','20048'); +f('20049','20050','20051','20052'); +f('20053','20054','20055','20056'); +f('20057','20058','20059','20060'); +f('20061','20062','20063','20064'); +f('20065','20066','20067','20068'); +f('20069','20070','20071','20072'); +f('20073','20074','20075','20076'); +f('20077','20078','20079','20080'); +f('20081','20082','20083','20084'); +f('20085','20086','20087','20088'); +f('20089','20090','20091','20092'); +f('20093','20094','20095','20096'); +f('20097','20098','20099','20100'); +f('20101','20102','20103','20104'); +f('20105','20106','20107','20108'); +f('20109','20110','20111','20112'); +f('20113','20114','20115','20116'); +f('20117','20118','20119','20120'); +f('20121','20122','20123','20124'); +f('20125','20126','20127','20128'); +f('20129','20130','20131','20132'); +f('20133','20134','20135','20136'); +f('20137','20138','20139','20140'); +f('20141','20142','20143','20144'); +f('20145','20146','20147','20148'); +f('20149','20150','20151','20152'); +f('20153','20154','20155','20156'); +f('20157','20158','20159','20160'); +f('20161','20162','20163','20164'); +f('20165','20166','20167','20168'); +f('20169','20170','20171','20172'); +f('20173','20174','20175','20176'); +f('20177','20178','20179','20180'); +f('20181','20182','20183','20184'); +f('20185','20186','20187','20188'); +f('20189','20190','20191','20192'); +f('20193','20194','20195','20196'); +f('20197','20198','20199','20200'); +f('20201','20202','20203','20204'); +f('20205','20206','20207','20208'); +f('20209','20210','20211','20212'); +f('20213','20214','20215','20216'); +f('20217','20218','20219','20220'); +f('20221','20222','20223','20224'); +f('20225','20226','20227','20228'); +f('20229','20230','20231','20232'); +f('20233','20234','20235','20236'); +f('20237','20238','20239','20240'); +f('20241','20242','20243','20244'); +f('20245','20246','20247','20248'); +f('20249','20250','20251','20252'); +f('20253','20254','20255','20256'); +f('20257','20258','20259','20260'); +f('20261','20262','20263','20264'); +f('20265','20266','20267','20268'); +f('20269','20270','20271','20272'); +f('20273','20274','20275','20276'); +f('20277','20278','20279','20280'); +f('20281','20282','20283','20284'); +f('20285','20286','20287','20288'); +f('20289','20290','20291','20292'); +f('20293','20294','20295','20296'); +f('20297','20298','20299','20300'); +f('20301','20302','20303','20304'); +f('20305','20306','20307','20308'); +f('20309','20310','20311','20312'); +f('20313','20314','20315','20316'); +f('20317','20318','20319','20320'); +f('20321','20322','20323','20324'); +f('20325','20326','20327','20328'); +f('20329','20330','20331','20332'); +f('20333','20334','20335','20336'); +f('20337','20338','20339','20340'); +f('20341','20342','20343','20344'); +f('20345','20346','20347','20348'); +f('20349','20350','20351','20352'); +f('20353','20354','20355','20356'); +f('20357','20358','20359','20360'); +f('20361','20362','20363','20364'); +f('20365','20366','20367','20368'); +f('20369','20370','20371','20372'); +f('20373','20374','20375','20376'); +f('20377','20378','20379','20380'); +f('20381','20382','20383','20384'); +f('20385','20386','20387','20388'); +f('20389','20390','20391','20392'); +f('20393','20394','20395','20396'); +f('20397','20398','20399','20400'); +f('20401','20402','20403','20404'); +f('20405','20406','20407','20408'); +f('20409','20410','20411','20412'); +f('20413','20414','20415','20416'); +f('20417','20418','20419','20420'); +f('20421','20422','20423','20424'); +f('20425','20426','20427','20428'); +f('20429','20430','20431','20432'); +f('20433','20434','20435','20436'); +f('20437','20438','20439','20440'); +f('20441','20442','20443','20444'); +f('20445','20446','20447','20448'); +f('20449','20450','20451','20452'); +f('20453','20454','20455','20456'); +f('20457','20458','20459','20460'); +f('20461','20462','20463','20464'); +f('20465','20466','20467','20468'); +f('20469','20470','20471','20472'); +f('20473','20474','20475','20476'); +f('20477','20478','20479','20480'); +f('20481','20482','20483','20484'); +f('20485','20486','20487','20488'); +f('20489','20490','20491','20492'); +f('20493','20494','20495','20496'); +f('20497','20498','20499','20500'); +f('20501','20502','20503','20504'); +f('20505','20506','20507','20508'); +f('20509','20510','20511','20512'); +f('20513','20514','20515','20516'); +f('20517','20518','20519','20520'); +f('20521','20522','20523','20524'); +f('20525','20526','20527','20528'); +f('20529','20530','20531','20532'); +f('20533','20534','20535','20536'); +f('20537','20538','20539','20540'); +f('20541','20542','20543','20544'); +f('20545','20546','20547','20548'); +f('20549','20550','20551','20552'); +f('20553','20554','20555','20556'); +f('20557','20558','20559','20560'); +f('20561','20562','20563','20564'); +f('20565','20566','20567','20568'); +f('20569','20570','20571','20572'); +f('20573','20574','20575','20576'); +f('20577','20578','20579','20580'); +f('20581','20582','20583','20584'); +f('20585','20586','20587','20588'); +f('20589','20590','20591','20592'); +f('20593','20594','20595','20596'); +f('20597','20598','20599','20600'); +f('20601','20602','20603','20604'); +f('20605','20606','20607','20608'); +f('20609','20610','20611','20612'); +f('20613','20614','20615','20616'); +f('20617','20618','20619','20620'); +f('20621','20622','20623','20624'); +f('20625','20626','20627','20628'); +f('20629','20630','20631','20632'); +f('20633','20634','20635','20636'); +f('20637','20638','20639','20640'); +f('20641','20642','20643','20644'); +f('20645','20646','20647','20648'); +f('20649','20650','20651','20652'); +f('20653','20654','20655','20656'); +f('20657','20658','20659','20660'); +f('20661','20662','20663','20664'); +f('20665','20666','20667','20668'); +f('20669','20670','20671','20672'); +f('20673','20674','20675','20676'); +f('20677','20678','20679','20680'); +f('20681','20682','20683','20684'); +f('20685','20686','20687','20688'); +f('20689','20690','20691','20692'); +f('20693','20694','20695','20696'); +f('20697','20698','20699','20700'); +f('20701','20702','20703','20704'); +f('20705','20706','20707','20708'); +f('20709','20710','20711','20712'); +f('20713','20714','20715','20716'); +f('20717','20718','20719','20720'); +f('20721','20722','20723','20724'); +f('20725','20726','20727','20728'); +f('20729','20730','20731','20732'); +f('20733','20734','20735','20736'); +f('20737','20738','20739','20740'); +f('20741','20742','20743','20744'); +f('20745','20746','20747','20748'); +f('20749','20750','20751','20752'); +f('20753','20754','20755','20756'); +f('20757','20758','20759','20760'); +f('20761','20762','20763','20764'); +f('20765','20766','20767','20768'); +f('20769','20770','20771','20772'); +f('20773','20774','20775','20776'); +f('20777','20778','20779','20780'); +f('20781','20782','20783','20784'); +f('20785','20786','20787','20788'); +f('20789','20790','20791','20792'); +f('20793','20794','20795','20796'); +f('20797','20798','20799','20800'); +f('20801','20802','20803','20804'); +f('20805','20806','20807','20808'); +f('20809','20810','20811','20812'); +f('20813','20814','20815','20816'); +f('20817','20818','20819','20820'); +f('20821','20822','20823','20824'); +f('20825','20826','20827','20828'); +f('20829','20830','20831','20832'); +f('20833','20834','20835','20836'); +f('20837','20838','20839','20840'); +f('20841','20842','20843','20844'); +f('20845','20846','20847','20848'); +f('20849','20850','20851','20852'); +f('20853','20854','20855','20856'); +f('20857','20858','20859','20860'); +f('20861','20862','20863','20864'); +f('20865','20866','20867','20868'); +f('20869','20870','20871','20872'); +f('20873','20874','20875','20876'); +f('20877','20878','20879','20880'); +f('20881','20882','20883','20884'); +f('20885','20886','20887','20888'); +f('20889','20890','20891','20892'); +f('20893','20894','20895','20896'); +f('20897','20898','20899','20900'); +f('20901','20902','20903','20904'); +f('20905','20906','20907','20908'); +f('20909','20910','20911','20912'); +f('20913','20914','20915','20916'); +f('20917','20918','20919','20920'); +f('20921','20922','20923','20924'); +f('20925','20926','20927','20928'); +f('20929','20930','20931','20932'); +f('20933','20934','20935','20936'); +f('20937','20938','20939','20940'); +f('20941','20942','20943','20944'); +f('20945','20946','20947','20948'); +f('20949','20950','20951','20952'); +f('20953','20954','20955','20956'); +f('20957','20958','20959','20960'); +f('20961','20962','20963','20964'); +f('20965','20966','20967','20968'); +f('20969','20970','20971','20972'); +f('20973','20974','20975','20976'); +f('20977','20978','20979','20980'); +f('20981','20982','20983','20984'); +f('20985','20986','20987','20988'); +f('20989','20990','20991','20992'); +f('20993','20994','20995','20996'); +f('20997','20998','20999','21000'); +f('21001','21002','21003','21004'); +f('21005','21006','21007','21008'); +f('21009','21010','21011','21012'); +f('21013','21014','21015','21016'); +f('21017','21018','21019','21020'); +f('21021','21022','21023','21024'); +f('21025','21026','21027','21028'); +f('21029','21030','21031','21032'); +f('21033','21034','21035','21036'); +f('21037','21038','21039','21040'); +f('21041','21042','21043','21044'); +f('21045','21046','21047','21048'); +f('21049','21050','21051','21052'); +f('21053','21054','21055','21056'); +f('21057','21058','21059','21060'); +f('21061','21062','21063','21064'); +f('21065','21066','21067','21068'); +f('21069','21070','21071','21072'); +f('21073','21074','21075','21076'); +f('21077','21078','21079','21080'); +f('21081','21082','21083','21084'); +f('21085','21086','21087','21088'); +f('21089','21090','21091','21092'); +f('21093','21094','21095','21096'); +f('21097','21098','21099','21100'); +f('21101','21102','21103','21104'); +f('21105','21106','21107','21108'); +f('21109','21110','21111','21112'); +f('21113','21114','21115','21116'); +f('21117','21118','21119','21120'); +f('21121','21122','21123','21124'); +f('21125','21126','21127','21128'); +f('21129','21130','21131','21132'); +f('21133','21134','21135','21136'); +f('21137','21138','21139','21140'); +f('21141','21142','21143','21144'); +f('21145','21146','21147','21148'); +f('21149','21150','21151','21152'); +f('21153','21154','21155','21156'); +f('21157','21158','21159','21160'); +f('21161','21162','21163','21164'); +f('21165','21166','21167','21168'); +f('21169','21170','21171','21172'); +f('21173','21174','21175','21176'); +f('21177','21178','21179','21180'); +f('21181','21182','21183','21184'); +f('21185','21186','21187','21188'); +f('21189','21190','21191','21192'); +f('21193','21194','21195','21196'); +f('21197','21198','21199','21200'); +f('21201','21202','21203','21204'); +f('21205','21206','21207','21208'); +f('21209','21210','21211','21212'); +f('21213','21214','21215','21216'); +f('21217','21218','21219','21220'); +f('21221','21222','21223','21224'); +f('21225','21226','21227','21228'); +f('21229','21230','21231','21232'); +f('21233','21234','21235','21236'); +f('21237','21238','21239','21240'); +f('21241','21242','21243','21244'); +f('21245','21246','21247','21248'); +f('21249','21250','21251','21252'); +f('21253','21254','21255','21256'); +f('21257','21258','21259','21260'); +f('21261','21262','21263','21264'); +f('21265','21266','21267','21268'); +f('21269','21270','21271','21272'); +f('21273','21274','21275','21276'); +f('21277','21278','21279','21280'); +f('21281','21282','21283','21284'); +f('21285','21286','21287','21288'); +f('21289','21290','21291','21292'); +f('21293','21294','21295','21296'); +f('21297','21298','21299','21300'); +f('21301','21302','21303','21304'); +f('21305','21306','21307','21308'); +f('21309','21310','21311','21312'); +f('21313','21314','21315','21316'); +f('21317','21318','21319','21320'); +f('21321','21322','21323','21324'); +f('21325','21326','21327','21328'); +f('21329','21330','21331','21332'); +f('21333','21334','21335','21336'); +f('21337','21338','21339','21340'); +f('21341','21342','21343','21344'); +f('21345','21346','21347','21348'); +f('21349','21350','21351','21352'); +f('21353','21354','21355','21356'); +f('21357','21358','21359','21360'); +f('21361','21362','21363','21364'); +f('21365','21366','21367','21368'); +f('21369','21370','21371','21372'); +f('21373','21374','21375','21376'); +f('21377','21378','21379','21380'); +f('21381','21382','21383','21384'); +f('21385','21386','21387','21388'); +f('21389','21390','21391','21392'); +f('21393','21394','21395','21396'); +f('21397','21398','21399','21400'); +f('21401','21402','21403','21404'); +f('21405','21406','21407','21408'); +f('21409','21410','21411','21412'); +f('21413','21414','21415','21416'); +f('21417','21418','21419','21420'); +f('21421','21422','21423','21424'); +f('21425','21426','21427','21428'); +f('21429','21430','21431','21432'); +f('21433','21434','21435','21436'); +f('21437','21438','21439','21440'); +f('21441','21442','21443','21444'); +f('21445','21446','21447','21448'); +f('21449','21450','21451','21452'); +f('21453','21454','21455','21456'); +f('21457','21458','21459','21460'); +f('21461','21462','21463','21464'); +f('21465','21466','21467','21468'); +f('21469','21470','21471','21472'); +f('21473','21474','21475','21476'); +f('21477','21478','21479','21480'); +f('21481','21482','21483','21484'); +f('21485','21486','21487','21488'); +f('21489','21490','21491','21492'); +f('21493','21494','21495','21496'); +f('21497','21498','21499','21500'); +f('21501','21502','21503','21504'); +f('21505','21506','21507','21508'); +f('21509','21510','21511','21512'); +f('21513','21514','21515','21516'); +f('21517','21518','21519','21520'); +f('21521','21522','21523','21524'); +f('21525','21526','21527','21528'); +f('21529','21530','21531','21532'); +f('21533','21534','21535','21536'); +f('21537','21538','21539','21540'); +f('21541','21542','21543','21544'); +f('21545','21546','21547','21548'); +f('21549','21550','21551','21552'); +f('21553','21554','21555','21556'); +f('21557','21558','21559','21560'); +f('21561','21562','21563','21564'); +f('21565','21566','21567','21568'); +f('21569','21570','21571','21572'); +f('21573','21574','21575','21576'); +f('21577','21578','21579','21580'); +f('21581','21582','21583','21584'); +f('21585','21586','21587','21588'); +f('21589','21590','21591','21592'); +f('21593','21594','21595','21596'); +f('21597','21598','21599','21600'); +f('21601','21602','21603','21604'); +f('21605','21606','21607','21608'); +f('21609','21610','21611','21612'); +f('21613','21614','21615','21616'); +f('21617','21618','21619','21620'); +f('21621','21622','21623','21624'); +f('21625','21626','21627','21628'); +f('21629','21630','21631','21632'); +f('21633','21634','21635','21636'); +f('21637','21638','21639','21640'); +f('21641','21642','21643','21644'); +f('21645','21646','21647','21648'); +f('21649','21650','21651','21652'); +f('21653','21654','21655','21656'); +f('21657','21658','21659','21660'); +f('21661','21662','21663','21664'); +f('21665','21666','21667','21668'); +f('21669','21670','21671','21672'); +f('21673','21674','21675','21676'); +f('21677','21678','21679','21680'); +f('21681','21682','21683','21684'); +f('21685','21686','21687','21688'); +f('21689','21690','21691','21692'); +f('21693','21694','21695','21696'); +f('21697','21698','21699','21700'); +f('21701','21702','21703','21704'); +f('21705','21706','21707','21708'); +f('21709','21710','21711','21712'); +f('21713','21714','21715','21716'); +f('21717','21718','21719','21720'); +f('21721','21722','21723','21724'); +f('21725','21726','21727','21728'); +f('21729','21730','21731','21732'); +f('21733','21734','21735','21736'); +f('21737','21738','21739','21740'); +f('21741','21742','21743','21744'); +f('21745','21746','21747','21748'); +f('21749','21750','21751','21752'); +f('21753','21754','21755','21756'); +f('21757','21758','21759','21760'); +f('21761','21762','21763','21764'); +f('21765','21766','21767','21768'); +f('21769','21770','21771','21772'); +f('21773','21774','21775','21776'); +f('21777','21778','21779','21780'); +f('21781','21782','21783','21784'); +f('21785','21786','21787','21788'); +f('21789','21790','21791','21792'); +f('21793','21794','21795','21796'); +f('21797','21798','21799','21800'); +f('21801','21802','21803','21804'); +f('21805','21806','21807','21808'); +f('21809','21810','21811','21812'); +f('21813','21814','21815','21816'); +f('21817','21818','21819','21820'); +f('21821','21822','21823','21824'); +f('21825','21826','21827','21828'); +f('21829','21830','21831','21832'); +f('21833','21834','21835','21836'); +f('21837','21838','21839','21840'); +f('21841','21842','21843','21844'); +f('21845','21846','21847','21848'); +f('21849','21850','21851','21852'); +f('21853','21854','21855','21856'); +f('21857','21858','21859','21860'); +f('21861','21862','21863','21864'); +f('21865','21866','21867','21868'); +f('21869','21870','21871','21872'); +f('21873','21874','21875','21876'); +f('21877','21878','21879','21880'); +f('21881','21882','21883','21884'); +f('21885','21886','21887','21888'); +f('21889','21890','21891','21892'); +f('21893','21894','21895','21896'); +f('21897','21898','21899','21900'); +f('21901','21902','21903','21904'); +f('21905','21906','21907','21908'); +f('21909','21910','21911','21912'); +f('21913','21914','21915','21916'); +f('21917','21918','21919','21920'); +f('21921','21922','21923','21924'); +f('21925','21926','21927','21928'); +f('21929','21930','21931','21932'); +f('21933','21934','21935','21936'); +f('21937','21938','21939','21940'); +f('21941','21942','21943','21944'); +f('21945','21946','21947','21948'); +f('21949','21950','21951','21952'); +f('21953','21954','21955','21956'); +f('21957','21958','21959','21960'); +f('21961','21962','21963','21964'); +f('21965','21966','21967','21968'); +f('21969','21970','21971','21972'); +f('21973','21974','21975','21976'); +f('21977','21978','21979','21980'); +f('21981','21982','21983','21984'); +f('21985','21986','21987','21988'); +f('21989','21990','21991','21992'); +f('21993','21994','21995','21996'); +f('21997','21998','21999','22000'); +f('22001','22002','22003','22004'); +f('22005','22006','22007','22008'); +f('22009','22010','22011','22012'); +f('22013','22014','22015','22016'); +f('22017','22018','22019','22020'); +f('22021','22022','22023','22024'); +f('22025','22026','22027','22028'); +f('22029','22030','22031','22032'); +f('22033','22034','22035','22036'); +f('22037','22038','22039','22040'); +f('22041','22042','22043','22044'); +f('22045','22046','22047','22048'); +f('22049','22050','22051','22052'); +f('22053','22054','22055','22056'); +f('22057','22058','22059','22060'); +f('22061','22062','22063','22064'); +f('22065','22066','22067','22068'); +f('22069','22070','22071','22072'); +f('22073','22074','22075','22076'); +f('22077','22078','22079','22080'); +f('22081','22082','22083','22084'); +f('22085','22086','22087','22088'); +f('22089','22090','22091','22092'); +f('22093','22094','22095','22096'); +f('22097','22098','22099','22100'); +f('22101','22102','22103','22104'); +f('22105','22106','22107','22108'); +f('22109','22110','22111','22112'); +f('22113','22114','22115','22116'); +f('22117','22118','22119','22120'); +f('22121','22122','22123','22124'); +f('22125','22126','22127','22128'); +f('22129','22130','22131','22132'); +f('22133','22134','22135','22136'); +f('22137','22138','22139','22140'); +f('22141','22142','22143','22144'); +f('22145','22146','22147','22148'); +f('22149','22150','22151','22152'); +f('22153','22154','22155','22156'); +f('22157','22158','22159','22160'); +f('22161','22162','22163','22164'); +f('22165','22166','22167','22168'); +f('22169','22170','22171','22172'); +f('22173','22174','22175','22176'); +f('22177','22178','22179','22180'); +f('22181','22182','22183','22184'); +f('22185','22186','22187','22188'); +f('22189','22190','22191','22192'); +f('22193','22194','22195','22196'); +f('22197','22198','22199','22200'); +f('22201','22202','22203','22204'); +f('22205','22206','22207','22208'); +f('22209','22210','22211','22212'); +f('22213','22214','22215','22216'); +f('22217','22218','22219','22220'); +f('22221','22222','22223','22224'); +f('22225','22226','22227','22228'); +f('22229','22230','22231','22232'); +f('22233','22234','22235','22236'); +f('22237','22238','22239','22240'); +f('22241','22242','22243','22244'); +f('22245','22246','22247','22248'); +f('22249','22250','22251','22252'); +f('22253','22254','22255','22256'); +f('22257','22258','22259','22260'); +f('22261','22262','22263','22264'); +f('22265','22266','22267','22268'); +f('22269','22270','22271','22272'); +f('22273','22274','22275','22276'); +f('22277','22278','22279','22280'); +f('22281','22282','22283','22284'); +f('22285','22286','22287','22288'); +f('22289','22290','22291','22292'); +f('22293','22294','22295','22296'); +f('22297','22298','22299','22300'); +f('22301','22302','22303','22304'); +f('22305','22306','22307','22308'); +f('22309','22310','22311','22312'); +f('22313','22314','22315','22316'); +f('22317','22318','22319','22320'); +f('22321','22322','22323','22324'); +f('22325','22326','22327','22328'); +f('22329','22330','22331','22332'); +f('22333','22334','22335','22336'); +f('22337','22338','22339','22340'); +f('22341','22342','22343','22344'); +f('22345','22346','22347','22348'); +f('22349','22350','22351','22352'); +f('22353','22354','22355','22356'); +f('22357','22358','22359','22360'); +f('22361','22362','22363','22364'); +f('22365','22366','22367','22368'); +f('22369','22370','22371','22372'); +f('22373','22374','22375','22376'); +f('22377','22378','22379','22380'); +f('22381','22382','22383','22384'); +f('22385','22386','22387','22388'); +f('22389','22390','22391','22392'); +f('22393','22394','22395','22396'); +f('22397','22398','22399','22400'); +f('22401','22402','22403','22404'); +f('22405','22406','22407','22408'); +f('22409','22410','22411','22412'); +f('22413','22414','22415','22416'); +f('22417','22418','22419','22420'); +f('22421','22422','22423','22424'); +f('22425','22426','22427','22428'); +f('22429','22430','22431','22432'); +f('22433','22434','22435','22436'); +f('22437','22438','22439','22440'); +f('22441','22442','22443','22444'); +f('22445','22446','22447','22448'); +f('22449','22450','22451','22452'); +f('22453','22454','22455','22456'); +f('22457','22458','22459','22460'); +f('22461','22462','22463','22464'); +f('22465','22466','22467','22468'); +f('22469','22470','22471','22472'); +f('22473','22474','22475','22476'); +f('22477','22478','22479','22480'); +f('22481','22482','22483','22484'); +f('22485','22486','22487','22488'); +f('22489','22490','22491','22492'); +f('22493','22494','22495','22496'); +f('22497','22498','22499','22500'); +f('22501','22502','22503','22504'); +f('22505','22506','22507','22508'); +f('22509','22510','22511','22512'); +f('22513','22514','22515','22516'); +f('22517','22518','22519','22520'); +f('22521','22522','22523','22524'); +f('22525','22526','22527','22528'); +f('22529','22530','22531','22532'); +f('22533','22534','22535','22536'); +f('22537','22538','22539','22540'); +f('22541','22542','22543','22544'); +f('22545','22546','22547','22548'); +f('22549','22550','22551','22552'); +f('22553','22554','22555','22556'); +f('22557','22558','22559','22560'); +f('22561','22562','22563','22564'); +f('22565','22566','22567','22568'); +f('22569','22570','22571','22572'); +f('22573','22574','22575','22576'); +f('22577','22578','22579','22580'); +f('22581','22582','22583','22584'); +f('22585','22586','22587','22588'); +f('22589','22590','22591','22592'); +f('22593','22594','22595','22596'); +f('22597','22598','22599','22600'); +f('22601','22602','22603','22604'); +f('22605','22606','22607','22608'); +f('22609','22610','22611','22612'); +f('22613','22614','22615','22616'); +f('22617','22618','22619','22620'); +f('22621','22622','22623','22624'); +f('22625','22626','22627','22628'); +f('22629','22630','22631','22632'); +f('22633','22634','22635','22636'); +f('22637','22638','22639','22640'); +f('22641','22642','22643','22644'); +f('22645','22646','22647','22648'); +f('22649','22650','22651','22652'); +f('22653','22654','22655','22656'); +f('22657','22658','22659','22660'); +f('22661','22662','22663','22664'); +f('22665','22666','22667','22668'); +f('22669','22670','22671','22672'); +f('22673','22674','22675','22676'); +f('22677','22678','22679','22680'); +f('22681','22682','22683','22684'); +f('22685','22686','22687','22688'); +f('22689','22690','22691','22692'); +f('22693','22694','22695','22696'); +f('22697','22698','22699','22700'); +f('22701','22702','22703','22704'); +f('22705','22706','22707','22708'); +f('22709','22710','22711','22712'); +f('22713','22714','22715','22716'); +f('22717','22718','22719','22720'); +f('22721','22722','22723','22724'); +f('22725','22726','22727','22728'); +f('22729','22730','22731','22732'); +f('22733','22734','22735','22736'); +f('22737','22738','22739','22740'); +f('22741','22742','22743','22744'); +f('22745','22746','22747','22748'); +f('22749','22750','22751','22752'); +f('22753','22754','22755','22756'); +f('22757','22758','22759','22760'); +f('22761','22762','22763','22764'); +f('22765','22766','22767','22768'); +f('22769','22770','22771','22772'); +f('22773','22774','22775','22776'); +f('22777','22778','22779','22780'); +f('22781','22782','22783','22784'); +f('22785','22786','22787','22788'); +f('22789','22790','22791','22792'); +f('22793','22794','22795','22796'); +f('22797','22798','22799','22800'); +f('22801','22802','22803','22804'); +f('22805','22806','22807','22808'); +f('22809','22810','22811','22812'); +f('22813','22814','22815','22816'); +f('22817','22818','22819','22820'); +f('22821','22822','22823','22824'); +f('22825','22826','22827','22828'); +f('22829','22830','22831','22832'); +f('22833','22834','22835','22836'); +f('22837','22838','22839','22840'); +f('22841','22842','22843','22844'); +f('22845','22846','22847','22848'); +f('22849','22850','22851','22852'); +f('22853','22854','22855','22856'); +f('22857','22858','22859','22860'); +f('22861','22862','22863','22864'); +f('22865','22866','22867','22868'); +f('22869','22870','22871','22872'); +f('22873','22874','22875','22876'); +f('22877','22878','22879','22880'); +f('22881','22882','22883','22884'); +f('22885','22886','22887','22888'); +f('22889','22890','22891','22892'); +f('22893','22894','22895','22896'); +f('22897','22898','22899','22900'); +f('22901','22902','22903','22904'); +f('22905','22906','22907','22908'); +f('22909','22910','22911','22912'); +f('22913','22914','22915','22916'); +f('22917','22918','22919','22920'); +f('22921','22922','22923','22924'); +f('22925','22926','22927','22928'); +f('22929','22930','22931','22932'); +f('22933','22934','22935','22936'); +f('22937','22938','22939','22940'); +f('22941','22942','22943','22944'); +f('22945','22946','22947','22948'); +f('22949','22950','22951','22952'); +f('22953','22954','22955','22956'); +f('22957','22958','22959','22960'); +f('22961','22962','22963','22964'); +f('22965','22966','22967','22968'); +f('22969','22970','22971','22972'); +f('22973','22974','22975','22976'); +f('22977','22978','22979','22980'); +f('22981','22982','22983','22984'); +f('22985','22986','22987','22988'); +f('22989','22990','22991','22992'); +f('22993','22994','22995','22996'); +f('22997','22998','22999','23000'); +f('23001','23002','23003','23004'); +f('23005','23006','23007','23008'); +f('23009','23010','23011','23012'); +f('23013','23014','23015','23016'); +f('23017','23018','23019','23020'); +f('23021','23022','23023','23024'); +f('23025','23026','23027','23028'); +f('23029','23030','23031','23032'); +f('23033','23034','23035','23036'); +f('23037','23038','23039','23040'); +f('23041','23042','23043','23044'); +f('23045','23046','23047','23048'); +f('23049','23050','23051','23052'); +f('23053','23054','23055','23056'); +f('23057','23058','23059','23060'); +f('23061','23062','23063','23064'); +f('23065','23066','23067','23068'); +f('23069','23070','23071','23072'); +f('23073','23074','23075','23076'); +f('23077','23078','23079','23080'); +f('23081','23082','23083','23084'); +f('23085','23086','23087','23088'); +f('23089','23090','23091','23092'); +f('23093','23094','23095','23096'); +f('23097','23098','23099','23100'); +f('23101','23102','23103','23104'); +f('23105','23106','23107','23108'); +f('23109','23110','23111','23112'); +f('23113','23114','23115','23116'); +f('23117','23118','23119','23120'); +f('23121','23122','23123','23124'); +f('23125','23126','23127','23128'); +f('23129','23130','23131','23132'); +f('23133','23134','23135','23136'); +f('23137','23138','23139','23140'); +f('23141','23142','23143','23144'); +f('23145','23146','23147','23148'); +f('23149','23150','23151','23152'); +f('23153','23154','23155','23156'); +f('23157','23158','23159','23160'); +f('23161','23162','23163','23164'); +f('23165','23166','23167','23168'); +f('23169','23170','23171','23172'); +f('23173','23174','23175','23176'); +f('23177','23178','23179','23180'); +f('23181','23182','23183','23184'); +f('23185','23186','23187','23188'); +f('23189','23190','23191','23192'); +f('23193','23194','23195','23196'); +f('23197','23198','23199','23200'); +f('23201','23202','23203','23204'); +f('23205','23206','23207','23208'); +f('23209','23210','23211','23212'); +f('23213','23214','23215','23216'); +f('23217','23218','23219','23220'); +f('23221','23222','23223','23224'); +f('23225','23226','23227','23228'); +f('23229','23230','23231','23232'); +f('23233','23234','23235','23236'); +f('23237','23238','23239','23240'); +f('23241','23242','23243','23244'); +f('23245','23246','23247','23248'); +f('23249','23250','23251','23252'); +f('23253','23254','23255','23256'); +f('23257','23258','23259','23260'); +f('23261','23262','23263','23264'); +f('23265','23266','23267','23268'); +f('23269','23270','23271','23272'); +f('23273','23274','23275','23276'); +f('23277','23278','23279','23280'); +f('23281','23282','23283','23284'); +f('23285','23286','23287','23288'); +f('23289','23290','23291','23292'); +f('23293','23294','23295','23296'); +f('23297','23298','23299','23300'); +f('23301','23302','23303','23304'); +f('23305','23306','23307','23308'); +f('23309','23310','23311','23312'); +f('23313','23314','23315','23316'); +f('23317','23318','23319','23320'); +f('23321','23322','23323','23324'); +f('23325','23326','23327','23328'); +f('23329','23330','23331','23332'); +f('23333','23334','23335','23336'); +f('23337','23338','23339','23340'); +f('23341','23342','23343','23344'); +f('23345','23346','23347','23348'); +f('23349','23350','23351','23352'); +f('23353','23354','23355','23356'); +f('23357','23358','23359','23360'); +f('23361','23362','23363','23364'); +f('23365','23366','23367','23368'); +f('23369','23370','23371','23372'); +f('23373','23374','23375','23376'); +f('23377','23378','23379','23380'); +f('23381','23382','23383','23384'); +f('23385','23386','23387','23388'); +f('23389','23390','23391','23392'); +f('23393','23394','23395','23396'); +f('23397','23398','23399','23400'); +f('23401','23402','23403','23404'); +f('23405','23406','23407','23408'); +f('23409','23410','23411','23412'); +f('23413','23414','23415','23416'); +f('23417','23418','23419','23420'); +f('23421','23422','23423','23424'); +f('23425','23426','23427','23428'); +f('23429','23430','23431','23432'); +f('23433','23434','23435','23436'); +f('23437','23438','23439','23440'); +f('23441','23442','23443','23444'); +f('23445','23446','23447','23448'); +f('23449','23450','23451','23452'); +f('23453','23454','23455','23456'); +f('23457','23458','23459','23460'); +f('23461','23462','23463','23464'); +f('23465','23466','23467','23468'); +f('23469','23470','23471','23472'); +f('23473','23474','23475','23476'); +f('23477','23478','23479','23480'); +f('23481','23482','23483','23484'); +f('23485','23486','23487','23488'); +f('23489','23490','23491','23492'); +f('23493','23494','23495','23496'); +f('23497','23498','23499','23500'); +f('23501','23502','23503','23504'); +f('23505','23506','23507','23508'); +f('23509','23510','23511','23512'); +f('23513','23514','23515','23516'); +f('23517','23518','23519','23520'); +f('23521','23522','23523','23524'); +f('23525','23526','23527','23528'); +f('23529','23530','23531','23532'); +f('23533','23534','23535','23536'); +f('23537','23538','23539','23540'); +f('23541','23542','23543','23544'); +f('23545','23546','23547','23548'); +f('23549','23550','23551','23552'); +f('23553','23554','23555','23556'); +f('23557','23558','23559','23560'); +f('23561','23562','23563','23564'); +f('23565','23566','23567','23568'); +f('23569','23570','23571','23572'); +f('23573','23574','23575','23576'); +f('23577','23578','23579','23580'); +f('23581','23582','23583','23584'); +f('23585','23586','23587','23588'); +f('23589','23590','23591','23592'); +f('23593','23594','23595','23596'); +f('23597','23598','23599','23600'); +f('23601','23602','23603','23604'); +f('23605','23606','23607','23608'); +f('23609','23610','23611','23612'); +f('23613','23614','23615','23616'); +f('23617','23618','23619','23620'); +f('23621','23622','23623','23624'); +f('23625','23626','23627','23628'); +f('23629','23630','23631','23632'); +f('23633','23634','23635','23636'); +f('23637','23638','23639','23640'); +f('23641','23642','23643','23644'); +f('23645','23646','23647','23648'); +f('23649','23650','23651','23652'); +f('23653','23654','23655','23656'); +f('23657','23658','23659','23660'); +f('23661','23662','23663','23664'); +f('23665','23666','23667','23668'); +f('23669','23670','23671','23672'); +f('23673','23674','23675','23676'); +f('23677','23678','23679','23680'); +f('23681','23682','23683','23684'); +f('23685','23686','23687','23688'); +f('23689','23690','23691','23692'); +f('23693','23694','23695','23696'); +f('23697','23698','23699','23700'); +f('23701','23702','23703','23704'); +f('23705','23706','23707','23708'); +f('23709','23710','23711','23712'); +f('23713','23714','23715','23716'); +f('23717','23718','23719','23720'); +f('23721','23722','23723','23724'); +f('23725','23726','23727','23728'); +f('23729','23730','23731','23732'); +f('23733','23734','23735','23736'); +f('23737','23738','23739','23740'); +f('23741','23742','23743','23744'); +f('23745','23746','23747','23748'); +f('23749','23750','23751','23752'); +f('23753','23754','23755','23756'); +f('23757','23758','23759','23760'); +f('23761','23762','23763','23764'); +f('23765','23766','23767','23768'); +f('23769','23770','23771','23772'); +f('23773','23774','23775','23776'); +f('23777','23778','23779','23780'); +f('23781','23782','23783','23784'); +f('23785','23786','23787','23788'); +f('23789','23790','23791','23792'); +f('23793','23794','23795','23796'); +f('23797','23798','23799','23800'); +f('23801','23802','23803','23804'); +f('23805','23806','23807','23808'); +f('23809','23810','23811','23812'); +f('23813','23814','23815','23816'); +f('23817','23818','23819','23820'); +f('23821','23822','23823','23824'); +f('23825','23826','23827','23828'); +f('23829','23830','23831','23832'); +f('23833','23834','23835','23836'); +f('23837','23838','23839','23840'); +f('23841','23842','23843','23844'); +f('23845','23846','23847','23848'); +f('23849','23850','23851','23852'); +f('23853','23854','23855','23856'); +f('23857','23858','23859','23860'); +f('23861','23862','23863','23864'); +f('23865','23866','23867','23868'); +f('23869','23870','23871','23872'); +f('23873','23874','23875','23876'); +f('23877','23878','23879','23880'); +f('23881','23882','23883','23884'); +f('23885','23886','23887','23888'); +f('23889','23890','23891','23892'); +f('23893','23894','23895','23896'); +f('23897','23898','23899','23900'); +f('23901','23902','23903','23904'); +f('23905','23906','23907','23908'); +f('23909','23910','23911','23912'); +f('23913','23914','23915','23916'); +f('23917','23918','23919','23920'); +f('23921','23922','23923','23924'); +f('23925','23926','23927','23928'); +f('23929','23930','23931','23932'); +f('23933','23934','23935','23936'); +f('23937','23938','23939','23940'); +f('23941','23942','23943','23944'); +f('23945','23946','23947','23948'); +f('23949','23950','23951','23952'); +f('23953','23954','23955','23956'); +f('23957','23958','23959','23960'); +f('23961','23962','23963','23964'); +f('23965','23966','23967','23968'); +f('23969','23970','23971','23972'); +f('23973','23974','23975','23976'); +f('23977','23978','23979','23980'); +f('23981','23982','23983','23984'); +f('23985','23986','23987','23988'); +f('23989','23990','23991','23992'); +f('23993','23994','23995','23996'); +f('23997','23998','23999','24000'); +f('24001','24002','24003','24004'); +f('24005','24006','24007','24008'); +f('24009','24010','24011','24012'); +f('24013','24014','24015','24016'); +f('24017','24018','24019','24020'); +f('24021','24022','24023','24024'); +f('24025','24026','24027','24028'); +f('24029','24030','24031','24032'); +f('24033','24034','24035','24036'); +f('24037','24038','24039','24040'); +f('24041','24042','24043','24044'); +f('24045','24046','24047','24048'); +f('24049','24050','24051','24052'); +f('24053','24054','24055','24056'); +f('24057','24058','24059','24060'); +f('24061','24062','24063','24064'); +f('24065','24066','24067','24068'); +f('24069','24070','24071','24072'); +f('24073','24074','24075','24076'); +f('24077','24078','24079','24080'); +f('24081','24082','24083','24084'); +f('24085','24086','24087','24088'); +f('24089','24090','24091','24092'); +f('24093','24094','24095','24096'); +f('24097','24098','24099','24100'); +f('24101','24102','24103','24104'); +f('24105','24106','24107','24108'); +f('24109','24110','24111','24112'); +f('24113','24114','24115','24116'); +f('24117','24118','24119','24120'); +f('24121','24122','24123','24124'); +f('24125','24126','24127','24128'); +f('24129','24130','24131','24132'); +f('24133','24134','24135','24136'); +f('24137','24138','24139','24140'); +f('24141','24142','24143','24144'); +f('24145','24146','24147','24148'); +f('24149','24150','24151','24152'); +f('24153','24154','24155','24156'); +f('24157','24158','24159','24160'); +f('24161','24162','24163','24164'); +f('24165','24166','24167','24168'); +f('24169','24170','24171','24172'); +f('24173','24174','24175','24176'); +f('24177','24178','24179','24180'); +f('24181','24182','24183','24184'); +f('24185','24186','24187','24188'); +f('24189','24190','24191','24192'); +f('24193','24194','24195','24196'); +f('24197','24198','24199','24200'); +f('24201','24202','24203','24204'); +f('24205','24206','24207','24208'); +f('24209','24210','24211','24212'); +f('24213','24214','24215','24216'); +f('24217','24218','24219','24220'); +f('24221','24222','24223','24224'); +f('24225','24226','24227','24228'); +f('24229','24230','24231','24232'); +f('24233','24234','24235','24236'); +f('24237','24238','24239','24240'); +f('24241','24242','24243','24244'); +f('24245','24246','24247','24248'); +f('24249','24250','24251','24252'); +f('24253','24254','24255','24256'); +f('24257','24258','24259','24260'); +f('24261','24262','24263','24264'); +f('24265','24266','24267','24268'); +f('24269','24270','24271','24272'); +f('24273','24274','24275','24276'); +f('24277','24278','24279','24280'); +f('24281','24282','24283','24284'); +f('24285','24286','24287','24288'); +f('24289','24290','24291','24292'); +f('24293','24294','24295','24296'); +f('24297','24298','24299','24300'); +f('24301','24302','24303','24304'); +f('24305','24306','24307','24308'); +f('24309','24310','24311','24312'); +f('24313','24314','24315','24316'); +f('24317','24318','24319','24320'); +f('24321','24322','24323','24324'); +f('24325','24326','24327','24328'); +f('24329','24330','24331','24332'); +f('24333','24334','24335','24336'); +f('24337','24338','24339','24340'); +f('24341','24342','24343','24344'); +f('24345','24346','24347','24348'); +f('24349','24350','24351','24352'); +f('24353','24354','24355','24356'); +f('24357','24358','24359','24360'); +f('24361','24362','24363','24364'); +f('24365','24366','24367','24368'); +f('24369','24370','24371','24372'); +f('24373','24374','24375','24376'); +f('24377','24378','24379','24380'); +f('24381','24382','24383','24384'); +f('24385','24386','24387','24388'); +f('24389','24390','24391','24392'); +f('24393','24394','24395','24396'); +f('24397','24398','24399','24400'); +f('24401','24402','24403','24404'); +f('24405','24406','24407','24408'); +f('24409','24410','24411','24412'); +f('24413','24414','24415','24416'); +f('24417','24418','24419','24420'); +f('24421','24422','24423','24424'); +f('24425','24426','24427','24428'); +f('24429','24430','24431','24432'); +f('24433','24434','24435','24436'); +f('24437','24438','24439','24440'); +f('24441','24442','24443','24444'); +f('24445','24446','24447','24448'); +f('24449','24450','24451','24452'); +f('24453','24454','24455','24456'); +f('24457','24458','24459','24460'); +f('24461','24462','24463','24464'); +f('24465','24466','24467','24468'); +f('24469','24470','24471','24472'); +f('24473','24474','24475','24476'); +f('24477','24478','24479','24480'); +f('24481','24482','24483','24484'); +f('24485','24486','24487','24488'); +f('24489','24490','24491','24492'); +f('24493','24494','24495','24496'); +f('24497','24498','24499','24500'); +f('24501','24502','24503','24504'); +f('24505','24506','24507','24508'); +f('24509','24510','24511','24512'); +f('24513','24514','24515','24516'); +f('24517','24518','24519','24520'); +f('24521','24522','24523','24524'); +f('24525','24526','24527','24528'); +f('24529','24530','24531','24532'); +f('24533','24534','24535','24536'); +f('24537','24538','24539','24540'); +f('24541','24542','24543','24544'); +f('24545','24546','24547','24548'); +f('24549','24550','24551','24552'); +f('24553','24554','24555','24556'); +f('24557','24558','24559','24560'); +f('24561','24562','24563','24564'); +f('24565','24566','24567','24568'); +f('24569','24570','24571','24572'); +f('24573','24574','24575','24576'); +f('24577','24578','24579','24580'); +f('24581','24582','24583','24584'); +f('24585','24586','24587','24588'); +f('24589','24590','24591','24592'); +f('24593','24594','24595','24596'); +f('24597','24598','24599','24600'); +f('24601','24602','24603','24604'); +f('24605','24606','24607','24608'); +f('24609','24610','24611','24612'); +f('24613','24614','24615','24616'); +f('24617','24618','24619','24620'); +f('24621','24622','24623','24624'); +f('24625','24626','24627','24628'); +f('24629','24630','24631','24632'); +f('24633','24634','24635','24636'); +f('24637','24638','24639','24640'); +f('24641','24642','24643','24644'); +f('24645','24646','24647','24648'); +f('24649','24650','24651','24652'); +f('24653','24654','24655','24656'); +f('24657','24658','24659','24660'); +f('24661','24662','24663','24664'); +f('24665','24666','24667','24668'); +f('24669','24670','24671','24672'); +f('24673','24674','24675','24676'); +f('24677','24678','24679','24680'); +f('24681','24682','24683','24684'); +f('24685','24686','24687','24688'); +f('24689','24690','24691','24692'); +f('24693','24694','24695','24696'); +f('24697','24698','24699','24700'); +f('24701','24702','24703','24704'); +f('24705','24706','24707','24708'); +f('24709','24710','24711','24712'); +f('24713','24714','24715','24716'); +f('24717','24718','24719','24720'); +f('24721','24722','24723','24724'); +f('24725','24726','24727','24728'); +f('24729','24730','24731','24732'); +f('24733','24734','24735','24736'); +f('24737','24738','24739','24740'); +f('24741','24742','24743','24744'); +f('24745','24746','24747','24748'); +f('24749','24750','24751','24752'); +f('24753','24754','24755','24756'); +f('24757','24758','24759','24760'); +f('24761','24762','24763','24764'); +f('24765','24766','24767','24768'); +f('24769','24770','24771','24772'); +f('24773','24774','24775','24776'); +f('24777','24778','24779','24780'); +f('24781','24782','24783','24784'); +f('24785','24786','24787','24788'); +f('24789','24790','24791','24792'); +f('24793','24794','24795','24796'); +f('24797','24798','24799','24800'); +f('24801','24802','24803','24804'); +f('24805','24806','24807','24808'); +f('24809','24810','24811','24812'); +f('24813','24814','24815','24816'); +f('24817','24818','24819','24820'); +f('24821','24822','24823','24824'); +f('24825','24826','24827','24828'); +f('24829','24830','24831','24832'); +f('24833','24834','24835','24836'); +f('24837','24838','24839','24840'); +f('24841','24842','24843','24844'); +f('24845','24846','24847','24848'); +f('24849','24850','24851','24852'); +f('24853','24854','24855','24856'); +f('24857','24858','24859','24860'); +f('24861','24862','24863','24864'); +f('24865','24866','24867','24868'); +f('24869','24870','24871','24872'); +f('24873','24874','24875','24876'); +f('24877','24878','24879','24880'); +f('24881','24882','24883','24884'); +f('24885','24886','24887','24888'); +f('24889','24890','24891','24892'); +f('24893','24894','24895','24896'); +f('24897','24898','24899','24900'); +f('24901','24902','24903','24904'); +f('24905','24906','24907','24908'); +f('24909','24910','24911','24912'); +f('24913','24914','24915','24916'); +f('24917','24918','24919','24920'); +f('24921','24922','24923','24924'); +f('24925','24926','24927','24928'); +f('24929','24930','24931','24932'); +f('24933','24934','24935','24936'); +f('24937','24938','24939','24940'); +f('24941','24942','24943','24944'); +f('24945','24946','24947','24948'); +f('24949','24950','24951','24952'); +f('24953','24954','24955','24956'); +f('24957','24958','24959','24960'); +f('24961','24962','24963','24964'); +f('24965','24966','24967','24968'); +f('24969','24970','24971','24972'); +f('24973','24974','24975','24976'); +f('24977','24978','24979','24980'); +f('24981','24982','24983','24984'); +f('24985','24986','24987','24988'); +f('24989','24990','24991','24992'); +f('24993','24994','24995','24996'); +f('24997','24998','24999','25000'); +f('25001','25002','25003','25004'); +f('25005','25006','25007','25008'); +f('25009','25010','25011','25012'); +f('25013','25014','25015','25016'); +f('25017','25018','25019','25020'); +f('25021','25022','25023','25024'); +f('25025','25026','25027','25028'); +f('25029','25030','25031','25032'); +f('25033','25034','25035','25036'); +f('25037','25038','25039','25040'); +f('25041','25042','25043','25044'); +f('25045','25046','25047','25048'); +f('25049','25050','25051','25052'); +f('25053','25054','25055','25056'); +f('25057','25058','25059','25060'); +f('25061','25062','25063','25064'); +f('25065','25066','25067','25068'); +f('25069','25070','25071','25072'); +f('25073','25074','25075','25076'); +f('25077','25078','25079','25080'); +f('25081','25082','25083','25084'); +f('25085','25086','25087','25088'); +f('25089','25090','25091','25092'); +f('25093','25094','25095','25096'); +f('25097','25098','25099','25100'); +f('25101','25102','25103','25104'); +f('25105','25106','25107','25108'); +f('25109','25110','25111','25112'); +f('25113','25114','25115','25116'); +f('25117','25118','25119','25120'); +f('25121','25122','25123','25124'); +f('25125','25126','25127','25128'); +f('25129','25130','25131','25132'); +f('25133','25134','25135','25136'); +f('25137','25138','25139','25140'); +f('25141','25142','25143','25144'); +f('25145','25146','25147','25148'); +f('25149','25150','25151','25152'); +f('25153','25154','25155','25156'); +f('25157','25158','25159','25160'); +f('25161','25162','25163','25164'); +f('25165','25166','25167','25168'); +f('25169','25170','25171','25172'); +f('25173','25174','25175','25176'); +f('25177','25178','25179','25180'); +f('25181','25182','25183','25184'); +f('25185','25186','25187','25188'); +f('25189','25190','25191','25192'); +f('25193','25194','25195','25196'); +f('25197','25198','25199','25200'); +f('25201','25202','25203','25204'); +f('25205','25206','25207','25208'); +f('25209','25210','25211','25212'); +f('25213','25214','25215','25216'); +f('25217','25218','25219','25220'); +f('25221','25222','25223','25224'); +f('25225','25226','25227','25228'); +f('25229','25230','25231','25232'); +f('25233','25234','25235','25236'); +f('25237','25238','25239','25240'); +f('25241','25242','25243','25244'); +f('25245','25246','25247','25248'); +f('25249','25250','25251','25252'); +f('25253','25254','25255','25256'); +f('25257','25258','25259','25260'); +f('25261','25262','25263','25264'); +f('25265','25266','25267','25268'); +f('25269','25270','25271','25272'); +f('25273','25274','25275','25276'); +f('25277','25278','25279','25280'); +f('25281','25282','25283','25284'); +f('25285','25286','25287','25288'); +f('25289','25290','25291','25292'); +f('25293','25294','25295','25296'); +f('25297','25298','25299','25300'); +f('25301','25302','25303','25304'); +f('25305','25306','25307','25308'); +f('25309','25310','25311','25312'); +f('25313','25314','25315','25316'); +f('25317','25318','25319','25320'); +f('25321','25322','25323','25324'); +f('25325','25326','25327','25328'); +f('25329','25330','25331','25332'); +f('25333','25334','25335','25336'); +f('25337','25338','25339','25340'); +f('25341','25342','25343','25344'); +f('25345','25346','25347','25348'); +f('25349','25350','25351','25352'); +f('25353','25354','25355','25356'); +f('25357','25358','25359','25360'); +f('25361','25362','25363','25364'); +f('25365','25366','25367','25368'); +f('25369','25370','25371','25372'); +f('25373','25374','25375','25376'); +f('25377','25378','25379','25380'); +f('25381','25382','25383','25384'); +f('25385','25386','25387','25388'); +f('25389','25390','25391','25392'); +f('25393','25394','25395','25396'); +f('25397','25398','25399','25400'); +f('25401','25402','25403','25404'); +f('25405','25406','25407','25408'); +f('25409','25410','25411','25412'); +f('25413','25414','25415','25416'); +f('25417','25418','25419','25420'); +f('25421','25422','25423','25424'); +f('25425','25426','25427','25428'); +f('25429','25430','25431','25432'); +f('25433','25434','25435','25436'); +f('25437','25438','25439','25440'); +f('25441','25442','25443','25444'); +f('25445','25446','25447','25448'); +f('25449','25450','25451','25452'); +f('25453','25454','25455','25456'); +f('25457','25458','25459','25460'); +f('25461','25462','25463','25464'); +f('25465','25466','25467','25468'); +f('25469','25470','25471','25472'); +f('25473','25474','25475','25476'); +f('25477','25478','25479','25480'); +f('25481','25482','25483','25484'); +f('25485','25486','25487','25488'); +f('25489','25490','25491','25492'); +f('25493','25494','25495','25496'); +f('25497','25498','25499','25500'); +f('25501','25502','25503','25504'); +f('25505','25506','25507','25508'); +f('25509','25510','25511','25512'); +f('25513','25514','25515','25516'); +f('25517','25518','25519','25520'); +f('25521','25522','25523','25524'); +f('25525','25526','25527','25528'); +f('25529','25530','25531','25532'); +f('25533','25534','25535','25536'); +f('25537','25538','25539','25540'); +f('25541','25542','25543','25544'); +f('25545','25546','25547','25548'); +f('25549','25550','25551','25552'); +f('25553','25554','25555','25556'); +f('25557','25558','25559','25560'); +f('25561','25562','25563','25564'); +f('25565','25566','25567','25568'); +f('25569','25570','25571','25572'); +f('25573','25574','25575','25576'); +f('25577','25578','25579','25580'); +f('25581','25582','25583','25584'); +f('25585','25586','25587','25588'); +f('25589','25590','25591','25592'); +f('25593','25594','25595','25596'); +f('25597','25598','25599','25600'); +f('25601','25602','25603','25604'); +f('25605','25606','25607','25608'); +f('25609','25610','25611','25612'); +f('25613','25614','25615','25616'); +f('25617','25618','25619','25620'); +f('25621','25622','25623','25624'); +f('25625','25626','25627','25628'); +f('25629','25630','25631','25632'); +f('25633','25634','25635','25636'); +f('25637','25638','25639','25640'); +f('25641','25642','25643','25644'); +f('25645','25646','25647','25648'); +f('25649','25650','25651','25652'); +f('25653','25654','25655','25656'); +f('25657','25658','25659','25660'); +f('25661','25662','25663','25664'); +f('25665','25666','25667','25668'); +f('25669','25670','25671','25672'); +f('25673','25674','25675','25676'); +f('25677','25678','25679','25680'); +f('25681','25682','25683','25684'); +f('25685','25686','25687','25688'); +f('25689','25690','25691','25692'); +f('25693','25694','25695','25696'); +f('25697','25698','25699','25700'); +f('25701','25702','25703','25704'); +f('25705','25706','25707','25708'); +f('25709','25710','25711','25712'); +f('25713','25714','25715','25716'); +f('25717','25718','25719','25720'); +f('25721','25722','25723','25724'); +f('25725','25726','25727','25728'); +f('25729','25730','25731','25732'); +f('25733','25734','25735','25736'); +f('25737','25738','25739','25740'); +f('25741','25742','25743','25744'); +f('25745','25746','25747','25748'); +f('25749','25750','25751','25752'); +f('25753','25754','25755','25756'); +f('25757','25758','25759','25760'); +f('25761','25762','25763','25764'); +f('25765','25766','25767','25768'); +f('25769','25770','25771','25772'); +f('25773','25774','25775','25776'); +f('25777','25778','25779','25780'); +f('25781','25782','25783','25784'); +f('25785','25786','25787','25788'); +f('25789','25790','25791','25792'); +f('25793','25794','25795','25796'); +f('25797','25798','25799','25800'); +f('25801','25802','25803','25804'); +f('25805','25806','25807','25808'); +f('25809','25810','25811','25812'); +f('25813','25814','25815','25816'); +f('25817','25818','25819','25820'); +f('25821','25822','25823','25824'); +f('25825','25826','25827','25828'); +f('25829','25830','25831','25832'); +f('25833','25834','25835','25836'); +f('25837','25838','25839','25840'); +f('25841','25842','25843','25844'); +f('25845','25846','25847','25848'); +f('25849','25850','25851','25852'); +f('25853','25854','25855','25856'); +f('25857','25858','25859','25860'); +f('25861','25862','25863','25864'); +f('25865','25866','25867','25868'); +f('25869','25870','25871','25872'); +f('25873','25874','25875','25876'); +f('25877','25878','25879','25880'); +f('25881','25882','25883','25884'); +f('25885','25886','25887','25888'); +f('25889','25890','25891','25892'); +f('25893','25894','25895','25896'); +f('25897','25898','25899','25900'); +f('25901','25902','25903','25904'); +f('25905','25906','25907','25908'); +f('25909','25910','25911','25912'); +f('25913','25914','25915','25916'); +f('25917','25918','25919','25920'); +f('25921','25922','25923','25924'); +f('25925','25926','25927','25928'); +f('25929','25930','25931','25932'); +f('25933','25934','25935','25936'); +f('25937','25938','25939','25940'); +f('25941','25942','25943','25944'); +f('25945','25946','25947','25948'); +f('25949','25950','25951','25952'); +f('25953','25954','25955','25956'); +f('25957','25958','25959','25960'); +f('25961','25962','25963','25964'); +f('25965','25966','25967','25968'); +f('25969','25970','25971','25972'); +f('25973','25974','25975','25976'); +f('25977','25978','25979','25980'); +f('25981','25982','25983','25984'); +f('25985','25986','25987','25988'); +f('25989','25990','25991','25992'); +f('25993','25994','25995','25996'); +f('25997','25998','25999','26000'); +f('26001','26002','26003','26004'); +f('26005','26006','26007','26008'); +f('26009','26010','26011','26012'); +f('26013','26014','26015','26016'); +f('26017','26018','26019','26020'); +f('26021','26022','26023','26024'); +f('26025','26026','26027','26028'); +f('26029','26030','26031','26032'); +f('26033','26034','26035','26036'); +f('26037','26038','26039','26040'); +f('26041','26042','26043','26044'); +f('26045','26046','26047','26048'); +f('26049','26050','26051','26052'); +f('26053','26054','26055','26056'); +f('26057','26058','26059','26060'); +f('26061','26062','26063','26064'); +f('26065','26066','26067','26068'); +f('26069','26070','26071','26072'); +f('26073','26074','26075','26076'); +f('26077','26078','26079','26080'); +f('26081','26082','26083','26084'); +f('26085','26086','26087','26088'); +f('26089','26090','26091','26092'); +f('26093','26094','26095','26096'); +f('26097','26098','26099','26100'); +f('26101','26102','26103','26104'); +f('26105','26106','26107','26108'); +f('26109','26110','26111','26112'); +f('26113','26114','26115','26116'); +f('26117','26118','26119','26120'); +f('26121','26122','26123','26124'); +f('26125','26126','26127','26128'); +f('26129','26130','26131','26132'); +f('26133','26134','26135','26136'); +f('26137','26138','26139','26140'); +f('26141','26142','26143','26144'); +f('26145','26146','26147','26148'); +f('26149','26150','26151','26152'); +f('26153','26154','26155','26156'); +f('26157','26158','26159','26160'); +f('26161','26162','26163','26164'); +f('26165','26166','26167','26168'); +f('26169','26170','26171','26172'); +f('26173','26174','26175','26176'); +f('26177','26178','26179','26180'); +f('26181','26182','26183','26184'); +f('26185','26186','26187','26188'); +f('26189','26190','26191','26192'); +f('26193','26194','26195','26196'); +f('26197','26198','26199','26200'); +f('26201','26202','26203','26204'); +f('26205','26206','26207','26208'); +f('26209','26210','26211','26212'); +f('26213','26214','26215','26216'); +f('26217','26218','26219','26220'); +f('26221','26222','26223','26224'); +f('26225','26226','26227','26228'); +f('26229','26230','26231','26232'); +f('26233','26234','26235','26236'); +f('26237','26238','26239','26240'); +f('26241','26242','26243','26244'); +f('26245','26246','26247','26248'); +f('26249','26250','26251','26252'); +f('26253','26254','26255','26256'); +f('26257','26258','26259','26260'); +f('26261','26262','26263','26264'); +f('26265','26266','26267','26268'); +f('26269','26270','26271','26272'); +f('26273','26274','26275','26276'); +f('26277','26278','26279','26280'); +f('26281','26282','26283','26284'); +f('26285','26286','26287','26288'); +f('26289','26290','26291','26292'); +f('26293','26294','26295','26296'); +f('26297','26298','26299','26300'); +f('26301','26302','26303','26304'); +f('26305','26306','26307','26308'); +f('26309','26310','26311','26312'); +f('26313','26314','26315','26316'); +f('26317','26318','26319','26320'); +f('26321','26322','26323','26324'); +f('26325','26326','26327','26328'); +f('26329','26330','26331','26332'); +f('26333','26334','26335','26336'); +f('26337','26338','26339','26340'); +f('26341','26342','26343','26344'); +f('26345','26346','26347','26348'); +f('26349','26350','26351','26352'); +f('26353','26354','26355','26356'); +f('26357','26358','26359','26360'); +f('26361','26362','26363','26364'); +f('26365','26366','26367','26368'); +f('26369','26370','26371','26372'); +f('26373','26374','26375','26376'); +f('26377','26378','26379','26380'); +f('26381','26382','26383','26384'); +f('26385','26386','26387','26388'); +f('26389','26390','26391','26392'); +f('26393','26394','26395','26396'); +f('26397','26398','26399','26400'); +f('26401','26402','26403','26404'); +f('26405','26406','26407','26408'); +f('26409','26410','26411','26412'); +f('26413','26414','26415','26416'); +f('26417','26418','26419','26420'); +f('26421','26422','26423','26424'); +f('26425','26426','26427','26428'); +f('26429','26430','26431','26432'); +f('26433','26434','26435','26436'); +f('26437','26438','26439','26440'); +f('26441','26442','26443','26444'); +f('26445','26446','26447','26448'); +f('26449','26450','26451','26452'); +f('26453','26454','26455','26456'); +f('26457','26458','26459','26460'); +f('26461','26462','26463','26464'); +f('26465','26466','26467','26468'); +f('26469','26470','26471','26472'); +f('26473','26474','26475','26476'); +f('26477','26478','26479','26480'); +f('26481','26482','26483','26484'); +f('26485','26486','26487','26488'); +f('26489','26490','26491','26492'); +f('26493','26494','26495','26496'); +f('26497','26498','26499','26500'); +f('26501','26502','26503','26504'); +f('26505','26506','26507','26508'); +f('26509','26510','26511','26512'); +f('26513','26514','26515','26516'); +f('26517','26518','26519','26520'); +f('26521','26522','26523','26524'); +f('26525','26526','26527','26528'); +f('26529','26530','26531','26532'); +f('26533','26534','26535','26536'); +f('26537','26538','26539','26540'); +f('26541','26542','26543','26544'); +f('26545','26546','26547','26548'); +f('26549','26550','26551','26552'); +f('26553','26554','26555','26556'); +f('26557','26558','26559','26560'); +f('26561','26562','26563','26564'); +f('26565','26566','26567','26568'); +f('26569','26570','26571','26572'); +f('26573','26574','26575','26576'); +f('26577','26578','26579','26580'); +f('26581','26582','26583','26584'); +f('26585','26586','26587','26588'); +f('26589','26590','26591','26592'); +f('26593','26594','26595','26596'); +f('26597','26598','26599','26600'); +f('26601','26602','26603','26604'); +f('26605','26606','26607','26608'); +f('26609','26610','26611','26612'); +f('26613','26614','26615','26616'); +f('26617','26618','26619','26620'); +f('26621','26622','26623','26624'); +f('26625','26626','26627','26628'); +f('26629','26630','26631','26632'); +f('26633','26634','26635','26636'); +f('26637','26638','26639','26640'); +f('26641','26642','26643','26644'); +f('26645','26646','26647','26648'); +f('26649','26650','26651','26652'); +f('26653','26654','26655','26656'); +f('26657','26658','26659','26660'); +f('26661','26662','26663','26664'); +f('26665','26666','26667','26668'); +f('26669','26670','26671','26672'); +f('26673','26674','26675','26676'); +f('26677','26678','26679','26680'); +f('26681','26682','26683','26684'); +f('26685','26686','26687','26688'); +f('26689','26690','26691','26692'); +f('26693','26694','26695','26696'); +f('26697','26698','26699','26700'); +f('26701','26702','26703','26704'); +f('26705','26706','26707','26708'); +f('26709','26710','26711','26712'); +f('26713','26714','26715','26716'); +f('26717','26718','26719','26720'); +f('26721','26722','26723','26724'); +f('26725','26726','26727','26728'); +f('26729','26730','26731','26732'); +f('26733','26734','26735','26736'); +f('26737','26738','26739','26740'); +f('26741','26742','26743','26744'); +f('26745','26746','26747','26748'); +f('26749','26750','26751','26752'); +f('26753','26754','26755','26756'); +f('26757','26758','26759','26760'); +f('26761','26762','26763','26764'); +f('26765','26766','26767','26768'); +f('26769','26770','26771','26772'); +f('26773','26774','26775','26776'); +f('26777','26778','26779','26780'); +f('26781','26782','26783','26784'); +f('26785','26786','26787','26788'); +f('26789','26790','26791','26792'); +f('26793','26794','26795','26796'); +f('26797','26798','26799','26800'); +f('26801','26802','26803','26804'); +f('26805','26806','26807','26808'); +f('26809','26810','26811','26812'); +f('26813','26814','26815','26816'); +f('26817','26818','26819','26820'); +f('26821','26822','26823','26824'); +f('26825','26826','26827','26828'); +f('26829','26830','26831','26832'); +f('26833','26834','26835','26836'); +f('26837','26838','26839','26840'); +f('26841','26842','26843','26844'); +f('26845','26846','26847','26848'); +f('26849','26850','26851','26852'); +f('26853','26854','26855','26856'); +f('26857','26858','26859','26860'); +f('26861','26862','26863','26864'); +f('26865','26866','26867','26868'); +f('26869','26870','26871','26872'); +f('26873','26874','26875','26876'); +f('26877','26878','26879','26880'); +f('26881','26882','26883','26884'); +f('26885','26886','26887','26888'); +f('26889','26890','26891','26892'); +f('26893','26894','26895','26896'); +f('26897','26898','26899','26900'); +f('26901','26902','26903','26904'); +f('26905','26906','26907','26908'); +f('26909','26910','26911','26912'); +f('26913','26914','26915','26916'); +f('26917','26918','26919','26920'); +f('26921','26922','26923','26924'); +f('26925','26926','26927','26928'); +f('26929','26930','26931','26932'); +f('26933','26934','26935','26936'); +f('26937','26938','26939','26940'); +f('26941','26942','26943','26944'); +f('26945','26946','26947','26948'); +f('26949','26950','26951','26952'); +f('26953','26954','26955','26956'); +f('26957','26958','26959','26960'); +f('26961','26962','26963','26964'); +f('26965','26966','26967','26968'); +f('26969','26970','26971','26972'); +f('26973','26974','26975','26976'); +f('26977','26978','26979','26980'); +f('26981','26982','26983','26984'); +f('26985','26986','26987','26988'); +f('26989','26990','26991','26992'); +f('26993','26994','26995','26996'); +f('26997','26998','26999','27000'); +f('27001','27002','27003','27004'); +f('27005','27006','27007','27008'); +f('27009','27010','27011','27012'); +f('27013','27014','27015','27016'); +f('27017','27018','27019','27020'); +f('27021','27022','27023','27024'); +f('27025','27026','27027','27028'); +f('27029','27030','27031','27032'); +f('27033','27034','27035','27036'); +f('27037','27038','27039','27040'); +f('27041','27042','27043','27044'); +f('27045','27046','27047','27048'); +f('27049','27050','27051','27052'); +f('27053','27054','27055','27056'); +f('27057','27058','27059','27060'); +f('27061','27062','27063','27064'); +f('27065','27066','27067','27068'); +f('27069','27070','27071','27072'); +f('27073','27074','27075','27076'); +f('27077','27078','27079','27080'); +f('27081','27082','27083','27084'); +f('27085','27086','27087','27088'); +f('27089','27090','27091','27092'); +f('27093','27094','27095','27096'); +f('27097','27098','27099','27100'); +f('27101','27102','27103','27104'); +f('27105','27106','27107','27108'); +f('27109','27110','27111','27112'); +f('27113','27114','27115','27116'); +f('27117','27118','27119','27120'); +f('27121','27122','27123','27124'); +f('27125','27126','27127','27128'); +f('27129','27130','27131','27132'); +f('27133','27134','27135','27136'); +f('27137','27138','27139','27140'); +f('27141','27142','27143','27144'); +f('27145','27146','27147','27148'); +f('27149','27150','27151','27152'); +f('27153','27154','27155','27156'); +f('27157','27158','27159','27160'); +f('27161','27162','27163','27164'); +f('27165','27166','27167','27168'); +f('27169','27170','27171','27172'); +f('27173','27174','27175','27176'); +f('27177','27178','27179','27180'); +f('27181','27182','27183','27184'); +f('27185','27186','27187','27188'); +f('27189','27190','27191','27192'); +f('27193','27194','27195','27196'); +f('27197','27198','27199','27200'); +f('27201','27202','27203','27204'); +f('27205','27206','27207','27208'); +f('27209','27210','27211','27212'); +f('27213','27214','27215','27216'); +f('27217','27218','27219','27220'); +f('27221','27222','27223','27224'); +f('27225','27226','27227','27228'); +f('27229','27230','27231','27232'); +f('27233','27234','27235','27236'); +f('27237','27238','27239','27240'); +f('27241','27242','27243','27244'); +f('27245','27246','27247','27248'); +f('27249','27250','27251','27252'); +f('27253','27254','27255','27256'); +f('27257','27258','27259','27260'); +f('27261','27262','27263','27264'); +f('27265','27266','27267','27268'); +f('27269','27270','27271','27272'); +f('27273','27274','27275','27276'); +f('27277','27278','27279','27280'); +f('27281','27282','27283','27284'); +f('27285','27286','27287','27288'); +f('27289','27290','27291','27292'); +f('27293','27294','27295','27296'); +f('27297','27298','27299','27300'); +f('27301','27302','27303','27304'); +f('27305','27306','27307','27308'); +f('27309','27310','27311','27312'); +f('27313','27314','27315','27316'); +f('27317','27318','27319','27320'); +f('27321','27322','27323','27324'); +f('27325','27326','27327','27328'); +f('27329','27330','27331','27332'); +f('27333','27334','27335','27336'); +f('27337','27338','27339','27340'); +f('27341','27342','27343','27344'); +f('27345','27346','27347','27348'); +f('27349','27350','27351','27352'); +f('27353','27354','27355','27356'); +f('27357','27358','27359','27360'); +f('27361','27362','27363','27364'); +f('27365','27366','27367','27368'); +f('27369','27370','27371','27372'); +f('27373','27374','27375','27376'); +f('27377','27378','27379','27380'); +f('27381','27382','27383','27384'); +f('27385','27386','27387','27388'); +f('27389','27390','27391','27392'); +f('27393','27394','27395','27396'); +f('27397','27398','27399','27400'); +f('27401','27402','27403','27404'); +f('27405','27406','27407','27408'); +f('27409','27410','27411','27412'); +f('27413','27414','27415','27416'); +f('27417','27418','27419','27420'); +f('27421','27422','27423','27424'); +f('27425','27426','27427','27428'); +f('27429','27430','27431','27432'); +f('27433','27434','27435','27436'); +f('27437','27438','27439','27440'); +f('27441','27442','27443','27444'); +f('27445','27446','27447','27448'); +f('27449','27450','27451','27452'); +f('27453','27454','27455','27456'); +f('27457','27458','27459','27460'); +f('27461','27462','27463','27464'); +f('27465','27466','27467','27468'); +f('27469','27470','27471','27472'); +f('27473','27474','27475','27476'); +f('27477','27478','27479','27480'); +f('27481','27482','27483','27484'); +f('27485','27486','27487','27488'); +f('27489','27490','27491','27492'); +f('27493','27494','27495','27496'); +f('27497','27498','27499','27500'); +f('27501','27502','27503','27504'); +f('27505','27506','27507','27508'); +f('27509','27510','27511','27512'); +f('27513','27514','27515','27516'); +f('27517','27518','27519','27520'); +f('27521','27522','27523','27524'); +f('27525','27526','27527','27528'); +f('27529','27530','27531','27532'); +f('27533','27534','27535','27536'); +f('27537','27538','27539','27540'); +f('27541','27542','27543','27544'); +f('27545','27546','27547','27548'); +f('27549','27550','27551','27552'); +f('27553','27554','27555','27556'); +f('27557','27558','27559','27560'); +f('27561','27562','27563','27564'); +f('27565','27566','27567','27568'); +f('27569','27570','27571','27572'); +f('27573','27574','27575','27576'); +f('27577','27578','27579','27580'); +f('27581','27582','27583','27584'); +f('27585','27586','27587','27588'); +f('27589','27590','27591','27592'); +f('27593','27594','27595','27596'); +f('27597','27598','27599','27600'); +f('27601','27602','27603','27604'); +f('27605','27606','27607','27608'); +f('27609','27610','27611','27612'); +f('27613','27614','27615','27616'); +f('27617','27618','27619','27620'); +f('27621','27622','27623','27624'); +f('27625','27626','27627','27628'); +f('27629','27630','27631','27632'); +f('27633','27634','27635','27636'); +f('27637','27638','27639','27640'); +f('27641','27642','27643','27644'); +f('27645','27646','27647','27648'); +f('27649','27650','27651','27652'); +f('27653','27654','27655','27656'); +f('27657','27658','27659','27660'); +f('27661','27662','27663','27664'); +f('27665','27666','27667','27668'); +f('27669','27670','27671','27672'); +f('27673','27674','27675','27676'); +f('27677','27678','27679','27680'); +f('27681','27682','27683','27684'); +f('27685','27686','27687','27688'); +f('27689','27690','27691','27692'); +f('27693','27694','27695','27696'); +f('27697','27698','27699','27700'); +f('27701','27702','27703','27704'); +f('27705','27706','27707','27708'); +f('27709','27710','27711','27712'); +f('27713','27714','27715','27716'); +f('27717','27718','27719','27720'); +f('27721','27722','27723','27724'); +f('27725','27726','27727','27728'); +f('27729','27730','27731','27732'); +f('27733','27734','27735','27736'); +f('27737','27738','27739','27740'); +f('27741','27742','27743','27744'); +f('27745','27746','27747','27748'); +f('27749','27750','27751','27752'); +f('27753','27754','27755','27756'); +f('27757','27758','27759','27760'); +f('27761','27762','27763','27764'); +f('27765','27766','27767','27768'); +f('27769','27770','27771','27772'); +f('27773','27774','27775','27776'); +f('27777','27778','27779','27780'); +f('27781','27782','27783','27784'); +f('27785','27786','27787','27788'); +f('27789','27790','27791','27792'); +f('27793','27794','27795','27796'); +f('27797','27798','27799','27800'); +f('27801','27802','27803','27804'); +f('27805','27806','27807','27808'); +f('27809','27810','27811','27812'); +f('27813','27814','27815','27816'); +f('27817','27818','27819','27820'); +f('27821','27822','27823','27824'); +f('27825','27826','27827','27828'); +f('27829','27830','27831','27832'); +f('27833','27834','27835','27836'); +f('27837','27838','27839','27840'); +f('27841','27842','27843','27844'); +f('27845','27846','27847','27848'); +f('27849','27850','27851','27852'); +f('27853','27854','27855','27856'); +f('27857','27858','27859','27860'); +f('27861','27862','27863','27864'); +f('27865','27866','27867','27868'); +f('27869','27870','27871','27872'); +f('27873','27874','27875','27876'); +f('27877','27878','27879','27880'); +f('27881','27882','27883','27884'); +f('27885','27886','27887','27888'); +f('27889','27890','27891','27892'); +f('27893','27894','27895','27896'); +f('27897','27898','27899','27900'); +f('27901','27902','27903','27904'); +f('27905','27906','27907','27908'); +f('27909','27910','27911','27912'); +f('27913','27914','27915','27916'); +f('27917','27918','27919','27920'); +f('27921','27922','27923','27924'); +f('27925','27926','27927','27928'); +f('27929','27930','27931','27932'); +f('27933','27934','27935','27936'); +f('27937','27938','27939','27940'); +f('27941','27942','27943','27944'); +f('27945','27946','27947','27948'); +f('27949','27950','27951','27952'); +f('27953','27954','27955','27956'); +f('27957','27958','27959','27960'); +f('27961','27962','27963','27964'); +f('27965','27966','27967','27968'); +f('27969','27970','27971','27972'); +f('27973','27974','27975','27976'); +f('27977','27978','27979','27980'); +f('27981','27982','27983','27984'); +f('27985','27986','27987','27988'); +f('27989','27990','27991','27992'); +f('27993','27994','27995','27996'); +f('27997','27998','27999','28000'); +f('28001','28002','28003','28004'); +f('28005','28006','28007','28008'); +f('28009','28010','28011','28012'); +f('28013','28014','28015','28016'); +f('28017','28018','28019','28020'); +f('28021','28022','28023','28024'); +f('28025','28026','28027','28028'); +f('28029','28030','28031','28032'); +f('28033','28034','28035','28036'); +f('28037','28038','28039','28040'); +f('28041','28042','28043','28044'); +f('28045','28046','28047','28048'); +f('28049','28050','28051','28052'); +f('28053','28054','28055','28056'); +f('28057','28058','28059','28060'); +f('28061','28062','28063','28064'); +f('28065','28066','28067','28068'); +f('28069','28070','28071','28072'); +f('28073','28074','28075','28076'); +f('28077','28078','28079','28080'); +f('28081','28082','28083','28084'); +f('28085','28086','28087','28088'); +f('28089','28090','28091','28092'); +f('28093','28094','28095','28096'); +f('28097','28098','28099','28100'); +f('28101','28102','28103','28104'); +f('28105','28106','28107','28108'); +f('28109','28110','28111','28112'); +f('28113','28114','28115','28116'); +f('28117','28118','28119','28120'); +f('28121','28122','28123','28124'); +f('28125','28126','28127','28128'); +f('28129','28130','28131','28132'); +f('28133','28134','28135','28136'); +f('28137','28138','28139','28140'); +f('28141','28142','28143','28144'); +f('28145','28146','28147','28148'); +f('28149','28150','28151','28152'); +f('28153','28154','28155','28156'); +f('28157','28158','28159','28160'); +f('28161','28162','28163','28164'); +f('28165','28166','28167','28168'); +f('28169','28170','28171','28172'); +f('28173','28174','28175','28176'); +f('28177','28178','28179','28180'); +f('28181','28182','28183','28184'); +f('28185','28186','28187','28188'); +f('28189','28190','28191','28192'); +f('28193','28194','28195','28196'); +f('28197','28198','28199','28200'); +f('28201','28202','28203','28204'); +f('28205','28206','28207','28208'); +f('28209','28210','28211','28212'); +f('28213','28214','28215','28216'); +f('28217','28218','28219','28220'); +f('28221','28222','28223','28224'); +f('28225','28226','28227','28228'); +f('28229','28230','28231','28232'); +f('28233','28234','28235','28236'); +f('28237','28238','28239','28240'); +f('28241','28242','28243','28244'); +f('28245','28246','28247','28248'); +f('28249','28250','28251','28252'); +f('28253','28254','28255','28256'); +f('28257','28258','28259','28260'); +f('28261','28262','28263','28264'); +f('28265','28266','28267','28268'); +f('28269','28270','28271','28272'); +f('28273','28274','28275','28276'); +f('28277','28278','28279','28280'); +f('28281','28282','28283','28284'); +f('28285','28286','28287','28288'); +f('28289','28290','28291','28292'); +f('28293','28294','28295','28296'); +f('28297','28298','28299','28300'); +f('28301','28302','28303','28304'); +f('28305','28306','28307','28308'); +f('28309','28310','28311','28312'); +f('28313','28314','28315','28316'); +f('28317','28318','28319','28320'); +f('28321','28322','28323','28324'); +f('28325','28326','28327','28328'); +f('28329','28330','28331','28332'); +f('28333','28334','28335','28336'); +f('28337','28338','28339','28340'); +f('28341','28342','28343','28344'); +f('28345','28346','28347','28348'); +f('28349','28350','28351','28352'); +f('28353','28354','28355','28356'); +f('28357','28358','28359','28360'); +f('28361','28362','28363','28364'); +f('28365','28366','28367','28368'); +f('28369','28370','28371','28372'); +f('28373','28374','28375','28376'); +f('28377','28378','28379','28380'); +f('28381','28382','28383','28384'); +f('28385','28386','28387','28388'); +f('28389','28390','28391','28392'); +f('28393','28394','28395','28396'); +f('28397','28398','28399','28400'); +f('28401','28402','28403','28404'); +f('28405','28406','28407','28408'); +f('28409','28410','28411','28412'); +f('28413','28414','28415','28416'); +f('28417','28418','28419','28420'); +f('28421','28422','28423','28424'); +f('28425','28426','28427','28428'); +f('28429','28430','28431','28432'); +f('28433','28434','28435','28436'); +f('28437','28438','28439','28440'); +f('28441','28442','28443','28444'); +f('28445','28446','28447','28448'); +f('28449','28450','28451','28452'); +f('28453','28454','28455','28456'); +f('28457','28458','28459','28460'); +f('28461','28462','28463','28464'); +f('28465','28466','28467','28468'); +f('28469','28470','28471','28472'); +f('28473','28474','28475','28476'); +f('28477','28478','28479','28480'); +f('28481','28482','28483','28484'); +f('28485','28486','28487','28488'); +f('28489','28490','28491','28492'); +f('28493','28494','28495','28496'); +f('28497','28498','28499','28500'); +f('28501','28502','28503','28504'); +f('28505','28506','28507','28508'); +f('28509','28510','28511','28512'); +f('28513','28514','28515','28516'); +f('28517','28518','28519','28520'); +f('28521','28522','28523','28524'); +f('28525','28526','28527','28528'); +f('28529','28530','28531','28532'); +f('28533','28534','28535','28536'); +f('28537','28538','28539','28540'); +f('28541','28542','28543','28544'); +f('28545','28546','28547','28548'); +f('28549','28550','28551','28552'); +f('28553','28554','28555','28556'); +f('28557','28558','28559','28560'); +f('28561','28562','28563','28564'); +f('28565','28566','28567','28568'); +f('28569','28570','28571','28572'); +f('28573','28574','28575','28576'); +f('28577','28578','28579','28580'); +f('28581','28582','28583','28584'); +f('28585','28586','28587','28588'); +f('28589','28590','28591','28592'); +f('28593','28594','28595','28596'); +f('28597','28598','28599','28600'); +f('28601','28602','28603','28604'); +f('28605','28606','28607','28608'); +f('28609','28610','28611','28612'); +f('28613','28614','28615','28616'); +f('28617','28618','28619','28620'); +f('28621','28622','28623','28624'); +f('28625','28626','28627','28628'); +f('28629','28630','28631','28632'); +f('28633','28634','28635','28636'); +f('28637','28638','28639','28640'); +f('28641','28642','28643','28644'); +f('28645','28646','28647','28648'); +f('28649','28650','28651','28652'); +f('28653','28654','28655','28656'); +f('28657','28658','28659','28660'); +f('28661','28662','28663','28664'); +f('28665','28666','28667','28668'); +f('28669','28670','28671','28672'); +f('28673','28674','28675','28676'); +f('28677','28678','28679','28680'); +f('28681','28682','28683','28684'); +f('28685','28686','28687','28688'); +f('28689','28690','28691','28692'); +f('28693','28694','28695','28696'); +f('28697','28698','28699','28700'); +f('28701','28702','28703','28704'); +f('28705','28706','28707','28708'); +f('28709','28710','28711','28712'); +f('28713','28714','28715','28716'); +f('28717','28718','28719','28720'); +f('28721','28722','28723','28724'); +f('28725','28726','28727','28728'); +f('28729','28730','28731','28732'); +f('28733','28734','28735','28736'); +f('28737','28738','28739','28740'); +f('28741','28742','28743','28744'); +f('28745','28746','28747','28748'); +f('28749','28750','28751','28752'); +f('28753','28754','28755','28756'); +f('28757','28758','28759','28760'); +f('28761','28762','28763','28764'); +f('28765','28766','28767','28768'); +f('28769','28770','28771','28772'); +f('28773','28774','28775','28776'); +f('28777','28778','28779','28780'); +f('28781','28782','28783','28784'); +f('28785','28786','28787','28788'); +f('28789','28790','28791','28792'); +f('28793','28794','28795','28796'); +f('28797','28798','28799','28800'); +f('28801','28802','28803','28804'); +f('28805','28806','28807','28808'); +f('28809','28810','28811','28812'); +f('28813','28814','28815','28816'); +f('28817','28818','28819','28820'); +f('28821','28822','28823','28824'); +f('28825','28826','28827','28828'); +f('28829','28830','28831','28832'); +f('28833','28834','28835','28836'); +f('28837','28838','28839','28840'); +f('28841','28842','28843','28844'); +f('28845','28846','28847','28848'); +f('28849','28850','28851','28852'); +f('28853','28854','28855','28856'); +f('28857','28858','28859','28860'); +f('28861','28862','28863','28864'); +f('28865','28866','28867','28868'); +f('28869','28870','28871','28872'); +f('28873','28874','28875','28876'); +f('28877','28878','28879','28880'); +f('28881','28882','28883','28884'); +f('28885','28886','28887','28888'); +f('28889','28890','28891','28892'); +f('28893','28894','28895','28896'); +f('28897','28898','28899','28900'); +f('28901','28902','28903','28904'); +f('28905','28906','28907','28908'); +f('28909','28910','28911','28912'); +f('28913','28914','28915','28916'); +f('28917','28918','28919','28920'); +f('28921','28922','28923','28924'); +f('28925','28926','28927','28928'); +f('28929','28930','28931','28932'); +f('28933','28934','28935','28936'); +f('28937','28938','28939','28940'); +f('28941','28942','28943','28944'); +f('28945','28946','28947','28948'); +f('28949','28950','28951','28952'); +f('28953','28954','28955','28956'); +f('28957','28958','28959','28960'); +f('28961','28962','28963','28964'); +f('28965','28966','28967','28968'); +f('28969','28970','28971','28972'); +f('28973','28974','28975','28976'); +f('28977','28978','28979','28980'); +f('28981','28982','28983','28984'); +f('28985','28986','28987','28988'); +f('28989','28990','28991','28992'); +f('28993','28994','28995','28996'); +f('28997','28998','28999','29000'); +f('29001','29002','29003','29004'); +f('29005','29006','29007','29008'); +f('29009','29010','29011','29012'); +f('29013','29014','29015','29016'); +f('29017','29018','29019','29020'); +f('29021','29022','29023','29024'); +f('29025','29026','29027','29028'); +f('29029','29030','29031','29032'); +f('29033','29034','29035','29036'); +f('29037','29038','29039','29040'); +f('29041','29042','29043','29044'); +f('29045','29046','29047','29048'); +f('29049','29050','29051','29052'); +f('29053','29054','29055','29056'); +f('29057','29058','29059','29060'); +f('29061','29062','29063','29064'); +f('29065','29066','29067','29068'); +f('29069','29070','29071','29072'); +f('29073','29074','29075','29076'); +f('29077','29078','29079','29080'); +f('29081','29082','29083','29084'); +f('29085','29086','29087','29088'); +f('29089','29090','29091','29092'); +f('29093','29094','29095','29096'); +f('29097','29098','29099','29100'); +f('29101','29102','29103','29104'); +f('29105','29106','29107','29108'); +f('29109','29110','29111','29112'); +f('29113','29114','29115','29116'); +f('29117','29118','29119','29120'); +f('29121','29122','29123','29124'); +f('29125','29126','29127','29128'); +f('29129','29130','29131','29132'); +f('29133','29134','29135','29136'); +f('29137','29138','29139','29140'); +f('29141','29142','29143','29144'); +f('29145','29146','29147','29148'); +f('29149','29150','29151','29152'); +f('29153','29154','29155','29156'); +f('29157','29158','29159','29160'); +f('29161','29162','29163','29164'); +f('29165','29166','29167','29168'); +f('29169','29170','29171','29172'); +f('29173','29174','29175','29176'); +f('29177','29178','29179','29180'); +f('29181','29182','29183','29184'); +f('29185','29186','29187','29188'); +f('29189','29190','29191','29192'); +f('29193','29194','29195','29196'); +f('29197','29198','29199','29200'); +f('29201','29202','29203','29204'); +f('29205','29206','29207','29208'); +f('29209','29210','29211','29212'); +f('29213','29214','29215','29216'); +f('29217','29218','29219','29220'); +f('29221','29222','29223','29224'); +f('29225','29226','29227','29228'); +f('29229','29230','29231','29232'); +f('29233','29234','29235','29236'); +f('29237','29238','29239','29240'); +f('29241','29242','29243','29244'); +f('29245','29246','29247','29248'); +f('29249','29250','29251','29252'); +f('29253','29254','29255','29256'); +f('29257','29258','29259','29260'); +f('29261','29262','29263','29264'); +f('29265','29266','29267','29268'); +f('29269','29270','29271','29272'); +f('29273','29274','29275','29276'); +f('29277','29278','29279','29280'); +f('29281','29282','29283','29284'); +f('29285','29286','29287','29288'); +f('29289','29290','29291','29292'); +f('29293','29294','29295','29296'); +f('29297','29298','29299','29300'); +f('29301','29302','29303','29304'); +f('29305','29306','29307','29308'); +f('29309','29310','29311','29312'); +f('29313','29314','29315','29316'); +f('29317','29318','29319','29320'); +f('29321','29322','29323','29324'); +f('29325','29326','29327','29328'); +f('29329','29330','29331','29332'); +f('29333','29334','29335','29336'); +f('29337','29338','29339','29340'); +f('29341','29342','29343','29344'); +f('29345','29346','29347','29348'); +f('29349','29350','29351','29352'); +f('29353','29354','29355','29356'); +f('29357','29358','29359','29360'); +f('29361','29362','29363','29364'); +f('29365','29366','29367','29368'); +f('29369','29370','29371','29372'); +f('29373','29374','29375','29376'); +f('29377','29378','29379','29380'); +f('29381','29382','29383','29384'); +f('29385','29386','29387','29388'); +f('29389','29390','29391','29392'); +f('29393','29394','29395','29396'); +f('29397','29398','29399','29400'); +f('29401','29402','29403','29404'); +f('29405','29406','29407','29408'); +f('29409','29410','29411','29412'); +f('29413','29414','29415','29416'); +f('29417','29418','29419','29420'); +f('29421','29422','29423','29424'); +f('29425','29426','29427','29428'); +f('29429','29430','29431','29432'); +f('29433','29434','29435','29436'); +f('29437','29438','29439','29440'); +f('29441','29442','29443','29444'); +f('29445','29446','29447','29448'); +f('29449','29450','29451','29452'); +f('29453','29454','29455','29456'); +f('29457','29458','29459','29460'); +f('29461','29462','29463','29464'); +f('29465','29466','29467','29468'); +f('29469','29470','29471','29472'); +f('29473','29474','29475','29476'); +f('29477','29478','29479','29480'); +f('29481','29482','29483','29484'); +f('29485','29486','29487','29488'); +f('29489','29490','29491','29492'); +f('29493','29494','29495','29496'); +f('29497','29498','29499','29500'); +f('29501','29502','29503','29504'); +f('29505','29506','29507','29508'); +f('29509','29510','29511','29512'); +f('29513','29514','29515','29516'); +f('29517','29518','29519','29520'); +f('29521','29522','29523','29524'); +f('29525','29526','29527','29528'); +f('29529','29530','29531','29532'); +f('29533','29534','29535','29536'); +f('29537','29538','29539','29540'); +f('29541','29542','29543','29544'); +f('29545','29546','29547','29548'); +f('29549','29550','29551','29552'); +f('29553','29554','29555','29556'); +f('29557','29558','29559','29560'); +f('29561','29562','29563','29564'); +f('29565','29566','29567','29568'); +f('29569','29570','29571','29572'); +f('29573','29574','29575','29576'); +f('29577','29578','29579','29580'); +f('29581','29582','29583','29584'); +f('29585','29586','29587','29588'); +f('29589','29590','29591','29592'); +f('29593','29594','29595','29596'); +f('29597','29598','29599','29600'); +f('29601','29602','29603','29604'); +f('29605','29606','29607','29608'); +f('29609','29610','29611','29612'); +f('29613','29614','29615','29616'); +f('29617','29618','29619','29620'); +f('29621','29622','29623','29624'); +f('29625','29626','29627','29628'); +f('29629','29630','29631','29632'); +f('29633','29634','29635','29636'); +f('29637','29638','29639','29640'); +f('29641','29642','29643','29644'); +f('29645','29646','29647','29648'); +f('29649','29650','29651','29652'); +f('29653','29654','29655','29656'); +f('29657','29658','29659','29660'); +f('29661','29662','29663','29664'); +f('29665','29666','29667','29668'); +f('29669','29670','29671','29672'); +f('29673','29674','29675','29676'); +f('29677','29678','29679','29680'); +f('29681','29682','29683','29684'); +f('29685','29686','29687','29688'); +f('29689','29690','29691','29692'); +f('29693','29694','29695','29696'); +f('29697','29698','29699','29700'); +f('29701','29702','29703','29704'); +f('29705','29706','29707','29708'); +f('29709','29710','29711','29712'); +f('29713','29714','29715','29716'); +f('29717','29718','29719','29720'); +f('29721','29722','29723','29724'); +f('29725','29726','29727','29728'); +f('29729','29730','29731','29732'); +f('29733','29734','29735','29736'); +f('29737','29738','29739','29740'); +f('29741','29742','29743','29744'); +f('29745','29746','29747','29748'); +f('29749','29750','29751','29752'); +f('29753','29754','29755','29756'); +f('29757','29758','29759','29760'); +f('29761','29762','29763','29764'); +f('29765','29766','29767','29768'); +f('29769','29770','29771','29772'); +f('29773','29774','29775','29776'); +f('29777','29778','29779','29780'); +f('29781','29782','29783','29784'); +f('29785','29786','29787','29788'); +f('29789','29790','29791','29792'); +f('29793','29794','29795','29796'); +f('29797','29798','29799','29800'); +f('29801','29802','29803','29804'); +f('29805','29806','29807','29808'); +f('29809','29810','29811','29812'); +f('29813','29814','29815','29816'); +f('29817','29818','29819','29820'); +f('29821','29822','29823','29824'); +f('29825','29826','29827','29828'); +f('29829','29830','29831','29832'); +f('29833','29834','29835','29836'); +f('29837','29838','29839','29840'); +f('29841','29842','29843','29844'); +f('29845','29846','29847','29848'); +f('29849','29850','29851','29852'); +f('29853','29854','29855','29856'); +f('29857','29858','29859','29860'); +f('29861','29862','29863','29864'); +f('29865','29866','29867','29868'); +f('29869','29870','29871','29872'); +f('29873','29874','29875','29876'); +f('29877','29878','29879','29880'); +f('29881','29882','29883','29884'); +f('29885','29886','29887','29888'); +f('29889','29890','29891','29892'); +f('29893','29894','29895','29896'); +f('29897','29898','29899','29900'); +f('29901','29902','29903','29904'); +f('29905','29906','29907','29908'); +f('29909','29910','29911','29912'); +f('29913','29914','29915','29916'); +f('29917','29918','29919','29920'); +f('29921','29922','29923','29924'); +f('29925','29926','29927','29928'); +f('29929','29930','29931','29932'); +f('29933','29934','29935','29936'); +f('29937','29938','29939','29940'); +f('29941','29942','29943','29944'); +f('29945','29946','29947','29948'); +f('29949','29950','29951','29952'); +f('29953','29954','29955','29956'); +f('29957','29958','29959','29960'); +f('29961','29962','29963','29964'); +f('29965','29966','29967','29968'); +f('29969','29970','29971','29972'); +f('29973','29974','29975','29976'); +f('29977','29978','29979','29980'); +f('29981','29982','29983','29984'); +f('29985','29986','29987','29988'); +f('29989','29990','29991','29992'); +f('29993','29994','29995','29996'); +f('29997','29998','29999','30000'); +f('30001','30002','30003','30004'); +f('30005','30006','30007','30008'); +f('30009','30010','30011','30012'); +f('30013','30014','30015','30016'); +f('30017','30018','30019','30020'); +f('30021','30022','30023','30024'); +f('30025','30026','30027','30028'); +f('30029','30030','30031','30032'); +f('30033','30034','30035','30036'); +f('30037','30038','30039','30040'); +f('30041','30042','30043','30044'); +f('30045','30046','30047','30048'); +f('30049','30050','30051','30052'); +f('30053','30054','30055','30056'); +f('30057','30058','30059','30060'); +f('30061','30062','30063','30064'); +f('30065','30066','30067','30068'); +f('30069','30070','30071','30072'); +f('30073','30074','30075','30076'); +f('30077','30078','30079','30080'); +f('30081','30082','30083','30084'); +f('30085','30086','30087','30088'); +f('30089','30090','30091','30092'); +f('30093','30094','30095','30096'); +f('30097','30098','30099','30100'); +f('30101','30102','30103','30104'); +f('30105','30106','30107','30108'); +f('30109','30110','30111','30112'); +f('30113','30114','30115','30116'); +f('30117','30118','30119','30120'); +f('30121','30122','30123','30124'); +f('30125','30126','30127','30128'); +f('30129','30130','30131','30132'); +f('30133','30134','30135','30136'); +f('30137','30138','30139','30140'); +f('30141','30142','30143','30144'); +f('30145','30146','30147','30148'); +f('30149','30150','30151','30152'); +f('30153','30154','30155','30156'); +f('30157','30158','30159','30160'); +f('30161','30162','30163','30164'); +f('30165','30166','30167','30168'); +f('30169','30170','30171','30172'); +f('30173','30174','30175','30176'); +f('30177','30178','30179','30180'); +f('30181','30182','30183','30184'); +f('30185','30186','30187','30188'); +f('30189','30190','30191','30192'); +f('30193','30194','30195','30196'); +f('30197','30198','30199','30200'); +f('30201','30202','30203','30204'); +f('30205','30206','30207','30208'); +f('30209','30210','30211','30212'); +f('30213','30214','30215','30216'); +f('30217','30218','30219','30220'); +f('30221','30222','30223','30224'); +f('30225','30226','30227','30228'); +f('30229','30230','30231','30232'); +f('30233','30234','30235','30236'); +f('30237','30238','30239','30240'); +f('30241','30242','30243','30244'); +f('30245','30246','30247','30248'); +f('30249','30250','30251','30252'); +f('30253','30254','30255','30256'); +f('30257','30258','30259','30260'); +f('30261','30262','30263','30264'); +f('30265','30266','30267','30268'); +f('30269','30270','30271','30272'); +f('30273','30274','30275','30276'); +f('30277','30278','30279','30280'); +f('30281','30282','30283','30284'); +f('30285','30286','30287','30288'); +f('30289','30290','30291','30292'); +f('30293','30294','30295','30296'); +f('30297','30298','30299','30300'); +f('30301','30302','30303','30304'); +f('30305','30306','30307','30308'); +f('30309','30310','30311','30312'); +f('30313','30314','30315','30316'); +f('30317','30318','30319','30320'); +f('30321','30322','30323','30324'); +f('30325','30326','30327','30328'); +f('30329','30330','30331','30332'); +f('30333','30334','30335','30336'); +f('30337','30338','30339','30340'); +f('30341','30342','30343','30344'); +f('30345','30346','30347','30348'); +f('30349','30350','30351','30352'); +f('30353','30354','30355','30356'); +f('30357','30358','30359','30360'); +f('30361','30362','30363','30364'); +f('30365','30366','30367','30368'); +f('30369','30370','30371','30372'); +f('30373','30374','30375','30376'); +f('30377','30378','30379','30380'); +f('30381','30382','30383','30384'); +f('30385','30386','30387','30388'); +f('30389','30390','30391','30392'); +f('30393','30394','30395','30396'); +f('30397','30398','30399','30400'); +f('30401','30402','30403','30404'); +f('30405','30406','30407','30408'); +f('30409','30410','30411','30412'); +f('30413','30414','30415','30416'); +f('30417','30418','30419','30420'); +f('30421','30422','30423','30424'); +f('30425','30426','30427','30428'); +f('30429','30430','30431','30432'); +f('30433','30434','30435','30436'); +f('30437','30438','30439','30440'); +f('30441','30442','30443','30444'); +f('30445','30446','30447','30448'); +f('30449','30450','30451','30452'); +f('30453','30454','30455','30456'); +f('30457','30458','30459','30460'); +f('30461','30462','30463','30464'); +f('30465','30466','30467','30468'); +f('30469','30470','30471','30472'); +f('30473','30474','30475','30476'); +f('30477','30478','30479','30480'); +f('30481','30482','30483','30484'); +f('30485','30486','30487','30488'); +f('30489','30490','30491','30492'); +f('30493','30494','30495','30496'); +f('30497','30498','30499','30500'); +f('30501','30502','30503','30504'); +f('30505','30506','30507','30508'); +f('30509','30510','30511','30512'); +f('30513','30514','30515','30516'); +f('30517','30518','30519','30520'); +f('30521','30522','30523','30524'); +f('30525','30526','30527','30528'); +f('30529','30530','30531','30532'); +f('30533','30534','30535','30536'); +f('30537','30538','30539','30540'); +f('30541','30542','30543','30544'); +f('30545','30546','30547','30548'); +f('30549','30550','30551','30552'); +f('30553','30554','30555','30556'); +f('30557','30558','30559','30560'); +f('30561','30562','30563','30564'); +f('30565','30566','30567','30568'); +f('30569','30570','30571','30572'); +f('30573','30574','30575','30576'); +f('30577','30578','30579','30580'); +f('30581','30582','30583','30584'); +f('30585','30586','30587','30588'); +f('30589','30590','30591','30592'); +f('30593','30594','30595','30596'); +f('30597','30598','30599','30600'); +f('30601','30602','30603','30604'); +f('30605','30606','30607','30608'); +f('30609','30610','30611','30612'); +f('30613','30614','30615','30616'); +f('30617','30618','30619','30620'); +f('30621','30622','30623','30624'); +f('30625','30626','30627','30628'); +f('30629','30630','30631','30632'); +f('30633','30634','30635','30636'); +f('30637','30638','30639','30640'); +f('30641','30642','30643','30644'); +f('30645','30646','30647','30648'); +f('30649','30650','30651','30652'); +f('30653','30654','30655','30656'); +f('30657','30658','30659','30660'); +f('30661','30662','30663','30664'); +f('30665','30666','30667','30668'); +f('30669','30670','30671','30672'); +f('30673','30674','30675','30676'); +f('30677','30678','30679','30680'); +f('30681','30682','30683','30684'); +f('30685','30686','30687','30688'); +f('30689','30690','30691','30692'); +f('30693','30694','30695','30696'); +f('30697','30698','30699','30700'); +f('30701','30702','30703','30704'); +f('30705','30706','30707','30708'); +f('30709','30710','30711','30712'); +f('30713','30714','30715','30716'); +f('30717','30718','30719','30720'); +f('30721','30722','30723','30724'); +f('30725','30726','30727','30728'); +f('30729','30730','30731','30732'); +f('30733','30734','30735','30736'); +f('30737','30738','30739','30740'); +f('30741','30742','30743','30744'); +f('30745','30746','30747','30748'); +f('30749','30750','30751','30752'); +f('30753','30754','30755','30756'); +f('30757','30758','30759','30760'); +f('30761','30762','30763','30764'); +f('30765','30766','30767','30768'); +f('30769','30770','30771','30772'); +f('30773','30774','30775','30776'); +f('30777','30778','30779','30780'); +f('30781','30782','30783','30784'); +f('30785','30786','30787','30788'); +f('30789','30790','30791','30792'); +f('30793','30794','30795','30796'); +f('30797','30798','30799','30800'); +f('30801','30802','30803','30804'); +f('30805','30806','30807','30808'); +f('30809','30810','30811','30812'); +f('30813','30814','30815','30816'); +f('30817','30818','30819','30820'); +f('30821','30822','30823','30824'); +f('30825','30826','30827','30828'); +f('30829','30830','30831','30832'); +f('30833','30834','30835','30836'); +f('30837','30838','30839','30840'); +f('30841','30842','30843','30844'); +f('30845','30846','30847','30848'); +f('30849','30850','30851','30852'); +f('30853','30854','30855','30856'); +f('30857','30858','30859','30860'); +f('30861','30862','30863','30864'); +f('30865','30866','30867','30868'); +f('30869','30870','30871','30872'); +f('30873','30874','30875','30876'); +f('30877','30878','30879','30880'); +f('30881','30882','30883','30884'); +f('30885','30886','30887','30888'); +f('30889','30890','30891','30892'); +f('30893','30894','30895','30896'); +f('30897','30898','30899','30900'); +f('30901','30902','30903','30904'); +f('30905','30906','30907','30908'); +f('30909','30910','30911','30912'); +f('30913','30914','30915','30916'); +f('30917','30918','30919','30920'); +f('30921','30922','30923','30924'); +f('30925','30926','30927','30928'); +f('30929','30930','30931','30932'); +f('30933','30934','30935','30936'); +f('30937','30938','30939','30940'); +f('30941','30942','30943','30944'); +f('30945','30946','30947','30948'); +f('30949','30950','30951','30952'); +f('30953','30954','30955','30956'); +f('30957','30958','30959','30960'); +f('30961','30962','30963','30964'); +f('30965','30966','30967','30968'); +f('30969','30970','30971','30972'); +f('30973','30974','30975','30976'); +f('30977','30978','30979','30980'); +f('30981','30982','30983','30984'); +f('30985','30986','30987','30988'); +f('30989','30990','30991','30992'); +f('30993','30994','30995','30996'); +f('30997','30998','30999','31000'); +f('31001','31002','31003','31004'); +f('31005','31006','31007','31008'); +f('31009','31010','31011','31012'); +f('31013','31014','31015','31016'); +f('31017','31018','31019','31020'); +f('31021','31022','31023','31024'); +f('31025','31026','31027','31028'); +f('31029','31030','31031','31032'); +f('31033','31034','31035','31036'); +f('31037','31038','31039','31040'); +f('31041','31042','31043','31044'); +f('31045','31046','31047','31048'); +f('31049','31050','31051','31052'); +f('31053','31054','31055','31056'); +f('31057','31058','31059','31060'); +f('31061','31062','31063','31064'); +f('31065','31066','31067','31068'); +f('31069','31070','31071','31072'); +f('31073','31074','31075','31076'); +f('31077','31078','31079','31080'); +f('31081','31082','31083','31084'); +f('31085','31086','31087','31088'); +f('31089','31090','31091','31092'); +f('31093','31094','31095','31096'); +f('31097','31098','31099','31100'); +f('31101','31102','31103','31104'); +f('31105','31106','31107','31108'); +f('31109','31110','31111','31112'); +f('31113','31114','31115','31116'); +f('31117','31118','31119','31120'); +f('31121','31122','31123','31124'); +f('31125','31126','31127','31128'); +f('31129','31130','31131','31132'); +f('31133','31134','31135','31136'); +f('31137','31138','31139','31140'); +f('31141','31142','31143','31144'); +f('31145','31146','31147','31148'); +f('31149','31150','31151','31152'); +f('31153','31154','31155','31156'); +f('31157','31158','31159','31160'); +f('31161','31162','31163','31164'); +f('31165','31166','31167','31168'); +f('31169','31170','31171','31172'); +f('31173','31174','31175','31176'); +f('31177','31178','31179','31180'); +f('31181','31182','31183','31184'); +f('31185','31186','31187','31188'); +f('31189','31190','31191','31192'); +f('31193','31194','31195','31196'); +f('31197','31198','31199','31200'); +f('31201','31202','31203','31204'); +f('31205','31206','31207','31208'); +f('31209','31210','31211','31212'); +f('31213','31214','31215','31216'); +f('31217','31218','31219','31220'); +f('31221','31222','31223','31224'); +f('31225','31226','31227','31228'); +f('31229','31230','31231','31232'); +f('31233','31234','31235','31236'); +f('31237','31238','31239','31240'); +f('31241','31242','31243','31244'); +f('31245','31246','31247','31248'); +f('31249','31250','31251','31252'); +f('31253','31254','31255','31256'); +f('31257','31258','31259','31260'); +f('31261','31262','31263','31264'); +f('31265','31266','31267','31268'); +f('31269','31270','31271','31272'); +f('31273','31274','31275','31276'); +f('31277','31278','31279','31280'); +f('31281','31282','31283','31284'); +f('31285','31286','31287','31288'); +f('31289','31290','31291','31292'); +f('31293','31294','31295','31296'); +f('31297','31298','31299','31300'); +f('31301','31302','31303','31304'); +f('31305','31306','31307','31308'); +f('31309','31310','31311','31312'); +f('31313','31314','31315','31316'); +f('31317','31318','31319','31320'); +f('31321','31322','31323','31324'); +f('31325','31326','31327','31328'); +f('31329','31330','31331','31332'); +f('31333','31334','31335','31336'); +f('31337','31338','31339','31340'); +f('31341','31342','31343','31344'); +f('31345','31346','31347','31348'); +f('31349','31350','31351','31352'); +f('31353','31354','31355','31356'); +f('31357','31358','31359','31360'); +f('31361','31362','31363','31364'); +f('31365','31366','31367','31368'); +f('31369','31370','31371','31372'); +f('31373','31374','31375','31376'); +f('31377','31378','31379','31380'); +f('31381','31382','31383','31384'); +f('31385','31386','31387','31388'); +f('31389','31390','31391','31392'); +f('31393','31394','31395','31396'); +f('31397','31398','31399','31400'); +f('31401','31402','31403','31404'); +f('31405','31406','31407','31408'); +f('31409','31410','31411','31412'); +f('31413','31414','31415','31416'); +f('31417','31418','31419','31420'); +f('31421','31422','31423','31424'); +f('31425','31426','31427','31428'); +f('31429','31430','31431','31432'); +f('31433','31434','31435','31436'); +f('31437','31438','31439','31440'); +f('31441','31442','31443','31444'); +f('31445','31446','31447','31448'); +f('31449','31450','31451','31452'); +f('31453','31454','31455','31456'); +f('31457','31458','31459','31460'); +f('31461','31462','31463','31464'); +f('31465','31466','31467','31468'); +f('31469','31470','31471','31472'); +f('31473','31474','31475','31476'); +f('31477','31478','31479','31480'); +f('31481','31482','31483','31484'); +f('31485','31486','31487','31488'); +f('31489','31490','31491','31492'); +f('31493','31494','31495','31496'); +f('31497','31498','31499','31500'); +f('31501','31502','31503','31504'); +f('31505','31506','31507','31508'); +f('31509','31510','31511','31512'); +f('31513','31514','31515','31516'); +f('31517','31518','31519','31520'); +f('31521','31522','31523','31524'); +f('31525','31526','31527','31528'); +f('31529','31530','31531','31532'); +f('31533','31534','31535','31536'); +f('31537','31538','31539','31540'); +f('31541','31542','31543','31544'); +f('31545','31546','31547','31548'); +f('31549','31550','31551','31552'); +f('31553','31554','31555','31556'); +f('31557','31558','31559','31560'); +f('31561','31562','31563','31564'); +f('31565','31566','31567','31568'); +f('31569','31570','31571','31572'); +f('31573','31574','31575','31576'); +f('31577','31578','31579','31580'); +f('31581','31582','31583','31584'); +f('31585','31586','31587','31588'); +f('31589','31590','31591','31592'); +f('31593','31594','31595','31596'); +f('31597','31598','31599','31600'); +f('31601','31602','31603','31604'); +f('31605','31606','31607','31608'); +f('31609','31610','31611','31612'); +f('31613','31614','31615','31616'); +f('31617','31618','31619','31620'); +f('31621','31622','31623','31624'); +f('31625','31626','31627','31628'); +f('31629','31630','31631','31632'); +f('31633','31634','31635','31636'); +f('31637','31638','31639','31640'); +f('31641','31642','31643','31644'); +f('31645','31646','31647','31648'); +f('31649','31650','31651','31652'); +f('31653','31654','31655','31656'); +f('31657','31658','31659','31660'); +f('31661','31662','31663','31664'); +f('31665','31666','31667','31668'); +f('31669','31670','31671','31672'); +f('31673','31674','31675','31676'); +f('31677','31678','31679','31680'); +f('31681','31682','31683','31684'); +f('31685','31686','31687','31688'); +f('31689','31690','31691','31692'); +f('31693','31694','31695','31696'); +f('31697','31698','31699','31700'); +f('31701','31702','31703','31704'); +f('31705','31706','31707','31708'); +f('31709','31710','31711','31712'); +f('31713','31714','31715','31716'); +f('31717','31718','31719','31720'); +f('31721','31722','31723','31724'); +f('31725','31726','31727','31728'); +f('31729','31730','31731','31732'); +f('31733','31734','31735','31736'); +f('31737','31738','31739','31740'); +f('31741','31742','31743','31744'); +f('31745','31746','31747','31748'); +f('31749','31750','31751','31752'); +f('31753','31754','31755','31756'); +f('31757','31758','31759','31760'); +f('31761','31762','31763','31764'); +f('31765','31766','31767','31768'); +f('31769','31770','31771','31772'); +f('31773','31774','31775','31776'); +f('31777','31778','31779','31780'); +f('31781','31782','31783','31784'); +f('31785','31786','31787','31788'); +f('31789','31790','31791','31792'); +f('31793','31794','31795','31796'); +f('31797','31798','31799','31800'); +f('31801','31802','31803','31804'); +f('31805','31806','31807','31808'); +f('31809','31810','31811','31812'); +f('31813','31814','31815','31816'); +f('31817','31818','31819','31820'); +f('31821','31822','31823','31824'); +f('31825','31826','31827','31828'); +f('31829','31830','31831','31832'); +f('31833','31834','31835','31836'); +f('31837','31838','31839','31840'); +f('31841','31842','31843','31844'); +f('31845','31846','31847','31848'); +f('31849','31850','31851','31852'); +f('31853','31854','31855','31856'); +f('31857','31858','31859','31860'); +f('31861','31862','31863','31864'); +f('31865','31866','31867','31868'); +f('31869','31870','31871','31872'); +f('31873','31874','31875','31876'); +f('31877','31878','31879','31880'); +f('31881','31882','31883','31884'); +f('31885','31886','31887','31888'); +f('31889','31890','31891','31892'); +f('31893','31894','31895','31896'); +f('31897','31898','31899','31900'); +f('31901','31902','31903','31904'); +f('31905','31906','31907','31908'); +f('31909','31910','31911','31912'); +f('31913','31914','31915','31916'); +f('31917','31918','31919','31920'); +f('31921','31922','31923','31924'); +f('31925','31926','31927','31928'); +f('31929','31930','31931','31932'); +f('31933','31934','31935','31936'); +f('31937','31938','31939','31940'); +f('31941','31942','31943','31944'); +f('31945','31946','31947','31948'); +f('31949','31950','31951','31952'); +f('31953','31954','31955','31956'); +f('31957','31958','31959','31960'); +f('31961','31962','31963','31964'); +f('31965','31966','31967','31968'); +f('31969','31970','31971','31972'); +f('31973','31974','31975','31976'); +f('31977','31978','31979','31980'); +f('31981','31982','31983','31984'); +f('31985','31986','31987','31988'); +f('31989','31990','31991','31992'); +f('31993','31994','31995','31996'); +f('31997','31998','31999','32000'); +f('32001','32002','32003','32004'); +f('32005','32006','32007','32008'); +f('32009','32010','32011','32012'); +f('32013','32014','32015','32016'); +f('32017','32018','32019','32020'); +f('32021','32022','32023','32024'); +f('32025','32026','32027','32028'); +f('32029','32030','32031','32032'); +f('32033','32034','32035','32036'); +f('32037','32038','32039','32040'); +f('32041','32042','32043','32044'); +f('32045','32046','32047','32048'); +f('32049','32050','32051','32052'); +f('32053','32054','32055','32056'); +f('32057','32058','32059','32060'); +f('32061','32062','32063','32064'); +f('32065','32066','32067','32068'); +f('32069','32070','32071','32072'); +f('32073','32074','32075','32076'); +f('32077','32078','32079','32080'); +f('32081','32082','32083','32084'); +f('32085','32086','32087','32088'); +f('32089','32090','32091','32092'); +f('32093','32094','32095','32096'); +f('32097','32098','32099','32100'); +f('32101','32102','32103','32104'); +f('32105','32106','32107','32108'); +f('32109','32110','32111','32112'); +f('32113','32114','32115','32116'); +f('32117','32118','32119','32120'); +f('32121','32122','32123','32124'); +f('32125','32126','32127','32128'); +f('32129','32130','32131','32132'); +f('32133','32134','32135','32136'); +f('32137','32138','32139','32140'); +f('32141','32142','32143','32144'); +f('32145','32146','32147','32148'); +f('32149','32150','32151','32152'); +f('32153','32154','32155','32156'); +f('32157','32158','32159','32160'); +f('32161','32162','32163','32164'); +f('32165','32166','32167','32168'); +f('32169','32170','32171','32172'); +f('32173','32174','32175','32176'); +f('32177','32178','32179','32180'); +f('32181','32182','32183','32184'); +f('32185','32186','32187','32188'); +f('32189','32190','32191','32192'); +f('32193','32194','32195','32196'); +f('32197','32198','32199','32200'); +f('32201','32202','32203','32204'); +f('32205','32206','32207','32208'); +f('32209','32210','32211','32212'); +f('32213','32214','32215','32216'); +f('32217','32218','32219','32220'); +f('32221','32222','32223','32224'); +f('32225','32226','32227','32228'); +f('32229','32230','32231','32232'); +f('32233','32234','32235','32236'); +f('32237','32238','32239','32240'); +f('32241','32242','32243','32244'); +f('32245','32246','32247','32248'); +f('32249','32250','32251','32252'); +f('32253','32254','32255','32256'); +f('32257','32258','32259','32260'); +f('32261','32262','32263','32264'); +f('32265','32266','32267','32268'); +f('32269','32270','32271','32272'); +f('32273','32274','32275','32276'); +f('32277','32278','32279','32280'); +f('32281','32282','32283','32284'); +f('32285','32286','32287','32288'); +f('32289','32290','32291','32292'); +f('32293','32294','32295','32296'); +f('32297','32298','32299','32300'); +f('32301','32302','32303','32304'); +f('32305','32306','32307','32308'); +f('32309','32310','32311','32312'); +f('32313','32314','32315','32316'); +f('32317','32318','32319','32320'); +f('32321','32322','32323','32324'); +f('32325','32326','32327','32328'); +f('32329','32330','32331','32332'); +f('32333','32334','32335','32336'); +f('32337','32338','32339','32340'); +f('32341','32342','32343','32344'); +f('32345','32346','32347','32348'); +f('32349','32350','32351','32352'); +f('32353','32354','32355','32356'); +f('32357','32358','32359','32360'); +f('32361','32362','32363','32364'); +f('32365','32366','32367','32368'); +f('32369','32370','32371','32372'); +f('32373','32374','32375','32376'); +f('32377','32378','32379','32380'); +f('32381','32382','32383','32384'); +f('32385','32386','32387','32388'); +f('32389','32390','32391','32392'); +f('32393','32394','32395','32396'); +f('32397','32398','32399','32400'); +f('32401','32402','32403','32404'); +f('32405','32406','32407','32408'); +f('32409','32410','32411','32412'); +f('32413','32414','32415','32416'); +f('32417','32418','32419','32420'); +f('32421','32422','32423','32424'); +f('32425','32426','32427','32428'); +f('32429','32430','32431','32432'); +f('32433','32434','32435','32436'); +f('32437','32438','32439','32440'); +f('32441','32442','32443','32444'); +f('32445','32446','32447','32448'); +f('32449','32450','32451','32452'); +f('32453','32454','32455','32456'); +f('32457','32458','32459','32460'); +f('32461','32462','32463','32464'); +f('32465','32466','32467','32468'); +f('32469','32470','32471','32472'); +f('32473','32474','32475','32476'); +f('32477','32478','32479','32480'); +f('32481','32482','32483','32484'); +f('32485','32486','32487','32488'); +f('32489','32490','32491','32492'); +f('32493','32494','32495','32496'); +f('32497','32498','32499','32500'); +f('32501','32502','32503','32504'); +f('32505','32506','32507','32508'); +f('32509','32510','32511','32512'); +f('32513','32514','32515','32516'); +f('32517','32518','32519','32520'); +f('32521','32522','32523','32524'); +f('32525','32526','32527','32528'); +f('32529','32530','32531','32532'); +f('32533','32534','32535','32536'); +f('32537','32538','32539','32540'); +f('32541','32542','32543','32544'); +f('32545','32546','32547','32548'); +f('32549','32550','32551','32552'); +f('32553','32554','32555','32556'); +f('32557','32558','32559','32560'); +f('32561','32562','32563','32564'); +f('32565','32566','32567','32568'); +f('32569','32570','32571','32572'); +f('32573','32574','32575','32576'); +f('32577','32578','32579','32580'); +f('32581','32582','32583','32584'); +f('32585','32586','32587','32588'); +f('32589','32590','32591','32592'); +f('32593','32594','32595','32596'); +f('32597','32598','32599','32600'); +f('32601','32602','32603','32604'); +f('32605','32606','32607','32608'); +f('32609','32610','32611','32612'); +f('32613','32614','32615','32616'); +f('32617','32618','32619','32620'); +f('32621','32622','32623','32624'); +f('32625','32626','32627','32628'); +f('32629','32630','32631','32632'); +f('32633','32634','32635','32636'); +f('32637','32638','32639','32640'); +f('32641','32642','32643','32644'); +f('32645','32646','32647','32648'); +f('32649','32650','32651','32652'); +f('32653','32654','32655','32656'); +f('32657','32658','32659','32660'); +f('32661','32662','32663','32664'); +f('32665','32666','32667','32668'); +f('32669','32670','32671','32672'); +f('32673','32674','32675','32676'); +f('32677','32678','32679','32680'); +f('32681','32682','32683','32684'); +f('32685','32686','32687','32688'); +f('32689','32690','32691','32692'); +f('32693','32694','32695','32696'); +f('32697','32698','32699','32700'); +f('32701','32702','32703','32704'); +f('32705','32706','32707','32708'); +f('32709','32710','32711','32712'); +f('32713','32714','32715','32716'); +f('32717','32718','32719','32720'); +f('32721','32722','32723','32724'); +f('32725','32726','32727','32728'); +f('32729','32730','32731','32732'); +f('32733','32734','32735','32736'); +f('32737','32738','32739','32740'); +f('32741','32742','32743','32744'); +f('32745','32746','32747','32748'); +f('32749','32750','32751','32752'); +f('32753','32754','32755','32756'); +f('32757','32758','32759','32760'); +f('32761','32762','32763','32764'); +f('32765','32766','32767','32768'); +f('32769','32770','32771','32772'); +f('32773','32774','32775','32776'); +f('32777','32778','32779','32780'); +f('32781','32782','32783','32784'); +f('32785','32786','32787','32788'); +f('32789','32790','32791','32792'); +f('32793','32794','32795','32796'); +f('32797','32798','32799','32800'); +f('32801','32802','32803','32804'); +f('32805','32806','32807','32808'); +f('32809','32810','32811','32812'); +f('32813','32814','32815','32816'); +f('32817','32818','32819','32820'); +f('32821','32822','32823','32824'); +f('32825','32826','32827','32828'); +f('32829','32830','32831','32832'); +f('32833','32834','32835','32836'); +f('32837','32838','32839','32840'); +f('32841','32842','32843','32844'); +f('32845','32846','32847','32848'); +f('32849','32850','32851','32852'); +f('32853','32854','32855','32856'); +f('32857','32858','32859','32860'); +f('32861','32862','32863','32864'); +f('32865','32866','32867','32868'); +f('32869','32870','32871','32872'); +f('32873','32874','32875','32876'); +f('32877','32878','32879','32880'); +f('32881','32882','32883','32884'); +f('32885','32886','32887','32888'); +f('32889','32890','32891','32892'); +f('32893','32894','32895','32896'); +f('32897','32898','32899','32900'); +f('32901','32902','32903','32904'); +f('32905','32906','32907','32908'); +f('32909','32910','32911','32912'); +f('32913','32914','32915','32916'); +f('32917','32918','32919','32920'); +f('32921','32922','32923','32924'); +f('32925','32926','32927','32928'); +f('32929','32930','32931','32932'); +f('32933','32934','32935','32936'); +f('32937','32938','32939','32940'); +f('32941','32942','32943','32944'); +f('32945','32946','32947','32948'); +f('32949','32950','32951','32952'); +f('32953','32954','32955','32956'); +f('32957','32958','32959','32960'); +f('32961','32962','32963','32964'); +f('32965','32966','32967','32968'); +f('32969','32970','32971','32972'); +f('32973','32974','32975','32976'); +f('32977','32978','32979','32980'); +f('32981','32982','32983','32984'); +f('32985','32986','32987','32988'); +f('32989','32990','32991','32992'); +f('32993','32994','32995','32996'); +f('32997','32998','32999','33000'); +f('33001','33002','33003','33004'); +f('33005','33006','33007','33008'); +f('33009','33010','33011','33012'); +f('33013','33014','33015','33016'); +f('33017','33018','33019','33020'); +f('33021','33022','33023','33024'); +f('33025','33026','33027','33028'); +f('33029','33030','33031','33032'); +f('33033','33034','33035','33036'); +f('33037','33038','33039','33040'); +f('33041','33042','33043','33044'); +f('33045','33046','33047','33048'); +f('33049','33050','33051','33052'); +f('33053','33054','33055','33056'); +f('33057','33058','33059','33060'); +f('33061','33062','33063','33064'); +f('33065','33066','33067','33068'); +f('33069','33070','33071','33072'); +f('33073','33074','33075','33076'); +f('33077','33078','33079','33080'); +f('33081','33082','33083','33084'); +f('33085','33086','33087','33088'); +f('33089','33090','33091','33092'); +f('33093','33094','33095','33096'); +f('33097','33098','33099','33100'); +f('33101','33102','33103','33104'); +f('33105','33106','33107','33108'); +f('33109','33110','33111','33112'); +f('33113','33114','33115','33116'); +f('33117','33118','33119','33120'); +f('33121','33122','33123','33124'); +f('33125','33126','33127','33128'); +f('33129','33130','33131','33132'); +f('33133','33134','33135','33136'); +f('33137','33138','33139','33140'); +f('33141','33142','33143','33144'); +f('33145','33146','33147','33148'); +f('33149','33150','33151','33152'); +f('33153','33154','33155','33156'); +f('33157','33158','33159','33160'); +f('33161','33162','33163','33164'); +f('33165','33166','33167','33168'); +f('33169','33170','33171','33172'); +f('33173','33174','33175','33176'); +f('33177','33178','33179','33180'); +f('33181','33182','33183','33184'); +f('33185','33186','33187','33188'); +f('33189','33190','33191','33192'); +f('33193','33194','33195','33196'); +f('33197','33198','33199','33200'); +f('33201','33202','33203','33204'); +f('33205','33206','33207','33208'); +f('33209','33210','33211','33212'); +f('33213','33214','33215','33216'); +f('33217','33218','33219','33220'); +f('33221','33222','33223','33224'); +f('33225','33226','33227','33228'); +f('33229','33230','33231','33232'); +f('33233','33234','33235','33236'); +f('33237','33238','33239','33240'); +f('33241','33242','33243','33244'); +f('33245','33246','33247','33248'); +f('33249','33250','33251','33252'); +f('33253','33254','33255','33256'); +f('33257','33258','33259','33260'); +f('33261','33262','33263','33264'); +f('33265','33266','33267','33268'); +f('33269','33270','33271','33272'); +f('33273','33274','33275','33276'); +f('33277','33278','33279','33280'); +f('33281','33282','33283','33284'); +f('33285','33286','33287','33288'); +f('33289','33290','33291','33292'); +f('33293','33294','33295','33296'); +f('33297','33298','33299','33300'); +f('33301','33302','33303','33304'); +f('33305','33306','33307','33308'); +f('33309','33310','33311','33312'); +f('33313','33314','33315','33316'); +f('33317','33318','33319','33320'); +f('33321','33322','33323','33324'); +f('33325','33326','33327','33328'); +f('33329','33330','33331','33332'); +f('33333','33334','33335','33336'); +f('33337','33338','33339','33340'); +f('33341','33342','33343','33344'); +f('33345','33346','33347','33348'); +f('33349','33350','33351','33352'); +f('33353','33354','33355','33356'); +f('33357','33358','33359','33360'); +f('33361','33362','33363','33364'); +f('33365','33366','33367','33368'); +f('33369','33370','33371','33372'); +f('33373','33374','33375','33376'); +f('33377','33378','33379','33380'); +f('33381','33382','33383','33384'); +f('33385','33386','33387','33388'); +f('33389','33390','33391','33392'); +f('33393','33394','33395','33396'); +f('33397','33398','33399','33400'); +f('33401','33402','33403','33404'); +f('33405','33406','33407','33408'); +f('33409','33410','33411','33412'); +f('33413','33414','33415','33416'); +f('33417','33418','33419','33420'); +f('33421','33422','33423','33424'); +f('33425','33426','33427','33428'); +f('33429','33430','33431','33432'); +f('33433','33434','33435','33436'); +f('33437','33438','33439','33440'); +f('33441','33442','33443','33444'); +f('33445','33446','33447','33448'); +f('33449','33450','33451','33452'); +f('33453','33454','33455','33456'); +f('33457','33458','33459','33460'); +f('33461','33462','33463','33464'); +f('33465','33466','33467','33468'); +f('33469','33470','33471','33472'); +f('33473','33474','33475','33476'); +f('33477','33478','33479','33480'); +f('33481','33482','33483','33484'); +f('33485','33486','33487','33488'); +f('33489','33490','33491','33492'); +f('33493','33494','33495','33496'); +f('33497','33498','33499','33500'); +f('33501','33502','33503','33504'); +f('33505','33506','33507','33508'); +f('33509','33510','33511','33512'); +f('33513','33514','33515','33516'); +f('33517','33518','33519','33520'); +f('33521','33522','33523','33524'); +f('33525','33526','33527','33528'); +f('33529','33530','33531','33532'); +f('33533','33534','33535','33536'); +f('33537','33538','33539','33540'); +f('33541','33542','33543','33544'); +f('33545','33546','33547','33548'); +f('33549','33550','33551','33552'); +f('33553','33554','33555','33556'); +f('33557','33558','33559','33560'); +f('33561','33562','33563','33564'); +f('33565','33566','33567','33568'); +f('33569','33570','33571','33572'); +f('33573','33574','33575','33576'); +f('33577','33578','33579','33580'); +f('33581','33582','33583','33584'); +f('33585','33586','33587','33588'); +f('33589','33590','33591','33592'); +f('33593','33594','33595','33596'); +f('33597','33598','33599','33600'); +f('33601','33602','33603','33604'); +f('33605','33606','33607','33608'); +f('33609','33610','33611','33612'); +f('33613','33614','33615','33616'); +f('33617','33618','33619','33620'); +f('33621','33622','33623','33624'); +f('33625','33626','33627','33628'); +f('33629','33630','33631','33632'); +f('33633','33634','33635','33636'); +f('33637','33638','33639','33640'); +f('33641','33642','33643','33644'); +f('33645','33646','33647','33648'); +f('33649','33650','33651','33652'); +f('33653','33654','33655','33656'); +f('33657','33658','33659','33660'); +f('33661','33662','33663','33664'); +f('33665','33666','33667','33668'); +f('33669','33670','33671','33672'); +f('33673','33674','33675','33676'); +f('33677','33678','33679','33680'); +f('33681','33682','33683','33684'); +f('33685','33686','33687','33688'); +f('33689','33690','33691','33692'); +f('33693','33694','33695','33696'); +f('33697','33698','33699','33700'); +f('33701','33702','33703','33704'); +f('33705','33706','33707','33708'); +f('33709','33710','33711','33712'); +f('33713','33714','33715','33716'); +f('33717','33718','33719','33720'); +f('33721','33722','33723','33724'); +f('33725','33726','33727','33728'); +f('33729','33730','33731','33732'); +f('33733','33734','33735','33736'); +f('33737','33738','33739','33740'); +f('33741','33742','33743','33744'); +f('33745','33746','33747','33748'); +f('33749','33750','33751','33752'); +f('33753','33754','33755','33756'); +f('33757','33758','33759','33760'); +f('33761','33762','33763','33764'); +f('33765','33766','33767','33768'); +f('33769','33770','33771','33772'); +f('33773','33774','33775','33776'); +f('33777','33778','33779','33780'); +f('33781','33782','33783','33784'); +f('33785','33786','33787','33788'); +f('33789','33790','33791','33792'); +f('33793','33794','33795','33796'); +f('33797','33798','33799','33800'); +f('33801','33802','33803','33804'); +f('33805','33806','33807','33808'); +f('33809','33810','33811','33812'); +f('33813','33814','33815','33816'); +f('33817','33818','33819','33820'); +f('33821','33822','33823','33824'); +f('33825','33826','33827','33828'); +f('33829','33830','33831','33832'); +f('33833','33834','33835','33836'); +f('33837','33838','33839','33840'); +f('33841','33842','33843','33844'); +f('33845','33846','33847','33848'); +f('33849','33850','33851','33852'); +f('33853','33854','33855','33856'); +f('33857','33858','33859','33860'); +f('33861','33862','33863','33864'); +f('33865','33866','33867','33868'); +f('33869','33870','33871','33872'); +f('33873','33874','33875','33876'); +f('33877','33878','33879','33880'); +f('33881','33882','33883','33884'); +f('33885','33886','33887','33888'); +f('33889','33890','33891','33892'); +f('33893','33894','33895','33896'); +f('33897','33898','33899','33900'); +f('33901','33902','33903','33904'); +f('33905','33906','33907','33908'); +f('33909','33910','33911','33912'); +f('33913','33914','33915','33916'); +f('33917','33918','33919','33920'); +f('33921','33922','33923','33924'); +f('33925','33926','33927','33928'); +f('33929','33930','33931','33932'); +f('33933','33934','33935','33936'); +f('33937','33938','33939','33940'); +f('33941','33942','33943','33944'); +f('33945','33946','33947','33948'); +f('33949','33950','33951','33952'); +f('33953','33954','33955','33956'); +f('33957','33958','33959','33960'); +f('33961','33962','33963','33964'); +f('33965','33966','33967','33968'); +f('33969','33970','33971','33972'); +f('33973','33974','33975','33976'); +f('33977','33978','33979','33980'); +f('33981','33982','33983','33984'); +f('33985','33986','33987','33988'); +f('33989','33990','33991','33992'); +f('33993','33994','33995','33996'); +f('33997','33998','33999','34000'); +f('34001','34002','34003','34004'); +f('34005','34006','34007','34008'); +f('34009','34010','34011','34012'); +f('34013','34014','34015','34016'); +f('34017','34018','34019','34020'); +f('34021','34022','34023','34024'); +f('34025','34026','34027','34028'); +f('34029','34030','34031','34032'); +f('34033','34034','34035','34036'); +f('34037','34038','34039','34040'); +f('34041','34042','34043','34044'); +f('34045','34046','34047','34048'); +f('34049','34050','34051','34052'); +f('34053','34054','34055','34056'); +f('34057','34058','34059','34060'); +f('34061','34062','34063','34064'); +f('34065','34066','34067','34068'); +f('34069','34070','34071','34072'); +f('34073','34074','34075','34076'); +f('34077','34078','34079','34080'); +f('34081','34082','34083','34084'); +f('34085','34086','34087','34088'); +f('34089','34090','34091','34092'); +f('34093','34094','34095','34096'); +f('34097','34098','34099','34100'); +f('34101','34102','34103','34104'); +f('34105','34106','34107','34108'); +f('34109','34110','34111','34112'); +f('34113','34114','34115','34116'); +f('34117','34118','34119','34120'); +f('34121','34122','34123','34124'); +f('34125','34126','34127','34128'); +f('34129','34130','34131','34132'); +f('34133','34134','34135','34136'); +f('34137','34138','34139','34140'); +f('34141','34142','34143','34144'); +f('34145','34146','34147','34148'); +f('34149','34150','34151','34152'); +f('34153','34154','34155','34156'); +f('34157','34158','34159','34160'); +f('34161','34162','34163','34164'); +f('34165','34166','34167','34168'); +f('34169','34170','34171','34172'); +f('34173','34174','34175','34176'); +f('34177','34178','34179','34180'); +f('34181','34182','34183','34184'); +f('34185','34186','34187','34188'); +f('34189','34190','34191','34192'); +f('34193','34194','34195','34196'); +f('34197','34198','34199','34200'); +f('34201','34202','34203','34204'); +f('34205','34206','34207','34208'); +f('34209','34210','34211','34212'); +f('34213','34214','34215','34216'); +f('34217','34218','34219','34220'); +f('34221','34222','34223','34224'); +f('34225','34226','34227','34228'); +f('34229','34230','34231','34232'); +f('34233','34234','34235','34236'); +f('34237','34238','34239','34240'); +f('34241','34242','34243','34244'); +f('34245','34246','34247','34248'); +f('34249','34250','34251','34252'); +f('34253','34254','34255','34256'); +f('34257','34258','34259','34260'); +f('34261','34262','34263','34264'); +f('34265','34266','34267','34268'); +f('34269','34270','34271','34272'); +f('34273','34274','34275','34276'); +f('34277','34278','34279','34280'); +f('34281','34282','34283','34284'); +f('34285','34286','34287','34288'); +f('34289','34290','34291','34292'); +f('34293','34294','34295','34296'); +f('34297','34298','34299','34300'); +f('34301','34302','34303','34304'); +f('34305','34306','34307','34308'); +f('34309','34310','34311','34312'); +f('34313','34314','34315','34316'); +f('34317','34318','34319','34320'); +f('34321','34322','34323','34324'); +f('34325','34326','34327','34328'); +f('34329','34330','34331','34332'); +f('34333','34334','34335','34336'); +f('34337','34338','34339','34340'); +f('34341','34342','34343','34344'); +f('34345','34346','34347','34348'); +f('34349','34350','34351','34352'); +f('34353','34354','34355','34356'); +f('34357','34358','34359','34360'); +f('34361','34362','34363','34364'); +f('34365','34366','34367','34368'); +f('34369','34370','34371','34372'); +f('34373','34374','34375','34376'); +f('34377','34378','34379','34380'); +f('34381','34382','34383','34384'); +f('34385','34386','34387','34388'); +f('34389','34390','34391','34392'); +f('34393','34394','34395','34396'); +f('34397','34398','34399','34400'); +f('34401','34402','34403','34404'); +f('34405','34406','34407','34408'); +f('34409','34410','34411','34412'); +f('34413','34414','34415','34416'); +f('34417','34418','34419','34420'); +f('34421','34422','34423','34424'); +f('34425','34426','34427','34428'); +f('34429','34430','34431','34432'); +f('34433','34434','34435','34436'); +f('34437','34438','34439','34440'); +f('34441','34442','34443','34444'); +f('34445','34446','34447','34448'); +f('34449','34450','34451','34452'); +f('34453','34454','34455','34456'); +f('34457','34458','34459','34460'); +f('34461','34462','34463','34464'); +f('34465','34466','34467','34468'); +f('34469','34470','34471','34472'); +f('34473','34474','34475','34476'); +f('34477','34478','34479','34480'); +f('34481','34482','34483','34484'); +f('34485','34486','34487','34488'); +f('34489','34490','34491','34492'); +f('34493','34494','34495','34496'); +f('34497','34498','34499','34500'); +f('34501','34502','34503','34504'); +f('34505','34506','34507','34508'); +f('34509','34510','34511','34512'); +f('34513','34514','34515','34516'); +f('34517','34518','34519','34520'); +f('34521','34522','34523','34524'); +f('34525','34526','34527','34528'); +f('34529','34530','34531','34532'); +f('34533','34534','34535','34536'); +f('34537','34538','34539','34540'); +f('34541','34542','34543','34544'); +f('34545','34546','34547','34548'); +f('34549','34550','34551','34552'); +f('34553','34554','34555','34556'); +f('34557','34558','34559','34560'); +f('34561','34562','34563','34564'); +f('34565','34566','34567','34568'); +f('34569','34570','34571','34572'); +f('34573','34574','34575','34576'); +f('34577','34578','34579','34580'); +f('34581','34582','34583','34584'); +f('34585','34586','34587','34588'); +f('34589','34590','34591','34592'); +f('34593','34594','34595','34596'); +f('34597','34598','34599','34600'); +f('34601','34602','34603','34604'); +f('34605','34606','34607','34608'); +f('34609','34610','34611','34612'); +f('34613','34614','34615','34616'); +f('34617','34618','34619','34620'); +f('34621','34622','34623','34624'); +f('34625','34626','34627','34628'); +f('34629','34630','34631','34632'); +f('34633','34634','34635','34636'); +f('34637','34638','34639','34640'); +f('34641','34642','34643','34644'); +f('34645','34646','34647','34648'); +f('34649','34650','34651','34652'); +f('34653','34654','34655','34656'); +f('34657','34658','34659','34660'); +f('34661','34662','34663','34664'); +f('34665','34666','34667','34668'); +f('34669','34670','34671','34672'); +f('34673','34674','34675','34676'); +f('34677','34678','34679','34680'); +f('34681','34682','34683','34684'); +f('34685','34686','34687','34688'); +f('34689','34690','34691','34692'); +f('34693','34694','34695','34696'); +f('34697','34698','34699','34700'); +f('34701','34702','34703','34704'); +f('34705','34706','34707','34708'); +f('34709','34710','34711','34712'); +f('34713','34714','34715','34716'); +f('34717','34718','34719','34720'); +f('34721','34722','34723','34724'); +f('34725','34726','34727','34728'); +f('34729','34730','34731','34732'); +f('34733','34734','34735','34736'); +f('34737','34738','34739','34740'); +f('34741','34742','34743','34744'); +f('34745','34746','34747','34748'); +f('34749','34750','34751','34752'); +f('34753','34754','34755','34756'); +f('34757','34758','34759','34760'); +f('34761','34762','34763','34764'); +f('34765','34766','34767','34768'); +f('34769','34770','34771','34772'); +f('34773','34774','34775','34776'); +f('34777','34778','34779','34780'); +f('34781','34782','34783','34784'); +f('34785','34786','34787','34788'); +f('34789','34790','34791','34792'); +f('34793','34794','34795','34796'); +f('34797','34798','34799','34800'); +f('34801','34802','34803','34804'); +f('34805','34806','34807','34808'); +f('34809','34810','34811','34812'); +f('34813','34814','34815','34816'); +f('34817','34818','34819','34820'); +f('34821','34822','34823','34824'); +f('34825','34826','34827','34828'); +f('34829','34830','34831','34832'); +f('34833','34834','34835','34836'); +f('34837','34838','34839','34840'); +f('34841','34842','34843','34844'); +f('34845','34846','34847','34848'); +f('34849','34850','34851','34852'); +f('34853','34854','34855','34856'); +f('34857','34858','34859','34860'); +f('34861','34862','34863','34864'); +f('34865','34866','34867','34868'); +f('34869','34870','34871','34872'); +f('34873','34874','34875','34876'); +f('34877','34878','34879','34880'); +f('34881','34882','34883','34884'); +f('34885','34886','34887','34888'); +f('34889','34890','34891','34892'); +f('34893','34894','34895','34896'); +f('34897','34898','34899','34900'); +f('34901','34902','34903','34904'); +f('34905','34906','34907','34908'); +f('34909','34910','34911','34912'); +f('34913','34914','34915','34916'); +f('34917','34918','34919','34920'); +f('34921','34922','34923','34924'); +f('34925','34926','34927','34928'); +f('34929','34930','34931','34932'); +f('34933','34934','34935','34936'); +f('34937','34938','34939','34940'); +f('34941','34942','34943','34944'); +f('34945','34946','34947','34948'); +f('34949','34950','34951','34952'); +f('34953','34954','34955','34956'); +f('34957','34958','34959','34960'); +f('34961','34962','34963','34964'); +f('34965','34966','34967','34968'); +f('34969','34970','34971','34972'); +f('34973','34974','34975','34976'); +f('34977','34978','34979','34980'); +f('34981','34982','34983','34984'); +f('34985','34986','34987','34988'); +f('34989','34990','34991','34992'); +f('34993','34994','34995','34996'); +f('34997','34998','34999','35000'); +f('35001','35002','35003','35004'); +f('35005','35006','35007','35008'); +f('35009','35010','35011','35012'); +f('35013','35014','35015','35016'); +f('35017','35018','35019','35020'); +f('35021','35022','35023','35024'); +f('35025','35026','35027','35028'); +f('35029','35030','35031','35032'); +f('35033','35034','35035','35036'); +f('35037','35038','35039','35040'); +f('35041','35042','35043','35044'); +f('35045','35046','35047','35048'); +f('35049','35050','35051','35052'); +f('35053','35054','35055','35056'); +f('35057','35058','35059','35060'); +f('35061','35062','35063','35064'); +f('35065','35066','35067','35068'); +f('35069','35070','35071','35072'); +f('35073','35074','35075','35076'); +f('35077','35078','35079','35080'); +f('35081','35082','35083','35084'); +f('35085','35086','35087','35088'); +f('35089','35090','35091','35092'); +f('35093','35094','35095','35096'); +f('35097','35098','35099','35100'); +f('35101','35102','35103','35104'); +f('35105','35106','35107','35108'); +f('35109','35110','35111','35112'); +f('35113','35114','35115','35116'); +f('35117','35118','35119','35120'); +f('35121','35122','35123','35124'); +f('35125','35126','35127','35128'); +f('35129','35130','35131','35132'); +f('35133','35134','35135','35136'); +f('35137','35138','35139','35140'); +f('35141','35142','35143','35144'); +f('35145','35146','35147','35148'); +f('35149','35150','35151','35152'); +f('35153','35154','35155','35156'); +f('35157','35158','35159','35160'); +f('35161','35162','35163','35164'); +f('35165','35166','35167','35168'); +f('35169','35170','35171','35172'); +f('35173','35174','35175','35176'); +f('35177','35178','35179','35180'); +f('35181','35182','35183','35184'); +f('35185','35186','35187','35188'); +f('35189','35190','35191','35192'); +f('35193','35194','35195','35196'); +f('35197','35198','35199','35200'); +f('35201','35202','35203','35204'); +f('35205','35206','35207','35208'); +f('35209','35210','35211','35212'); +f('35213','35214','35215','35216'); +f('35217','35218','35219','35220'); +f('35221','35222','35223','35224'); +f('35225','35226','35227','35228'); +f('35229','35230','35231','35232'); +f('35233','35234','35235','35236'); +f('35237','35238','35239','35240'); +f('35241','35242','35243','35244'); +f('35245','35246','35247','35248'); +f('35249','35250','35251','35252'); +f('35253','35254','35255','35256'); +f('35257','35258','35259','35260'); +f('35261','35262','35263','35264'); +f('35265','35266','35267','35268'); +f('35269','35270','35271','35272'); +f('35273','35274','35275','35276'); +f('35277','35278','35279','35280'); +f('35281','35282','35283','35284'); +f('35285','35286','35287','35288'); +f('35289','35290','35291','35292'); +f('35293','35294','35295','35296'); +f('35297','35298','35299','35300'); +f('35301','35302','35303','35304'); +f('35305','35306','35307','35308'); +f('35309','35310','35311','35312'); +f('35313','35314','35315','35316'); +f('35317','35318','35319','35320'); +f('35321','35322','35323','35324'); +f('35325','35326','35327','35328'); +f('35329','35330','35331','35332'); +f('35333','35334','35335','35336'); +f('35337','35338','35339','35340'); +f('35341','35342','35343','35344'); +f('35345','35346','35347','35348'); +f('35349','35350','35351','35352'); +f('35353','35354','35355','35356'); +f('35357','35358','35359','35360'); +f('35361','35362','35363','35364'); +f('35365','35366','35367','35368'); +f('35369','35370','35371','35372'); +f('35373','35374','35375','35376'); +f('35377','35378','35379','35380'); +f('35381','35382','35383','35384'); +f('35385','35386','35387','35388'); +f('35389','35390','35391','35392'); +f('35393','35394','35395','35396'); +f('35397','35398','35399','35400'); +f('35401','35402','35403','35404'); +f('35405','35406','35407','35408'); +f('35409','35410','35411','35412'); +f('35413','35414','35415','35416'); +f('35417','35418','35419','35420'); +f('35421','35422','35423','35424'); +f('35425','35426','35427','35428'); +f('35429','35430','35431','35432'); +f('35433','35434','35435','35436'); +f('35437','35438','35439','35440'); +f('35441','35442','35443','35444'); +f('35445','35446','35447','35448'); +f('35449','35450','35451','35452'); +f('35453','35454','35455','35456'); +f('35457','35458','35459','35460'); +f('35461','35462','35463','35464'); +f('35465','35466','35467','35468'); +f('35469','35470','35471','35472'); +f('35473','35474','35475','35476'); +f('35477','35478','35479','35480'); +f('35481','35482','35483','35484'); +f('35485','35486','35487','35488'); +f('35489','35490','35491','35492'); +f('35493','35494','35495','35496'); +f('35497','35498','35499','35500'); +f('35501','35502','35503','35504'); +f('35505','35506','35507','35508'); +f('35509','35510','35511','35512'); +f('35513','35514','35515','35516'); +f('35517','35518','35519','35520'); +f('35521','35522','35523','35524'); +f('35525','35526','35527','35528'); +f('35529','35530','35531','35532'); +f('35533','35534','35535','35536'); +f('35537','35538','35539','35540'); +f('35541','35542','35543','35544'); +f('35545','35546','35547','35548'); +f('35549','35550','35551','35552'); +f('35553','35554','35555','35556'); +f('35557','35558','35559','35560'); +f('35561','35562','35563','35564'); +f('35565','35566','35567','35568'); +f('35569','35570','35571','35572'); +f('35573','35574','35575','35576'); +f('35577','35578','35579','35580'); +f('35581','35582','35583','35584'); +f('35585','35586','35587','35588'); +f('35589','35590','35591','35592'); +f('35593','35594','35595','35596'); +f('35597','35598','35599','35600'); +f('35601','35602','35603','35604'); +f('35605','35606','35607','35608'); +f('35609','35610','35611','35612'); +f('35613','35614','35615','35616'); +f('35617','35618','35619','35620'); +f('35621','35622','35623','35624'); +f('35625','35626','35627','35628'); +f('35629','35630','35631','35632'); +f('35633','35634','35635','35636'); +f('35637','35638','35639','35640'); +f('35641','35642','35643','35644'); +f('35645','35646','35647','35648'); +f('35649','35650','35651','35652'); +f('35653','35654','35655','35656'); +f('35657','35658','35659','35660'); +f('35661','35662','35663','35664'); +f('35665','35666','35667','35668'); +f('35669','35670','35671','35672'); +f('35673','35674','35675','35676'); +f('35677','35678','35679','35680'); +f('35681','35682','35683','35684'); +f('35685','35686','35687','35688'); +f('35689','35690','35691','35692'); +f('35693','35694','35695','35696'); +f('35697','35698','35699','35700'); +f('35701','35702','35703','35704'); +f('35705','35706','35707','35708'); +f('35709','35710','35711','35712'); +f('35713','35714','35715','35716'); +f('35717','35718','35719','35720'); +f('35721','35722','35723','35724'); +f('35725','35726','35727','35728'); +f('35729','35730','35731','35732'); +f('35733','35734','35735','35736'); +f('35737','35738','35739','35740'); +f('35741','35742','35743','35744'); +f('35745','35746','35747','35748'); +f('35749','35750','35751','35752'); +f('35753','35754','35755','35756'); +f('35757','35758','35759','35760'); +f('35761','35762','35763','35764'); +f('35765','35766','35767','35768'); +f('35769','35770','35771','35772'); +f('35773','35774','35775','35776'); +f('35777','35778','35779','35780'); +f('35781','35782','35783','35784'); +f('35785','35786','35787','35788'); +f('35789','35790','35791','35792'); +f('35793','35794','35795','35796'); +f('35797','35798','35799','35800'); +f('35801','35802','35803','35804'); +f('35805','35806','35807','35808'); +f('35809','35810','35811','35812'); +f('35813','35814','35815','35816'); +f('35817','35818','35819','35820'); +f('35821','35822','35823','35824'); +f('35825','35826','35827','35828'); +f('35829','35830','35831','35832'); +f('35833','35834','35835','35836'); +f('35837','35838','35839','35840'); +f('35841','35842','35843','35844'); +f('35845','35846','35847','35848'); +f('35849','35850','35851','35852'); +f('35853','35854','35855','35856'); +f('35857','35858','35859','35860'); +f('35861','35862','35863','35864'); +f('35865','35866','35867','35868'); +f('35869','35870','35871','35872'); +f('35873','35874','35875','35876'); +f('35877','35878','35879','35880'); +f('35881','35882','35883','35884'); +f('35885','35886','35887','35888'); +f('35889','35890','35891','35892'); +f('35893','35894','35895','35896'); +f('35897','35898','35899','35900'); +f('35901','35902','35903','35904'); +f('35905','35906','35907','35908'); +f('35909','35910','35911','35912'); +f('35913','35914','35915','35916'); +f('35917','35918','35919','35920'); +f('35921','35922','35923','35924'); +f('35925','35926','35927','35928'); +f('35929','35930','35931','35932'); +f('35933','35934','35935','35936'); +f('35937','35938','35939','35940'); +f('35941','35942','35943','35944'); +f('35945','35946','35947','35948'); +f('35949','35950','35951','35952'); +f('35953','35954','35955','35956'); +f('35957','35958','35959','35960'); +f('35961','35962','35963','35964'); +f('35965','35966','35967','35968'); +f('35969','35970','35971','35972'); +f('35973','35974','35975','35976'); +f('35977','35978','35979','35980'); +f('35981','35982','35983','35984'); +f('35985','35986','35987','35988'); +f('35989','35990','35991','35992'); +f('35993','35994','35995','35996'); +f('35997','35998','35999','36000'); +f('36001','36002','36003','36004'); +f('36005','36006','36007','36008'); +f('36009','36010','36011','36012'); +f('36013','36014','36015','36016'); +f('36017','36018','36019','36020'); +f('36021','36022','36023','36024'); +f('36025','36026','36027','36028'); +f('36029','36030','36031','36032'); +f('36033','36034','36035','36036'); +f('36037','36038','36039','36040'); +f('36041','36042','36043','36044'); +f('36045','36046','36047','36048'); +f('36049','36050','36051','36052'); +f('36053','36054','36055','36056'); +f('36057','36058','36059','36060'); +f('36061','36062','36063','36064'); +f('36065','36066','36067','36068'); +f('36069','36070','36071','36072'); +f('36073','36074','36075','36076'); +f('36077','36078','36079','36080'); +f('36081','36082','36083','36084'); +f('36085','36086','36087','36088'); +f('36089','36090','36091','36092'); +f('36093','36094','36095','36096'); +f('36097','36098','36099','36100'); +f('36101','36102','36103','36104'); +f('36105','36106','36107','36108'); +f('36109','36110','36111','36112'); +f('36113','36114','36115','36116'); +f('36117','36118','36119','36120'); +f('36121','36122','36123','36124'); +f('36125','36126','36127','36128'); +f('36129','36130','36131','36132'); +f('36133','36134','36135','36136'); +f('36137','36138','36139','36140'); +f('36141','36142','36143','36144'); +f('36145','36146','36147','36148'); +f('36149','36150','36151','36152'); +f('36153','36154','36155','36156'); +f('36157','36158','36159','36160'); +f('36161','36162','36163','36164'); +f('36165','36166','36167','36168'); +f('36169','36170','36171','36172'); +f('36173','36174','36175','36176'); +f('36177','36178','36179','36180'); +f('36181','36182','36183','36184'); +f('36185','36186','36187','36188'); +f('36189','36190','36191','36192'); +f('36193','36194','36195','36196'); +f('36197','36198','36199','36200'); +f('36201','36202','36203','36204'); +f('36205','36206','36207','36208'); +f('36209','36210','36211','36212'); +f('36213','36214','36215','36216'); +f('36217','36218','36219','36220'); +f('36221','36222','36223','36224'); +f('36225','36226','36227','36228'); +f('36229','36230','36231','36232'); +f('36233','36234','36235','36236'); +f('36237','36238','36239','36240'); +f('36241','36242','36243','36244'); +f('36245','36246','36247','36248'); +f('36249','36250','36251','36252'); +f('36253','36254','36255','36256'); +f('36257','36258','36259','36260'); +f('36261','36262','36263','36264'); +f('36265','36266','36267','36268'); +f('36269','36270','36271','36272'); +f('36273','36274','36275','36276'); +f('36277','36278','36279','36280'); +f('36281','36282','36283','36284'); +f('36285','36286','36287','36288'); +f('36289','36290','36291','36292'); +f('36293','36294','36295','36296'); +f('36297','36298','36299','36300'); +f('36301','36302','36303','36304'); +f('36305','36306','36307','36308'); +f('36309','36310','36311','36312'); +f('36313','36314','36315','36316'); +f('36317','36318','36319','36320'); +f('36321','36322','36323','36324'); +f('36325','36326','36327','36328'); +f('36329','36330','36331','36332'); +f('36333','36334','36335','36336'); +f('36337','36338','36339','36340'); +f('36341','36342','36343','36344'); +f('36345','36346','36347','36348'); +f('36349','36350','36351','36352'); +f('36353','36354','36355','36356'); +f('36357','36358','36359','36360'); +f('36361','36362','36363','36364'); +f('36365','36366','36367','36368'); +f('36369','36370','36371','36372'); +f('36373','36374','36375','36376'); +f('36377','36378','36379','36380'); +f('36381','36382','36383','36384'); +f('36385','36386','36387','36388'); +f('36389','36390','36391','36392'); +f('36393','36394','36395','36396'); +f('36397','36398','36399','36400'); +f('36401','36402','36403','36404'); +f('36405','36406','36407','36408'); +f('36409','36410','36411','36412'); +f('36413','36414','36415','36416'); +f('36417','36418','36419','36420'); +f('36421','36422','36423','36424'); +f('36425','36426','36427','36428'); +f('36429','36430','36431','36432'); +f('36433','36434','36435','36436'); +f('36437','36438','36439','36440'); +f('36441','36442','36443','36444'); +f('36445','36446','36447','36448'); +f('36449','36450','36451','36452'); +f('36453','36454','36455','36456'); +f('36457','36458','36459','36460'); +f('36461','36462','36463','36464'); +f('36465','36466','36467','36468'); +f('36469','36470','36471','36472'); +f('36473','36474','36475','36476'); +f('36477','36478','36479','36480'); +f('36481','36482','36483','36484'); +f('36485','36486','36487','36488'); +f('36489','36490','36491','36492'); +f('36493','36494','36495','36496'); +f('36497','36498','36499','36500'); +f('36501','36502','36503','36504'); +f('36505','36506','36507','36508'); +f('36509','36510','36511','36512'); +f('36513','36514','36515','36516'); +f('36517','36518','36519','36520'); +f('36521','36522','36523','36524'); +f('36525','36526','36527','36528'); +f('36529','36530','36531','36532'); +f('36533','36534','36535','36536'); +f('36537','36538','36539','36540'); +f('36541','36542','36543','36544'); +f('36545','36546','36547','36548'); +f('36549','36550','36551','36552'); +f('36553','36554','36555','36556'); +f('36557','36558','36559','36560'); +f('36561','36562','36563','36564'); +f('36565','36566','36567','36568'); +f('36569','36570','36571','36572'); +f('36573','36574','36575','36576'); +f('36577','36578','36579','36580'); +f('36581','36582','36583','36584'); +f('36585','36586','36587','36588'); +f('36589','36590','36591','36592'); +f('36593','36594','36595','36596'); +f('36597','36598','36599','36600'); +f('36601','36602','36603','36604'); +f('36605','36606','36607','36608'); +f('36609','36610','36611','36612'); +f('36613','36614','36615','36616'); +f('36617','36618','36619','36620'); +f('36621','36622','36623','36624'); +f('36625','36626','36627','36628'); +f('36629','36630','36631','36632'); +f('36633','36634','36635','36636'); +f('36637','36638','36639','36640'); +f('36641','36642','36643','36644'); +f('36645','36646','36647','36648'); +f('36649','36650','36651','36652'); +f('36653','36654','36655','36656'); +f('36657','36658','36659','36660'); +f('36661','36662','36663','36664'); +f('36665','36666','36667','36668'); +f('36669','36670','36671','36672'); +f('36673','36674','36675','36676'); +f('36677','36678','36679','36680'); +f('36681','36682','36683','36684'); +f('36685','36686','36687','36688'); +f('36689','36690','36691','36692'); +f('36693','36694','36695','36696'); +f('36697','36698','36699','36700'); +f('36701','36702','36703','36704'); +f('36705','36706','36707','36708'); +f('36709','36710','36711','36712'); +f('36713','36714','36715','36716'); +f('36717','36718','36719','36720'); +f('36721','36722','36723','36724'); +f('36725','36726','36727','36728'); +f('36729','36730','36731','36732'); +f('36733','36734','36735','36736'); +f('36737','36738','36739','36740'); +f('36741','36742','36743','36744'); +f('36745','36746','36747','36748'); +f('36749','36750','36751','36752'); +f('36753','36754','36755','36756'); +f('36757','36758','36759','36760'); +f('36761','36762','36763','36764'); +f('36765','36766','36767','36768'); +f('36769','36770','36771','36772'); +f('36773','36774','36775','36776'); +f('36777','36778','36779','36780'); +f('36781','36782','36783','36784'); +f('36785','36786','36787','36788'); +f('36789','36790','36791','36792'); +f('36793','36794','36795','36796'); +f('36797','36798','36799','36800'); +f('36801','36802','36803','36804'); +f('36805','36806','36807','36808'); +f('36809','36810','36811','36812'); +f('36813','36814','36815','36816'); +f('36817','36818','36819','36820'); +f('36821','36822','36823','36824'); +f('36825','36826','36827','36828'); +f('36829','36830','36831','36832'); +f('36833','36834','36835','36836'); +f('36837','36838','36839','36840'); +f('36841','36842','36843','36844'); +f('36845','36846','36847','36848'); +f('36849','36850','36851','36852'); +f('36853','36854','36855','36856'); +f('36857','36858','36859','36860'); +f('36861','36862','36863','36864'); +f('36865','36866','36867','36868'); +f('36869','36870','36871','36872'); +f('36873','36874','36875','36876'); +f('36877','36878','36879','36880'); +f('36881','36882','36883','36884'); +f('36885','36886','36887','36888'); +f('36889','36890','36891','36892'); +f('36893','36894','36895','36896'); +f('36897','36898','36899','36900'); +f('36901','36902','36903','36904'); +f('36905','36906','36907','36908'); +f('36909','36910','36911','36912'); +f('36913','36914','36915','36916'); +f('36917','36918','36919','36920'); +f('36921','36922','36923','36924'); +f('36925','36926','36927','36928'); +f('36929','36930','36931','36932'); +f('36933','36934','36935','36936'); +f('36937','36938','36939','36940'); +f('36941','36942','36943','36944'); +f('36945','36946','36947','36948'); +f('36949','36950','36951','36952'); +f('36953','36954','36955','36956'); +f('36957','36958','36959','36960'); +f('36961','36962','36963','36964'); +f('36965','36966','36967','36968'); +f('36969','36970','36971','36972'); +f('36973','36974','36975','36976'); +f('36977','36978','36979','36980'); +f('36981','36982','36983','36984'); +f('36985','36986','36987','36988'); +f('36989','36990','36991','36992'); +f('36993','36994','36995','36996'); +f('36997','36998','36999','37000'); +f('37001','37002','37003','37004'); +f('37005','37006','37007','37008'); +f('37009','37010','37011','37012'); +f('37013','37014','37015','37016'); +f('37017','37018','37019','37020'); +f('37021','37022','37023','37024'); +f('37025','37026','37027','37028'); +f('37029','37030','37031','37032'); +f('37033','37034','37035','37036'); +f('37037','37038','37039','37040'); +f('37041','37042','37043','37044'); +f('37045','37046','37047','37048'); +f('37049','37050','37051','37052'); +f('37053','37054','37055','37056'); +f('37057','37058','37059','37060'); +f('37061','37062','37063','37064'); +f('37065','37066','37067','37068'); +f('37069','37070','37071','37072'); +f('37073','37074','37075','37076'); +f('37077','37078','37079','37080'); +f('37081','37082','37083','37084'); +f('37085','37086','37087','37088'); +f('37089','37090','37091','37092'); +f('37093','37094','37095','37096'); +f('37097','37098','37099','37100'); +f('37101','37102','37103','37104'); +f('37105','37106','37107','37108'); +f('37109','37110','37111','37112'); +f('37113','37114','37115','37116'); +f('37117','37118','37119','37120'); +f('37121','37122','37123','37124'); +f('37125','37126','37127','37128'); +f('37129','37130','37131','37132'); +f('37133','37134','37135','37136'); +f('37137','37138','37139','37140'); +f('37141','37142','37143','37144'); +f('37145','37146','37147','37148'); +f('37149','37150','37151','37152'); +f('37153','37154','37155','37156'); +f('37157','37158','37159','37160'); +f('37161','37162','37163','37164'); +f('37165','37166','37167','37168'); +f('37169','37170','37171','37172'); +f('37173','37174','37175','37176'); +f('37177','37178','37179','37180'); +f('37181','37182','37183','37184'); +f('37185','37186','37187','37188'); +f('37189','37190','37191','37192'); +f('37193','37194','37195','37196'); +f('37197','37198','37199','37200'); +f('37201','37202','37203','37204'); +f('37205','37206','37207','37208'); +f('37209','37210','37211','37212'); +f('37213','37214','37215','37216'); +f('37217','37218','37219','37220'); +f('37221','37222','37223','37224'); +f('37225','37226','37227','37228'); +f('37229','37230','37231','37232'); +f('37233','37234','37235','37236'); +f('37237','37238','37239','37240'); +f('37241','37242','37243','37244'); +f('37245','37246','37247','37248'); +f('37249','37250','37251','37252'); +f('37253','37254','37255','37256'); +f('37257','37258','37259','37260'); +f('37261','37262','37263','37264'); +f('37265','37266','37267','37268'); +f('37269','37270','37271','37272'); +f('37273','37274','37275','37276'); +f('37277','37278','37279','37280'); +f('37281','37282','37283','37284'); +f('37285','37286','37287','37288'); +f('37289','37290','37291','37292'); +f('37293','37294','37295','37296'); +f('37297','37298','37299','37300'); +f('37301','37302','37303','37304'); +f('37305','37306','37307','37308'); +f('37309','37310','37311','37312'); +f('37313','37314','37315','37316'); +f('37317','37318','37319','37320'); +f('37321','37322','37323','37324'); +f('37325','37326','37327','37328'); +f('37329','37330','37331','37332'); +f('37333','37334','37335','37336'); +f('37337','37338','37339','37340'); +f('37341','37342','37343','37344'); +f('37345','37346','37347','37348'); +f('37349','37350','37351','37352'); +f('37353','37354','37355','37356'); +f('37357','37358','37359','37360'); +f('37361','37362','37363','37364'); +f('37365','37366','37367','37368'); +f('37369','37370','37371','37372'); +f('37373','37374','37375','37376'); +f('37377','37378','37379','37380'); +f('37381','37382','37383','37384'); +f('37385','37386','37387','37388'); +f('37389','37390','37391','37392'); +f('37393','37394','37395','37396'); +f('37397','37398','37399','37400'); +f('37401','37402','37403','37404'); +f('37405','37406','37407','37408'); +f('37409','37410','37411','37412'); +f('37413','37414','37415','37416'); +f('37417','37418','37419','37420'); +f('37421','37422','37423','37424'); +f('37425','37426','37427','37428'); +f('37429','37430','37431','37432'); +f('37433','37434','37435','37436'); +f('37437','37438','37439','37440'); +f('37441','37442','37443','37444'); +f('37445','37446','37447','37448'); +f('37449','37450','37451','37452'); +f('37453','37454','37455','37456'); +f('37457','37458','37459','37460'); +f('37461','37462','37463','37464'); +f('37465','37466','37467','37468'); +f('37469','37470','37471','37472'); +f('37473','37474','37475','37476'); +f('37477','37478','37479','37480'); +f('37481','37482','37483','37484'); +f('37485','37486','37487','37488'); +f('37489','37490','37491','37492'); +f('37493','37494','37495','37496'); +f('37497','37498','37499','37500'); +f('37501','37502','37503','37504'); +f('37505','37506','37507','37508'); +f('37509','37510','37511','37512'); +f('37513','37514','37515','37516'); +f('37517','37518','37519','37520'); +f('37521','37522','37523','37524'); +f('37525','37526','37527','37528'); +f('37529','37530','37531','37532'); +f('37533','37534','37535','37536'); +f('37537','37538','37539','37540'); +f('37541','37542','37543','37544'); +f('37545','37546','37547','37548'); +f('37549','37550','37551','37552'); +f('37553','37554','37555','37556'); +f('37557','37558','37559','37560'); +f('37561','37562','37563','37564'); +f('37565','37566','37567','37568'); +f('37569','37570','37571','37572'); +f('37573','37574','37575','37576'); +f('37577','37578','37579','37580'); +f('37581','37582','37583','37584'); +f('37585','37586','37587','37588'); +f('37589','37590','37591','37592'); +f('37593','37594','37595','37596'); +f('37597','37598','37599','37600'); +f('37601','37602','37603','37604'); +f('37605','37606','37607','37608'); +f('37609','37610','37611','37612'); +f('37613','37614','37615','37616'); +f('37617','37618','37619','37620'); +f('37621','37622','37623','37624'); +f('37625','37626','37627','37628'); +f('37629','37630','37631','37632'); +f('37633','37634','37635','37636'); +f('37637','37638','37639','37640'); +f('37641','37642','37643','37644'); +f('37645','37646','37647','37648'); +f('37649','37650','37651','37652'); +f('37653','37654','37655','37656'); +f('37657','37658','37659','37660'); +f('37661','37662','37663','37664'); +f('37665','37666','37667','37668'); +f('37669','37670','37671','37672'); +f('37673','37674','37675','37676'); +f('37677','37678','37679','37680'); +f('37681','37682','37683','37684'); +f('37685','37686','37687','37688'); +f('37689','37690','37691','37692'); +f('37693','37694','37695','37696'); +f('37697','37698','37699','37700'); +f('37701','37702','37703','37704'); +f('37705','37706','37707','37708'); +f('37709','37710','37711','37712'); +f('37713','37714','37715','37716'); +f('37717','37718','37719','37720'); +f('37721','37722','37723','37724'); +f('37725','37726','37727','37728'); +f('37729','37730','37731','37732'); +f('37733','37734','37735','37736'); +f('37737','37738','37739','37740'); +f('37741','37742','37743','37744'); +f('37745','37746','37747','37748'); +f('37749','37750','37751','37752'); +f('37753','37754','37755','37756'); +f('37757','37758','37759','37760'); +f('37761','37762','37763','37764'); +f('37765','37766','37767','37768'); +f('37769','37770','37771','37772'); +f('37773','37774','37775','37776'); +f('37777','37778','37779','37780'); +f('37781','37782','37783','37784'); +f('37785','37786','37787','37788'); +f('37789','37790','37791','37792'); +f('37793','37794','37795','37796'); +f('37797','37798','37799','37800'); +f('37801','37802','37803','37804'); +f('37805','37806','37807','37808'); +f('37809','37810','37811','37812'); +f('37813','37814','37815','37816'); +f('37817','37818','37819','37820'); +f('37821','37822','37823','37824'); +f('37825','37826','37827','37828'); +f('37829','37830','37831','37832'); +f('37833','37834','37835','37836'); +f('37837','37838','37839','37840'); +f('37841','37842','37843','37844'); +f('37845','37846','37847','37848'); +f('37849','37850','37851','37852'); +f('37853','37854','37855','37856'); +f('37857','37858','37859','37860'); +f('37861','37862','37863','37864'); +f('37865','37866','37867','37868'); +f('37869','37870','37871','37872'); +f('37873','37874','37875','37876'); +f('37877','37878','37879','37880'); +f('37881','37882','37883','37884'); +f('37885','37886','37887','37888'); +f('37889','37890','37891','37892'); +f('37893','37894','37895','37896'); +f('37897','37898','37899','37900'); +f('37901','37902','37903','37904'); +f('37905','37906','37907','37908'); +f('37909','37910','37911','37912'); +f('37913','37914','37915','37916'); +f('37917','37918','37919','37920'); +f('37921','37922','37923','37924'); +f('37925','37926','37927','37928'); +f('37929','37930','37931','37932'); +f('37933','37934','37935','37936'); +f('37937','37938','37939','37940'); +f('37941','37942','37943','37944'); +f('37945','37946','37947','37948'); +f('37949','37950','37951','37952'); +f('37953','37954','37955','37956'); +f('37957','37958','37959','37960'); +f('37961','37962','37963','37964'); +f('37965','37966','37967','37968'); +f('37969','37970','37971','37972'); +f('37973','37974','37975','37976'); +f('37977','37978','37979','37980'); +f('37981','37982','37983','37984'); +f('37985','37986','37987','37988'); +f('37989','37990','37991','37992'); +f('37993','37994','37995','37996'); +f('37997','37998','37999','38000'); +f('38001','38002','38003','38004'); +f('38005','38006','38007','38008'); +f('38009','38010','38011','38012'); +f('38013','38014','38015','38016'); +f('38017','38018','38019','38020'); +f('38021','38022','38023','38024'); +f('38025','38026','38027','38028'); +f('38029','38030','38031','38032'); +f('38033','38034','38035','38036'); +f('38037','38038','38039','38040'); +f('38041','38042','38043','38044'); +f('38045','38046','38047','38048'); +f('38049','38050','38051','38052'); +f('38053','38054','38055','38056'); +f('38057','38058','38059','38060'); +f('38061','38062','38063','38064'); +f('38065','38066','38067','38068'); +f('38069','38070','38071','38072'); +f('38073','38074','38075','38076'); +f('38077','38078','38079','38080'); +f('38081','38082','38083','38084'); +f('38085','38086','38087','38088'); +f('38089','38090','38091','38092'); +f('38093','38094','38095','38096'); +f('38097','38098','38099','38100'); +f('38101','38102','38103','38104'); +f('38105','38106','38107','38108'); +f('38109','38110','38111','38112'); +f('38113','38114','38115','38116'); +f('38117','38118','38119','38120'); +f('38121','38122','38123','38124'); +f('38125','38126','38127','38128'); +f('38129','38130','38131','38132'); +f('38133','38134','38135','38136'); +f('38137','38138','38139','38140'); +f('38141','38142','38143','38144'); +f('38145','38146','38147','38148'); +f('38149','38150','38151','38152'); +f('38153','38154','38155','38156'); +f('38157','38158','38159','38160'); +f('38161','38162','38163','38164'); +f('38165','38166','38167','38168'); +f('38169','38170','38171','38172'); +f('38173','38174','38175','38176'); +f('38177','38178','38179','38180'); +f('38181','38182','38183','38184'); +f('38185','38186','38187','38188'); +f('38189','38190','38191','38192'); +f('38193','38194','38195','38196'); +f('38197','38198','38199','38200'); +f('38201','38202','38203','38204'); +f('38205','38206','38207','38208'); +f('38209','38210','38211','38212'); +f('38213','38214','38215','38216'); +f('38217','38218','38219','38220'); +f('38221','38222','38223','38224'); +f('38225','38226','38227','38228'); +f('38229','38230','38231','38232'); +f('38233','38234','38235','38236'); +f('38237','38238','38239','38240'); +f('38241','38242','38243','38244'); +f('38245','38246','38247','38248'); +f('38249','38250','38251','38252'); +f('38253','38254','38255','38256'); +f('38257','38258','38259','38260'); +f('38261','38262','38263','38264'); +f('38265','38266','38267','38268'); +f('38269','38270','38271','38272'); +f('38273','38274','38275','38276'); +f('38277','38278','38279','38280'); +f('38281','38282','38283','38284'); +f('38285','38286','38287','38288'); +f('38289','38290','38291','38292'); +f('38293','38294','38295','38296'); +f('38297','38298','38299','38300'); +f('38301','38302','38303','38304'); +f('38305','38306','38307','38308'); +f('38309','38310','38311','38312'); +f('38313','38314','38315','38316'); +f('38317','38318','38319','38320'); +f('38321','38322','38323','38324'); +f('38325','38326','38327','38328'); +f('38329','38330','38331','38332'); +f('38333','38334','38335','38336'); +f('38337','38338','38339','38340'); +f('38341','38342','38343','38344'); +f('38345','38346','38347','38348'); +f('38349','38350','38351','38352'); +f('38353','38354','38355','38356'); +f('38357','38358','38359','38360'); +f('38361','38362','38363','38364'); +f('38365','38366','38367','38368'); +f('38369','38370','38371','38372'); +f('38373','38374','38375','38376'); +f('38377','38378','38379','38380'); +f('38381','38382','38383','38384'); +f('38385','38386','38387','38388'); +f('38389','38390','38391','38392'); +f('38393','38394','38395','38396'); +f('38397','38398','38399','38400'); +f('38401','38402','38403','38404'); +f('38405','38406','38407','38408'); +f('38409','38410','38411','38412'); +f('38413','38414','38415','38416'); +f('38417','38418','38419','38420'); +f('38421','38422','38423','38424'); +f('38425','38426','38427','38428'); +f('38429','38430','38431','38432'); +f('38433','38434','38435','38436'); +f('38437','38438','38439','38440'); +f('38441','38442','38443','38444'); +f('38445','38446','38447','38448'); +f('38449','38450','38451','38452'); +f('38453','38454','38455','38456'); +f('38457','38458','38459','38460'); +f('38461','38462','38463','38464'); +f('38465','38466','38467','38468'); +f('38469','38470','38471','38472'); +f('38473','38474','38475','38476'); +f('38477','38478','38479','38480'); +f('38481','38482','38483','38484'); +f('38485','38486','38487','38488'); +f('38489','38490','38491','38492'); +f('38493','38494','38495','38496'); +f('38497','38498','38499','38500'); +f('38501','38502','38503','38504'); +f('38505','38506','38507','38508'); +f('38509','38510','38511','38512'); +f('38513','38514','38515','38516'); +f('38517','38518','38519','38520'); +f('38521','38522','38523','38524'); +f('38525','38526','38527','38528'); +f('38529','38530','38531','38532'); +f('38533','38534','38535','38536'); +f('38537','38538','38539','38540'); +f('38541','38542','38543','38544'); +f('38545','38546','38547','38548'); +f('38549','38550','38551','38552'); +f('38553','38554','38555','38556'); +f('38557','38558','38559','38560'); +f('38561','38562','38563','38564'); +f('38565','38566','38567','38568'); +f('38569','38570','38571','38572'); +f('38573','38574','38575','38576'); +f('38577','38578','38579','38580'); +f('38581','38582','38583','38584'); +f('38585','38586','38587','38588'); +f('38589','38590','38591','38592'); +f('38593','38594','38595','38596'); +f('38597','38598','38599','38600'); +f('38601','38602','38603','38604'); +f('38605','38606','38607','38608'); +f('38609','38610','38611','38612'); +f('38613','38614','38615','38616'); +f('38617','38618','38619','38620'); +f('38621','38622','38623','38624'); +f('38625','38626','38627','38628'); +f('38629','38630','38631','38632'); +f('38633','38634','38635','38636'); +f('38637','38638','38639','38640'); +f('38641','38642','38643','38644'); +f('38645','38646','38647','38648'); +f('38649','38650','38651','38652'); +f('38653','38654','38655','38656'); +f('38657','38658','38659','38660'); +f('38661','38662','38663','38664'); +f('38665','38666','38667','38668'); +f('38669','38670','38671','38672'); +f('38673','38674','38675','38676'); +f('38677','38678','38679','38680'); +f('38681','38682','38683','38684'); +f('38685','38686','38687','38688'); +f('38689','38690','38691','38692'); +f('38693','38694','38695','38696'); +f('38697','38698','38699','38700'); +f('38701','38702','38703','38704'); +f('38705','38706','38707','38708'); +f('38709','38710','38711','38712'); +f('38713','38714','38715','38716'); +f('38717','38718','38719','38720'); +f('38721','38722','38723','38724'); +f('38725','38726','38727','38728'); +f('38729','38730','38731','38732'); +f('38733','38734','38735','38736'); +f('38737','38738','38739','38740'); +f('38741','38742','38743','38744'); +f('38745','38746','38747','38748'); +f('38749','38750','38751','38752'); +f('38753','38754','38755','38756'); +f('38757','38758','38759','38760'); +f('38761','38762','38763','38764'); +f('38765','38766','38767','38768'); +f('38769','38770','38771','38772'); +f('38773','38774','38775','38776'); +f('38777','38778','38779','38780'); +f('38781','38782','38783','38784'); +f('38785','38786','38787','38788'); +f('38789','38790','38791','38792'); +f('38793','38794','38795','38796'); +f('38797','38798','38799','38800'); +f('38801','38802','38803','38804'); +f('38805','38806','38807','38808'); +f('38809','38810','38811','38812'); +f('38813','38814','38815','38816'); +f('38817','38818','38819','38820'); +f('38821','38822','38823','38824'); +f('38825','38826','38827','38828'); +f('38829','38830','38831','38832'); +f('38833','38834','38835','38836'); +f('38837','38838','38839','38840'); +f('38841','38842','38843','38844'); +f('38845','38846','38847','38848'); +f('38849','38850','38851','38852'); +f('38853','38854','38855','38856'); +f('38857','38858','38859','38860'); +f('38861','38862','38863','38864'); +f('38865','38866','38867','38868'); +f('38869','38870','38871','38872'); +f('38873','38874','38875','38876'); +f('38877','38878','38879','38880'); +f('38881','38882','38883','38884'); +f('38885','38886','38887','38888'); +f('38889','38890','38891','38892'); +f('38893','38894','38895','38896'); +f('38897','38898','38899','38900'); +f('38901','38902','38903','38904'); +f('38905','38906','38907','38908'); +f('38909','38910','38911','38912'); +f('38913','38914','38915','38916'); +f('38917','38918','38919','38920'); +f('38921','38922','38923','38924'); +f('38925','38926','38927','38928'); +f('38929','38930','38931','38932'); +f('38933','38934','38935','38936'); +f('38937','38938','38939','38940'); +f('38941','38942','38943','38944'); +f('38945','38946','38947','38948'); +f('38949','38950','38951','38952'); +f('38953','38954','38955','38956'); +f('38957','38958','38959','38960'); +f('38961','38962','38963','38964'); +f('38965','38966','38967','38968'); +f('38969','38970','38971','38972'); +f('38973','38974','38975','38976'); +f('38977','38978','38979','38980'); +f('38981','38982','38983','38984'); +f('38985','38986','38987','38988'); +f('38989','38990','38991','38992'); +f('38993','38994','38995','38996'); +f('38997','38998','38999','39000'); +f('39001','39002','39003','39004'); +f('39005','39006','39007','39008'); +f('39009','39010','39011','39012'); +f('39013','39014','39015','39016'); +f('39017','39018','39019','39020'); +f('39021','39022','39023','39024'); +f('39025','39026','39027','39028'); +f('39029','39030','39031','39032'); +f('39033','39034','39035','39036'); +f('39037','39038','39039','39040'); +f('39041','39042','39043','39044'); +f('39045','39046','39047','39048'); +f('39049','39050','39051','39052'); +f('39053','39054','39055','39056'); +f('39057','39058','39059','39060'); +f('39061','39062','39063','39064'); +f('39065','39066','39067','39068'); +f('39069','39070','39071','39072'); +f('39073','39074','39075','39076'); +f('39077','39078','39079','39080'); +f('39081','39082','39083','39084'); +f('39085','39086','39087','39088'); +f('39089','39090','39091','39092'); +f('39093','39094','39095','39096'); +f('39097','39098','39099','39100'); +f('39101','39102','39103','39104'); +f('39105','39106','39107','39108'); +f('39109','39110','39111','39112'); +f('39113','39114','39115','39116'); +f('39117','39118','39119','39120'); +f('39121','39122','39123','39124'); +f('39125','39126','39127','39128'); +f('39129','39130','39131','39132'); +f('39133','39134','39135','39136'); +f('39137','39138','39139','39140'); +f('39141','39142','39143','39144'); +f('39145','39146','39147','39148'); +f('39149','39150','39151','39152'); +f('39153','39154','39155','39156'); +f('39157','39158','39159','39160'); +f('39161','39162','39163','39164'); +f('39165','39166','39167','39168'); +f('39169','39170','39171','39172'); +f('39173','39174','39175','39176'); +f('39177','39178','39179','39180'); +f('39181','39182','39183','39184'); +f('39185','39186','39187','39188'); +f('39189','39190','39191','39192'); +f('39193','39194','39195','39196'); +f('39197','39198','39199','39200'); +f('39201','39202','39203','39204'); +f('39205','39206','39207','39208'); +f('39209','39210','39211','39212'); +f('39213','39214','39215','39216'); +f('39217','39218','39219','39220'); +f('39221','39222','39223','39224'); +f('39225','39226','39227','39228'); +f('39229','39230','39231','39232'); +f('39233','39234','39235','39236'); +f('39237','39238','39239','39240'); +f('39241','39242','39243','39244'); +f('39245','39246','39247','39248'); +f('39249','39250','39251','39252'); +f('39253','39254','39255','39256'); +f('39257','39258','39259','39260'); +f('39261','39262','39263','39264'); +f('39265','39266','39267','39268'); +f('39269','39270','39271','39272'); +f('39273','39274','39275','39276'); +f('39277','39278','39279','39280'); +f('39281','39282','39283','39284'); +f('39285','39286','39287','39288'); +f('39289','39290','39291','39292'); +f('39293','39294','39295','39296'); +f('39297','39298','39299','39300'); +f('39301','39302','39303','39304'); +f('39305','39306','39307','39308'); +f('39309','39310','39311','39312'); +f('39313','39314','39315','39316'); +f('39317','39318','39319','39320'); +f('39321','39322','39323','39324'); +f('39325','39326','39327','39328'); +f('39329','39330','39331','39332'); +f('39333','39334','39335','39336'); +f('39337','39338','39339','39340'); +f('39341','39342','39343','39344'); +f('39345','39346','39347','39348'); +f('39349','39350','39351','39352'); +f('39353','39354','39355','39356'); +f('39357','39358','39359','39360'); +f('39361','39362','39363','39364'); +f('39365','39366','39367','39368'); +f('39369','39370','39371','39372'); +f('39373','39374','39375','39376'); +f('39377','39378','39379','39380'); +f('39381','39382','39383','39384'); +f('39385','39386','39387','39388'); +f('39389','39390','39391','39392'); +f('39393','39394','39395','39396'); +f('39397','39398','39399','39400'); +f('39401','39402','39403','39404'); +f('39405','39406','39407','39408'); +f('39409','39410','39411','39412'); +f('39413','39414','39415','39416'); +f('39417','39418','39419','39420'); +f('39421','39422','39423','39424'); +f('39425','39426','39427','39428'); +f('39429','39430','39431','39432'); +f('39433','39434','39435','39436'); +f('39437','39438','39439','39440'); +f('39441','39442','39443','39444'); +f('39445','39446','39447','39448'); +f('39449','39450','39451','39452'); +f('39453','39454','39455','39456'); +f('39457','39458','39459','39460'); +f('39461','39462','39463','39464'); +f('39465','39466','39467','39468'); +f('39469','39470','39471','39472'); +f('39473','39474','39475','39476'); +f('39477','39478','39479','39480'); +f('39481','39482','39483','39484'); +f('39485','39486','39487','39488'); +f('39489','39490','39491','39492'); +f('39493','39494','39495','39496'); +f('39497','39498','39499','39500'); +f('39501','39502','39503','39504'); +f('39505','39506','39507','39508'); +f('39509','39510','39511','39512'); +f('39513','39514','39515','39516'); +f('39517','39518','39519','39520'); +f('39521','39522','39523','39524'); +f('39525','39526','39527','39528'); +f('39529','39530','39531','39532'); +f('39533','39534','39535','39536'); +f('39537','39538','39539','39540'); +f('39541','39542','39543','39544'); +f('39545','39546','39547','39548'); +f('39549','39550','39551','39552'); +f('39553','39554','39555','39556'); +f('39557','39558','39559','39560'); +f('39561','39562','39563','39564'); +f('39565','39566','39567','39568'); +f('39569','39570','39571','39572'); +f('39573','39574','39575','39576'); +f('39577','39578','39579','39580'); +f('39581','39582','39583','39584'); +f('39585','39586','39587','39588'); +f('39589','39590','39591','39592'); +f('39593','39594','39595','39596'); +f('39597','39598','39599','39600'); +f('39601','39602','39603','39604'); +f('39605','39606','39607','39608'); +f('39609','39610','39611','39612'); +f('39613','39614','39615','39616'); +f('39617','39618','39619','39620'); +f('39621','39622','39623','39624'); +f('39625','39626','39627','39628'); +f('39629','39630','39631','39632'); +f('39633','39634','39635','39636'); +f('39637','39638','39639','39640'); +f('39641','39642','39643','39644'); +f('39645','39646','39647','39648'); +f('39649','39650','39651','39652'); +f('39653','39654','39655','39656'); +f('39657','39658','39659','39660'); +f('39661','39662','39663','39664'); +f('39665','39666','39667','39668'); +f('39669','39670','39671','39672'); +f('39673','39674','39675','39676'); +f('39677','39678','39679','39680'); +f('39681','39682','39683','39684'); +f('39685','39686','39687','39688'); +f('39689','39690','39691','39692'); +f('39693','39694','39695','39696'); +f('39697','39698','39699','39700'); +f('39701','39702','39703','39704'); +f('39705','39706','39707','39708'); +f('39709','39710','39711','39712'); +f('39713','39714','39715','39716'); +f('39717','39718','39719','39720'); +f('39721','39722','39723','39724'); +f('39725','39726','39727','39728'); +f('39729','39730','39731','39732'); +f('39733','39734','39735','39736'); +f('39737','39738','39739','39740'); +f('39741','39742','39743','39744'); +f('39745','39746','39747','39748'); +f('39749','39750','39751','39752'); +f('39753','39754','39755','39756'); +f('39757','39758','39759','39760'); +f('39761','39762','39763','39764'); +f('39765','39766','39767','39768'); +f('39769','39770','39771','39772'); +f('39773','39774','39775','39776'); +f('39777','39778','39779','39780'); +f('39781','39782','39783','39784'); +f('39785','39786','39787','39788'); +f('39789','39790','39791','39792'); +f('39793','39794','39795','39796'); +f('39797','39798','39799','39800'); +f('39801','39802','39803','39804'); +f('39805','39806','39807','39808'); +f('39809','39810','39811','39812'); +f('39813','39814','39815','39816'); +f('39817','39818','39819','39820'); +f('39821','39822','39823','39824'); +f('39825','39826','39827','39828'); +f('39829','39830','39831','39832'); +f('39833','39834','39835','39836'); +f('39837','39838','39839','39840'); +f('39841','39842','39843','39844'); +f('39845','39846','39847','39848'); +f('39849','39850','39851','39852'); +f('39853','39854','39855','39856'); +f('39857','39858','39859','39860'); +f('39861','39862','39863','39864'); +f('39865','39866','39867','39868'); +f('39869','39870','39871','39872'); +f('39873','39874','39875','39876'); +f('39877','39878','39879','39880'); +f('39881','39882','39883','39884'); +f('39885','39886','39887','39888'); +f('39889','39890','39891','39892'); +f('39893','39894','39895','39896'); +f('39897','39898','39899','39900'); +f('39901','39902','39903','39904'); +f('39905','39906','39907','39908'); +f('39909','39910','39911','39912'); +f('39913','39914','39915','39916'); +f('39917','39918','39919','39920'); +f('39921','39922','39923','39924'); +f('39925','39926','39927','39928'); +f('39929','39930','39931','39932'); +f('39933','39934','39935','39936'); +f('39937','39938','39939','39940'); +f('39941','39942','39943','39944'); +f('39945','39946','39947','39948'); +f('39949','39950','39951','39952'); +f('39953','39954','39955','39956'); +f('39957','39958','39959','39960'); +f('39961','39962','39963','39964'); +f('39965','39966','39967','39968'); +f('39969','39970','39971','39972'); +f('39973','39974','39975','39976'); +f('39977','39978','39979','39980'); +f('39981','39982','39983','39984'); +f('39985','39986','39987','39988'); +f('39989','39990','39991','39992'); +f('39993','39994','39995','39996'); +f('39997','39998','39999','40000'); +f('40001','40002','40003','40004'); +f('40005','40006','40007','40008'); +f('40009','40010','40011','40012'); +f('40013','40014','40015','40016'); +f('40017','40018','40019','40020'); +f('40021','40022','40023','40024'); +f('40025','40026','40027','40028'); +f('40029','40030','40031','40032'); +f('40033','40034','40035','40036'); +f('40037','40038','40039','40040'); +f('40041','40042','40043','40044'); +f('40045','40046','40047','40048'); +f('40049','40050','40051','40052'); +f('40053','40054','40055','40056'); +f('40057','40058','40059','40060'); +f('40061','40062','40063','40064'); +f('40065','40066','40067','40068'); +f('40069','40070','40071','40072'); +f('40073','40074','40075','40076'); +f('40077','40078','40079','40080'); +f('40081','40082','40083','40084'); +f('40085','40086','40087','40088'); +f('40089','40090','40091','40092'); +f('40093','40094','40095','40096'); +f('40097','40098','40099','40100'); +f('40101','40102','40103','40104'); +f('40105','40106','40107','40108'); +f('40109','40110','40111','40112'); +f('40113','40114','40115','40116'); +f('40117','40118','40119','40120'); +f('40121','40122','40123','40124'); +f('40125','40126','40127','40128'); +f('40129','40130','40131','40132'); +f('40133','40134','40135','40136'); +f('40137','40138','40139','40140'); +f('40141','40142','40143','40144'); +f('40145','40146','40147','40148'); +f('40149','40150','40151','40152'); +f('40153','40154','40155','40156'); +f('40157','40158','40159','40160'); +f('40161','40162','40163','40164'); +f('40165','40166','40167','40168'); +f('40169','40170','40171','40172'); +f('40173','40174','40175','40176'); +f('40177','40178','40179','40180'); +f('40181','40182','40183','40184'); +f('40185','40186','40187','40188'); +f('40189','40190','40191','40192'); +f('40193','40194','40195','40196'); +f('40197','40198','40199','40200'); +f('40201','40202','40203','40204'); +f('40205','40206','40207','40208'); +f('40209','40210','40211','40212'); +f('40213','40214','40215','40216'); +f('40217','40218','40219','40220'); +f('40221','40222','40223','40224'); +f('40225','40226','40227','40228'); +f('40229','40230','40231','40232'); +f('40233','40234','40235','40236'); +f('40237','40238','40239','40240'); +f('40241','40242','40243','40244'); +f('40245','40246','40247','40248'); +f('40249','40250','40251','40252'); +f('40253','40254','40255','40256'); +f('40257','40258','40259','40260'); +f('40261','40262','40263','40264'); +f('40265','40266','40267','40268'); +f('40269','40270','40271','40272'); +f('40273','40274','40275','40276'); +f('40277','40278','40279','40280'); +f('40281','40282','40283','40284'); +f('40285','40286','40287','40288'); +f('40289','40290','40291','40292'); +f('40293','40294','40295','40296'); +f('40297','40298','40299','40300'); +f('40301','40302','40303','40304'); +f('40305','40306','40307','40308'); +f('40309','40310','40311','40312'); +f('40313','40314','40315','40316'); +f('40317','40318','40319','40320'); +f('40321','40322','40323','40324'); +f('40325','40326','40327','40328'); +f('40329','40330','40331','40332'); +f('40333','40334','40335','40336'); +f('40337','40338','40339','40340'); +f('40341','40342','40343','40344'); +f('40345','40346','40347','40348'); +f('40349','40350','40351','40352'); +f('40353','40354','40355','40356'); +f('40357','40358','40359','40360'); +f('40361','40362','40363','40364'); +f('40365','40366','40367','40368'); +f('40369','40370','40371','40372'); +f('40373','40374','40375','40376'); +f('40377','40378','40379','40380'); +f('40381','40382','40383','40384'); +f('40385','40386','40387','40388'); +f('40389','40390','40391','40392'); +f('40393','40394','40395','40396'); +f('40397','40398','40399','40400'); +f('40401','40402','40403','40404'); +f('40405','40406','40407','40408'); +f('40409','40410','40411','40412'); +f('40413','40414','40415','40416'); +f('40417','40418','40419','40420'); +f('40421','40422','40423','40424'); +f('40425','40426','40427','40428'); +f('40429','40430','40431','40432'); +f('40433','40434','40435','40436'); +f('40437','40438','40439','40440'); +f('40441','40442','40443','40444'); +f('40445','40446','40447','40448'); +f('40449','40450','40451','40452'); +f('40453','40454','40455','40456'); +f('40457','40458','40459','40460'); +f('40461','40462','40463','40464'); +f('40465','40466','40467','40468'); +f('40469','40470','40471','40472'); +f('40473','40474','40475','40476'); +f('40477','40478','40479','40480'); +f('40481','40482','40483','40484'); +f('40485','40486','40487','40488'); +f('40489','40490','40491','40492'); +f('40493','40494','40495','40496'); +f('40497','40498','40499','40500'); +f('40501','40502','40503','40504'); +f('40505','40506','40507','40508'); +f('40509','40510','40511','40512'); +f('40513','40514','40515','40516'); +f('40517','40518','40519','40520'); +f('40521','40522','40523','40524'); +f('40525','40526','40527','40528'); +f('40529','40530','40531','40532'); +f('40533','40534','40535','40536'); +f('40537','40538','40539','40540'); +f('40541','40542','40543','40544'); +f('40545','40546','40547','40548'); +f('40549','40550','40551','40552'); +f('40553','40554','40555','40556'); +f('40557','40558','40559','40560'); +f('40561','40562','40563','40564'); +f('40565','40566','40567','40568'); +f('40569','40570','40571','40572'); +f('40573','40574','40575','40576'); +f('40577','40578','40579','40580'); +f('40581','40582','40583','40584'); +f('40585','40586','40587','40588'); +f('40589','40590','40591','40592'); +f('40593','40594','40595','40596'); +f('40597','40598','40599','40600'); +f('40601','40602','40603','40604'); +f('40605','40606','40607','40608'); +f('40609','40610','40611','40612'); +f('40613','40614','40615','40616'); +f('40617','40618','40619','40620'); +f('40621','40622','40623','40624'); +f('40625','40626','40627','40628'); +f('40629','40630','40631','40632'); +f('40633','40634','40635','40636'); +f('40637','40638','40639','40640'); +f('40641','40642','40643','40644'); +f('40645','40646','40647','40648'); +f('40649','40650','40651','40652'); +f('40653','40654','40655','40656'); +f('40657','40658','40659','40660'); +f('40661','40662','40663','40664'); +f('40665','40666','40667','40668'); +f('40669','40670','40671','40672'); +f('40673','40674','40675','40676'); +f('40677','40678','40679','40680'); +f('40681','40682','40683','40684'); +f('40685','40686','40687','40688'); +f('40689','40690','40691','40692'); +f('40693','40694','40695','40696'); +f('40697','40698','40699','40700'); +f('40701','40702','40703','40704'); +f('40705','40706','40707','40708'); +f('40709','40710','40711','40712'); +f('40713','40714','40715','40716'); +f('40717','40718','40719','40720'); +f('40721','40722','40723','40724'); +f('40725','40726','40727','40728'); +f('40729','40730','40731','40732'); +f('40733','40734','40735','40736'); +f('40737','40738','40739','40740'); +f('40741','40742','40743','40744'); +f('40745','40746','40747','40748'); +f('40749','40750','40751','40752'); +f('40753','40754','40755','40756'); +f('40757','40758','40759','40760'); +f('40761','40762','40763','40764'); +f('40765','40766','40767','40768'); +f('40769','40770','40771','40772'); +f('40773','40774','40775','40776'); +f('40777','40778','40779','40780'); +f('40781','40782','40783','40784'); +f('40785','40786','40787','40788'); +f('40789','40790','40791','40792'); +f('40793','40794','40795','40796'); +f('40797','40798','40799','40800'); +f('40801','40802','40803','40804'); +f('40805','40806','40807','40808'); +f('40809','40810','40811','40812'); +f('40813','40814','40815','40816'); +f('40817','40818','40819','40820'); +f('40821','40822','40823','40824'); +f('40825','40826','40827','40828'); +f('40829','40830','40831','40832'); +f('40833','40834','40835','40836'); +f('40837','40838','40839','40840'); +f('40841','40842','40843','40844'); +f('40845','40846','40847','40848'); +f('40849','40850','40851','40852'); +f('40853','40854','40855','40856'); +f('40857','40858','40859','40860'); +f('40861','40862','40863','40864'); +f('40865','40866','40867','40868'); +f('40869','40870','40871','40872'); +f('40873','40874','40875','40876'); +f('40877','40878','40879','40880'); +f('40881','40882','40883','40884'); +f('40885','40886','40887','40888'); +f('40889','40890','40891','40892'); +f('40893','40894','40895','40896'); +f('40897','40898','40899','40900'); +f('40901','40902','40903','40904'); +f('40905','40906','40907','40908'); +f('40909','40910','40911','40912'); +f('40913','40914','40915','40916'); +f('40917','40918','40919','40920'); +f('40921','40922','40923','40924'); +f('40925','40926','40927','40928'); +f('40929','40930','40931','40932'); +f('40933','40934','40935','40936'); +f('40937','40938','40939','40940'); +f('40941','40942','40943','40944'); +f('40945','40946','40947','40948'); +f('40949','40950','40951','40952'); +f('40953','40954','40955','40956'); +f('40957','40958','40959','40960'); +f('40961','40962','40963','40964'); +f('40965','40966','40967','40968'); +f('40969','40970','40971','40972'); +f('40973','40974','40975','40976'); +f('40977','40978','40979','40980'); +f('40981','40982','40983','40984'); +f('40985','40986','40987','40988'); +f('40989','40990','40991','40992'); +f('40993','40994','40995','40996'); +f('40997','40998','40999','41000'); +f('41001','41002','41003','41004'); +f('41005','41006','41007','41008'); +f('41009','41010','41011','41012'); +f('41013','41014','41015','41016'); +f('41017','41018','41019','41020'); +f('41021','41022','41023','41024'); +f('41025','41026','41027','41028'); +f('41029','41030','41031','41032'); +f('41033','41034','41035','41036'); +f('41037','41038','41039','41040'); +f('41041','41042','41043','41044'); +f('41045','41046','41047','41048'); +f('41049','41050','41051','41052'); +f('41053','41054','41055','41056'); +f('41057','41058','41059','41060'); +f('41061','41062','41063','41064'); +f('41065','41066','41067','41068'); +f('41069','41070','41071','41072'); +f('41073','41074','41075','41076'); +f('41077','41078','41079','41080'); +f('41081','41082','41083','41084'); +f('41085','41086','41087','41088'); +f('41089','41090','41091','41092'); +f('41093','41094','41095','41096'); +f('41097','41098','41099','41100'); +f('41101','41102','41103','41104'); +f('41105','41106','41107','41108'); +f('41109','41110','41111','41112'); +f('41113','41114','41115','41116'); +f('41117','41118','41119','41120'); +f('41121','41122','41123','41124'); +f('41125','41126','41127','41128'); +f('41129','41130','41131','41132'); +f('41133','41134','41135','41136'); +f('41137','41138','41139','41140'); +f('41141','41142','41143','41144'); +f('41145','41146','41147','41148'); +f('41149','41150','41151','41152'); +f('41153','41154','41155','41156'); +f('41157','41158','41159','41160'); +f('41161','41162','41163','41164'); +f('41165','41166','41167','41168'); +f('41169','41170','41171','41172'); +f('41173','41174','41175','41176'); +f('41177','41178','41179','41180'); +f('41181','41182','41183','41184'); +f('41185','41186','41187','41188'); +f('41189','41190','41191','41192'); +f('41193','41194','41195','41196'); +f('41197','41198','41199','41200'); +f('41201','41202','41203','41204'); +f('41205','41206','41207','41208'); +f('41209','41210','41211','41212'); +f('41213','41214','41215','41216'); +f('41217','41218','41219','41220'); +f('41221','41222','41223','41224'); +f('41225','41226','41227','41228'); +f('41229','41230','41231','41232'); +f('41233','41234','41235','41236'); +f('41237','41238','41239','41240'); +f('41241','41242','41243','41244'); +f('41245','41246','41247','41248'); +f('41249','41250','41251','41252'); +f('41253','41254','41255','41256'); +f('41257','41258','41259','41260'); +f('41261','41262','41263','41264'); +f('41265','41266','41267','41268'); +f('41269','41270','41271','41272'); +f('41273','41274','41275','41276'); +f('41277','41278','41279','41280'); +f('41281','41282','41283','41284'); +f('41285','41286','41287','41288'); +f('41289','41290','41291','41292'); +f('41293','41294','41295','41296'); +f('41297','41298','41299','41300'); +f('41301','41302','41303','41304'); +f('41305','41306','41307','41308'); +f('41309','41310','41311','41312'); +f('41313','41314','41315','41316'); +f('41317','41318','41319','41320'); +f('41321','41322','41323','41324'); +f('41325','41326','41327','41328'); +f('41329','41330','41331','41332'); +f('41333','41334','41335','41336'); +f('41337','41338','41339','41340'); +f('41341','41342','41343','41344'); +f('41345','41346','41347','41348'); +f('41349','41350','41351','41352'); +f('41353','41354','41355','41356'); +f('41357','41358','41359','41360'); +f('41361','41362','41363','41364'); +f('41365','41366','41367','41368'); +f('41369','41370','41371','41372'); +f('41373','41374','41375','41376'); +f('41377','41378','41379','41380'); +f('41381','41382','41383','41384'); +f('41385','41386','41387','41388'); +f('41389','41390','41391','41392'); +f('41393','41394','41395','41396'); +f('41397','41398','41399','41400'); +f('41401','41402','41403','41404'); +f('41405','41406','41407','41408'); +f('41409','41410','41411','41412'); +f('41413','41414','41415','41416'); +f('41417','41418','41419','41420'); +f('41421','41422','41423','41424'); +f('41425','41426','41427','41428'); +f('41429','41430','41431','41432'); +f('41433','41434','41435','41436'); +f('41437','41438','41439','41440'); +f('41441','41442','41443','41444'); +f('41445','41446','41447','41448'); +f('41449','41450','41451','41452'); +f('41453','41454','41455','41456'); +f('41457','41458','41459','41460'); +f('41461','41462','41463','41464'); +f('41465','41466','41467','41468'); +f('41469','41470','41471','41472'); +f('41473','41474','41475','41476'); +f('41477','41478','41479','41480'); +f('41481','41482','41483','41484'); +f('41485','41486','41487','41488'); +f('41489','41490','41491','41492'); +f('41493','41494','41495','41496'); +f('41497','41498','41499','41500'); +f('41501','41502','41503','41504'); +f('41505','41506','41507','41508'); +f('41509','41510','41511','41512'); +f('41513','41514','41515','41516'); +f('41517','41518','41519','41520'); +f('41521','41522','41523','41524'); +f('41525','41526','41527','41528'); +f('41529','41530','41531','41532'); +f('41533','41534','41535','41536'); +f('41537','41538','41539','41540'); +f('41541','41542','41543','41544'); +f('41545','41546','41547','41548'); +f('41549','41550','41551','41552'); +f('41553','41554','41555','41556'); +f('41557','41558','41559','41560'); +f('41561','41562','41563','41564'); +f('41565','41566','41567','41568'); +f('41569','41570','41571','41572'); +f('41573','41574','41575','41576'); +f('41577','41578','41579','41580'); +f('41581','41582','41583','41584'); +f('41585','41586','41587','41588'); +f('41589','41590','41591','41592'); +f('41593','41594','41595','41596'); +f('41597','41598','41599','41600'); +f('41601','41602','41603','41604'); +f('41605','41606','41607','41608'); +f('41609','41610','41611','41612'); +f('41613','41614','41615','41616'); +f('41617','41618','41619','41620'); +f('41621','41622','41623','41624'); +f('41625','41626','41627','41628'); +f('41629','41630','41631','41632'); +f('41633','41634','41635','41636'); +f('41637','41638','41639','41640'); +f('41641','41642','41643','41644'); +f('41645','41646','41647','41648'); +f('41649','41650','41651','41652'); +f('41653','41654','41655','41656'); +f('41657','41658','41659','41660'); +f('41661','41662','41663','41664'); +f('41665','41666','41667','41668'); +f('41669','41670','41671','41672'); +f('41673','41674','41675','41676'); +f('41677','41678','41679','41680'); +f('41681','41682','41683','41684'); +f('41685','41686','41687','41688'); +f('41689','41690','41691','41692'); +f('41693','41694','41695','41696'); +f('41697','41698','41699','41700'); +f('41701','41702','41703','41704'); +f('41705','41706','41707','41708'); +f('41709','41710','41711','41712'); +f('41713','41714','41715','41716'); +f('41717','41718','41719','41720'); +f('41721','41722','41723','41724'); +f('41725','41726','41727','41728'); +f('41729','41730','41731','41732'); +f('41733','41734','41735','41736'); +f('41737','41738','41739','41740'); +f('41741','41742','41743','41744'); +f('41745','41746','41747','41748'); +f('41749','41750','41751','41752'); +f('41753','41754','41755','41756'); +f('41757','41758','41759','41760'); +f('41761','41762','41763','41764'); +f('41765','41766','41767','41768'); +f('41769','41770','41771','41772'); +f('41773','41774','41775','41776'); +f('41777','41778','41779','41780'); +f('41781','41782','41783','41784'); +f('41785','41786','41787','41788'); +f('41789','41790','41791','41792'); +f('41793','41794','41795','41796'); +f('41797','41798','41799','41800'); +f('41801','41802','41803','41804'); +f('41805','41806','41807','41808'); +f('41809','41810','41811','41812'); +f('41813','41814','41815','41816'); +f('41817','41818','41819','41820'); +f('41821','41822','41823','41824'); +f('41825','41826','41827','41828'); +f('41829','41830','41831','41832'); +f('41833','41834','41835','41836'); +f('41837','41838','41839','41840'); +f('41841','41842','41843','41844'); +f('41845','41846','41847','41848'); +f('41849','41850','41851','41852'); +f('41853','41854','41855','41856'); +f('41857','41858','41859','41860'); +f('41861','41862','41863','41864'); +f('41865','41866','41867','41868'); +f('41869','41870','41871','41872'); +f('41873','41874','41875','41876'); +f('41877','41878','41879','41880'); +f('41881','41882','41883','41884'); +f('41885','41886','41887','41888'); +f('41889','41890','41891','41892'); +f('41893','41894','41895','41896'); +f('41897','41898','41899','41900'); +f('41901','41902','41903','41904'); +f('41905','41906','41907','41908'); +f('41909','41910','41911','41912'); +f('41913','41914','41915','41916'); +f('41917','41918','41919','41920'); +f('41921','41922','41923','41924'); +f('41925','41926','41927','41928'); +f('41929','41930','41931','41932'); +f('41933','41934','41935','41936'); +f('41937','41938','41939','41940'); +f('41941','41942','41943','41944'); +f('41945','41946','41947','41948'); +f('41949','41950','41951','41952'); +f('41953','41954','41955','41956'); +f('41957','41958','41959','41960'); +f('41961','41962','41963','41964'); +f('41965','41966','41967','41968'); +f('41969','41970','41971','41972'); +f('41973','41974','41975','41976'); +f('41977','41978','41979','41980'); +f('41981','41982','41983','41984'); +f('41985','41986','41987','41988'); +f('41989','41990','41991','41992'); +f('41993','41994','41995','41996'); +f('41997','41998','41999','42000'); +f('42001','42002','42003','42004'); +f('42005','42006','42007','42008'); +f('42009','42010','42011','42012'); +f('42013','42014','42015','42016'); +f('42017','42018','42019','42020'); +f('42021','42022','42023','42024'); +f('42025','42026','42027','42028'); +f('42029','42030','42031','42032'); +f('42033','42034','42035','42036'); +f('42037','42038','42039','42040'); +f('42041','42042','42043','42044'); +f('42045','42046','42047','42048'); +f('42049','42050','42051','42052'); +f('42053','42054','42055','42056'); +f('42057','42058','42059','42060'); +f('42061','42062','42063','42064'); +f('42065','42066','42067','42068'); +f('42069','42070','42071','42072'); +f('42073','42074','42075','42076'); +f('42077','42078','42079','42080'); +f('42081','42082','42083','42084'); +f('42085','42086','42087','42088'); +f('42089','42090','42091','42092'); +f('42093','42094','42095','42096'); +f('42097','42098','42099','42100'); +f('42101','42102','42103','42104'); +f('42105','42106','42107','42108'); +f('42109','42110','42111','42112'); +f('42113','42114','42115','42116'); +f('42117','42118','42119','42120'); +f('42121','42122','42123','42124'); +f('42125','42126','42127','42128'); +f('42129','42130','42131','42132'); +f('42133','42134','42135','42136'); +f('42137','42138','42139','42140'); +f('42141','42142','42143','42144'); +f('42145','42146','42147','42148'); +f('42149','42150','42151','42152'); +f('42153','42154','42155','42156'); +f('42157','42158','42159','42160'); +f('42161','42162','42163','42164'); +f('42165','42166','42167','42168'); +f('42169','42170','42171','42172'); +f('42173','42174','42175','42176'); +f('42177','42178','42179','42180'); +f('42181','42182','42183','42184'); +f('42185','42186','42187','42188'); +f('42189','42190','42191','42192'); +f('42193','42194','42195','42196'); +f('42197','42198','42199','42200'); +f('42201','42202','42203','42204'); +f('42205','42206','42207','42208'); +f('42209','42210','42211','42212'); +f('42213','42214','42215','42216'); +f('42217','42218','42219','42220'); +f('42221','42222','42223','42224'); +f('42225','42226','42227','42228'); +f('42229','42230','42231','42232'); +f('42233','42234','42235','42236'); +f('42237','42238','42239','42240'); +f('42241','42242','42243','42244'); +f('42245','42246','42247','42248'); +f('42249','42250','42251','42252'); +f('42253','42254','42255','42256'); +f('42257','42258','42259','42260'); +f('42261','42262','42263','42264'); +f('42265','42266','42267','42268'); +f('42269','42270','42271','42272'); +f('42273','42274','42275','42276'); +f('42277','42278','42279','42280'); +f('42281','42282','42283','42284'); +f('42285','42286','42287','42288'); +f('42289','42290','42291','42292'); +f('42293','42294','42295','42296'); +f('42297','42298','42299','42300'); +f('42301','42302','42303','42304'); +f('42305','42306','42307','42308'); +f('42309','42310','42311','42312'); +f('42313','42314','42315','42316'); +f('42317','42318','42319','42320'); +f('42321','42322','42323','42324'); +f('42325','42326','42327','42328'); +f('42329','42330','42331','42332'); +f('42333','42334','42335','42336'); +f('42337','42338','42339','42340'); +f('42341','42342','42343','42344'); +f('42345','42346','42347','42348'); +f('42349','42350','42351','42352'); +f('42353','42354','42355','42356'); +f('42357','42358','42359','42360'); +f('42361','42362','42363','42364'); +f('42365','42366','42367','42368'); +f('42369','42370','42371','42372'); +f('42373','42374','42375','42376'); +f('42377','42378','42379','42380'); +f('42381','42382','42383','42384'); +f('42385','42386','42387','42388'); +f('42389','42390','42391','42392'); +f('42393','42394','42395','42396'); +f('42397','42398','42399','42400'); +f('42401','42402','42403','42404'); +f('42405','42406','42407','42408'); +f('42409','42410','42411','42412'); +f('42413','42414','42415','42416'); +f('42417','42418','42419','42420'); +f('42421','42422','42423','42424'); +f('42425','42426','42427','42428'); +f('42429','42430','42431','42432'); +f('42433','42434','42435','42436'); +f('42437','42438','42439','42440'); +f('42441','42442','42443','42444'); +f('42445','42446','42447','42448'); +f('42449','42450','42451','42452'); +f('42453','42454','42455','42456'); +f('42457','42458','42459','42460'); +f('42461','42462','42463','42464'); +f('42465','42466','42467','42468'); +f('42469','42470','42471','42472'); +f('42473','42474','42475','42476'); +f('42477','42478','42479','42480'); +f('42481','42482','42483','42484'); +f('42485','42486','42487','42488'); +f('42489','42490','42491','42492'); +f('42493','42494','42495','42496'); +f('42497','42498','42499','42500'); +f('42501','42502','42503','42504'); +f('42505','42506','42507','42508'); +f('42509','42510','42511','42512'); +f('42513','42514','42515','42516'); +f('42517','42518','42519','42520'); +f('42521','42522','42523','42524'); +f('42525','42526','42527','42528'); +f('42529','42530','42531','42532'); +f('42533','42534','42535','42536'); +f('42537','42538','42539','42540'); +f('42541','42542','42543','42544'); +f('42545','42546','42547','42548'); +f('42549','42550','42551','42552'); +f('42553','42554','42555','42556'); +f('42557','42558','42559','42560'); +f('42561','42562','42563','42564'); +f('42565','42566','42567','42568'); +f('42569','42570','42571','42572'); +f('42573','42574','42575','42576'); +f('42577','42578','42579','42580'); +f('42581','42582','42583','42584'); +f('42585','42586','42587','42588'); +f('42589','42590','42591','42592'); +f('42593','42594','42595','42596'); +f('42597','42598','42599','42600'); +f('42601','42602','42603','42604'); +f('42605','42606','42607','42608'); +f('42609','42610','42611','42612'); +f('42613','42614','42615','42616'); +f('42617','42618','42619','42620'); +f('42621','42622','42623','42624'); +f('42625','42626','42627','42628'); +f('42629','42630','42631','42632'); +f('42633','42634','42635','42636'); +f('42637','42638','42639','42640'); +f('42641','42642','42643','42644'); +f('42645','42646','42647','42648'); +f('42649','42650','42651','42652'); +f('42653','42654','42655','42656'); +f('42657','42658','42659','42660'); +f('42661','42662','42663','42664'); +f('42665','42666','42667','42668'); +f('42669','42670','42671','42672'); +f('42673','42674','42675','42676'); +f('42677','42678','42679','42680'); +f('42681','42682','42683','42684'); +f('42685','42686','42687','42688'); +f('42689','42690','42691','42692'); +f('42693','42694','42695','42696'); +f('42697','42698','42699','42700'); +f('42701','42702','42703','42704'); +f('42705','42706','42707','42708'); +f('42709','42710','42711','42712'); +f('42713','42714','42715','42716'); +f('42717','42718','42719','42720'); +f('42721','42722','42723','42724'); +f('42725','42726','42727','42728'); +f('42729','42730','42731','42732'); +f('42733','42734','42735','42736'); +f('42737','42738','42739','42740'); +f('42741','42742','42743','42744'); +f('42745','42746','42747','42748'); +f('42749','42750','42751','42752'); +f('42753','42754','42755','42756'); +f('42757','42758','42759','42760'); +f('42761','42762','42763','42764'); +f('42765','42766','42767','42768'); +f('42769','42770','42771','42772'); +f('42773','42774','42775','42776'); +f('42777','42778','42779','42780'); +f('42781','42782','42783','42784'); +f('42785','42786','42787','42788'); +f('42789','42790','42791','42792'); +f('42793','42794','42795','42796'); +f('42797','42798','42799','42800'); +f('42801','42802','42803','42804'); +f('42805','42806','42807','42808'); +f('42809','42810','42811','42812'); +f('42813','42814','42815','42816'); +f('42817','42818','42819','42820'); +f('42821','42822','42823','42824'); +f('42825','42826','42827','42828'); +f('42829','42830','42831','42832'); +f('42833','42834','42835','42836'); +f('42837','42838','42839','42840'); +f('42841','42842','42843','42844'); +f('42845','42846','42847','42848'); +f('42849','42850','42851','42852'); +f('42853','42854','42855','42856'); +f('42857','42858','42859','42860'); +f('42861','42862','42863','42864'); +f('42865','42866','42867','42868'); +f('42869','42870','42871','42872'); +f('42873','42874','42875','42876'); +f('42877','42878','42879','42880'); +f('42881','42882','42883','42884'); +f('42885','42886','42887','42888'); +f('42889','42890','42891','42892'); +f('42893','42894','42895','42896'); +f('42897','42898','42899','42900'); +f('42901','42902','42903','42904'); +f('42905','42906','42907','42908'); +f('42909','42910','42911','42912'); +f('42913','42914','42915','42916'); +f('42917','42918','42919','42920'); +f('42921','42922','42923','42924'); +f('42925','42926','42927','42928'); +f('42929','42930','42931','42932'); +f('42933','42934','42935','42936'); +f('42937','42938','42939','42940'); +f('42941','42942','42943','42944'); +f('42945','42946','42947','42948'); +f('42949','42950','42951','42952'); +f('42953','42954','42955','42956'); +f('42957','42958','42959','42960'); +f('42961','42962','42963','42964'); +f('42965','42966','42967','42968'); +f('42969','42970','42971','42972'); +f('42973','42974','42975','42976'); +f('42977','42978','42979','42980'); +f('42981','42982','42983','42984'); +f('42985','42986','42987','42988'); +f('42989','42990','42991','42992'); +f('42993','42994','42995','42996'); +f('42997','42998','42999','43000'); +f('43001','43002','43003','43004'); +f('43005','43006','43007','43008'); +f('43009','43010','43011','43012'); +f('43013','43014','43015','43016'); +f('43017','43018','43019','43020'); +f('43021','43022','43023','43024'); +f('43025','43026','43027','43028'); +f('43029','43030','43031','43032'); +f('43033','43034','43035','43036'); +f('43037','43038','43039','43040'); +f('43041','43042','43043','43044'); +f('43045','43046','43047','43048'); +f('43049','43050','43051','43052'); +f('43053','43054','43055','43056'); +f('43057','43058','43059','43060'); +f('43061','43062','43063','43064'); +f('43065','43066','43067','43068'); +f('43069','43070','43071','43072'); +f('43073','43074','43075','43076'); +f('43077','43078','43079','43080'); +f('43081','43082','43083','43084'); +f('43085','43086','43087','43088'); +f('43089','43090','43091','43092'); +f('43093','43094','43095','43096'); +f('43097','43098','43099','43100'); +f('43101','43102','43103','43104'); +f('43105','43106','43107','43108'); +f('43109','43110','43111','43112'); +f('43113','43114','43115','43116'); +f('43117','43118','43119','43120'); +f('43121','43122','43123','43124'); +f('43125','43126','43127','43128'); +f('43129','43130','43131','43132'); +f('43133','43134','43135','43136'); +f('43137','43138','43139','43140'); +f('43141','43142','43143','43144'); +f('43145','43146','43147','43148'); +f('43149','43150','43151','43152'); +f('43153','43154','43155','43156'); +f('43157','43158','43159','43160'); +f('43161','43162','43163','43164'); +f('43165','43166','43167','43168'); +f('43169','43170','43171','43172'); +f('43173','43174','43175','43176'); +f('43177','43178','43179','43180'); +f('43181','43182','43183','43184'); +f('43185','43186','43187','43188'); +f('43189','43190','43191','43192'); +f('43193','43194','43195','43196'); +f('43197','43198','43199','43200'); +f('43201','43202','43203','43204'); +f('43205','43206','43207','43208'); +f('43209','43210','43211','43212'); +f('43213','43214','43215','43216'); +f('43217','43218','43219','43220'); +f('43221','43222','43223','43224'); +f('43225','43226','43227','43228'); +f('43229','43230','43231','43232'); +f('43233','43234','43235','43236'); +f('43237','43238','43239','43240'); +f('43241','43242','43243','43244'); +f('43245','43246','43247','43248'); +f('43249','43250','43251','43252'); +f('43253','43254','43255','43256'); +f('43257','43258','43259','43260'); +f('43261','43262','43263','43264'); +f('43265','43266','43267','43268'); +f('43269','43270','43271','43272'); +f('43273','43274','43275','43276'); +f('43277','43278','43279','43280'); +f('43281','43282','43283','43284'); +f('43285','43286','43287','43288'); +f('43289','43290','43291','43292'); +f('43293','43294','43295','43296'); +f('43297','43298','43299','43300'); +f('43301','43302','43303','43304'); +f('43305','43306','43307','43308'); +f('43309','43310','43311','43312'); +f('43313','43314','43315','43316'); +f('43317','43318','43319','43320'); +f('43321','43322','43323','43324'); +f('43325','43326','43327','43328'); +f('43329','43330','43331','43332'); +f('43333','43334','43335','43336'); +f('43337','43338','43339','43340'); +f('43341','43342','43343','43344'); +f('43345','43346','43347','43348'); +f('43349','43350','43351','43352'); +f('43353','43354','43355','43356'); +f('43357','43358','43359','43360'); +f('43361','43362','43363','43364'); +f('43365','43366','43367','43368'); +f('43369','43370','43371','43372'); +f('43373','43374','43375','43376'); +f('43377','43378','43379','43380'); +f('43381','43382','43383','43384'); +f('43385','43386','43387','43388'); +f('43389','43390','43391','43392'); +f('43393','43394','43395','43396'); +f('43397','43398','43399','43400'); +f('43401','43402','43403','43404'); +f('43405','43406','43407','43408'); +f('43409','43410','43411','43412'); +f('43413','43414','43415','43416'); +f('43417','43418','43419','43420'); +f('43421','43422','43423','43424'); +f('43425','43426','43427','43428'); +f('43429','43430','43431','43432'); +f('43433','43434','43435','43436'); +f('43437','43438','43439','43440'); +f('43441','43442','43443','43444'); +f('43445','43446','43447','43448'); +f('43449','43450','43451','43452'); +f('43453','43454','43455','43456'); +f('43457','43458','43459','43460'); +f('43461','43462','43463','43464'); +f('43465','43466','43467','43468'); +f('43469','43470','43471','43472'); +f('43473','43474','43475','43476'); +f('43477','43478','43479','43480'); +f('43481','43482','43483','43484'); +f('43485','43486','43487','43488'); +f('43489','43490','43491','43492'); +f('43493','43494','43495','43496'); +f('43497','43498','43499','43500'); +f('43501','43502','43503','43504'); +f('43505','43506','43507','43508'); +f('43509','43510','43511','43512'); +f('43513','43514','43515','43516'); +f('43517','43518','43519','43520'); +f('43521','43522','43523','43524'); +f('43525','43526','43527','43528'); +f('43529','43530','43531','43532'); +f('43533','43534','43535','43536'); +f('43537','43538','43539','43540'); +f('43541','43542','43543','43544'); +f('43545','43546','43547','43548'); +f('43549','43550','43551','43552'); +f('43553','43554','43555','43556'); +f('43557','43558','43559','43560'); +f('43561','43562','43563','43564'); +f('43565','43566','43567','43568'); +f('43569','43570','43571','43572'); +f('43573','43574','43575','43576'); +f('43577','43578','43579','43580'); +f('43581','43582','43583','43584'); +f('43585','43586','43587','43588'); +f('43589','43590','43591','43592'); +f('43593','43594','43595','43596'); +f('43597','43598','43599','43600'); +f('43601','43602','43603','43604'); +f('43605','43606','43607','43608'); +f('43609','43610','43611','43612'); +f('43613','43614','43615','43616'); +f('43617','43618','43619','43620'); +f('43621','43622','43623','43624'); +f('43625','43626','43627','43628'); +f('43629','43630','43631','43632'); +f('43633','43634','43635','43636'); +f('43637','43638','43639','43640'); +f('43641','43642','43643','43644'); +f('43645','43646','43647','43648'); +f('43649','43650','43651','43652'); +f('43653','43654','43655','43656'); +f('43657','43658','43659','43660'); +f('43661','43662','43663','43664'); +f('43665','43666','43667','43668'); +f('43669','43670','43671','43672'); +f('43673','43674','43675','43676'); +f('43677','43678','43679','43680'); +f('43681','43682','43683','43684'); +f('43685','43686','43687','43688'); +f('43689','43690','43691','43692'); +f('43693','43694','43695','43696'); +f('43697','43698','43699','43700'); +f('43701','43702','43703','43704'); +f('43705','43706','43707','43708'); +f('43709','43710','43711','43712'); +f('43713','43714','43715','43716'); +f('43717','43718','43719','43720'); +f('43721','43722','43723','43724'); +f('43725','43726','43727','43728'); +f('43729','43730','43731','43732'); +f('43733','43734','43735','43736'); +f('43737','43738','43739','43740'); +f('43741','43742','43743','43744'); +f('43745','43746','43747','43748'); +f('43749','43750','43751','43752'); +f('43753','43754','43755','43756'); +f('43757','43758','43759','43760'); +f('43761','43762','43763','43764'); +f('43765','43766','43767','43768'); +f('43769','43770','43771','43772'); +f('43773','43774','43775','43776'); +f('43777','43778','43779','43780'); +f('43781','43782','43783','43784'); +f('43785','43786','43787','43788'); +f('43789','43790','43791','43792'); +f('43793','43794','43795','43796'); +f('43797','43798','43799','43800'); +f('43801','43802','43803','43804'); +f('43805','43806','43807','43808'); +f('43809','43810','43811','43812'); +f('43813','43814','43815','43816'); +f('43817','43818','43819','43820'); +f('43821','43822','43823','43824'); +f('43825','43826','43827','43828'); +f('43829','43830','43831','43832'); +f('43833','43834','43835','43836'); +f('43837','43838','43839','43840'); +f('43841','43842','43843','43844'); +f('43845','43846','43847','43848'); +f('43849','43850','43851','43852'); +f('43853','43854','43855','43856'); +f('43857','43858','43859','43860'); +f('43861','43862','43863','43864'); +f('43865','43866','43867','43868'); +f('43869','43870','43871','43872'); +f('43873','43874','43875','43876'); +f('43877','43878','43879','43880'); +f('43881','43882','43883','43884'); +f('43885','43886','43887','43888'); +f('43889','43890','43891','43892'); +f('43893','43894','43895','43896'); +f('43897','43898','43899','43900'); +f('43901','43902','43903','43904'); +f('43905','43906','43907','43908'); +f('43909','43910','43911','43912'); +f('43913','43914','43915','43916'); +f('43917','43918','43919','43920'); +f('43921','43922','43923','43924'); +f('43925','43926','43927','43928'); +f('43929','43930','43931','43932'); +f('43933','43934','43935','43936'); +f('43937','43938','43939','43940'); +f('43941','43942','43943','43944'); +f('43945','43946','43947','43948'); +f('43949','43950','43951','43952'); +f('43953','43954','43955','43956'); +f('43957','43958','43959','43960'); +f('43961','43962','43963','43964'); +f('43965','43966','43967','43968'); +f('43969','43970','43971','43972'); +f('43973','43974','43975','43976'); +f('43977','43978','43979','43980'); +f('43981','43982','43983','43984'); +f('43985','43986','43987','43988'); +f('43989','43990','43991','43992'); +f('43993','43994','43995','43996'); +f('43997','43998','43999','44000'); +f('44001','44002','44003','44004'); +f('44005','44006','44007','44008'); +f('44009','44010','44011','44012'); +f('44013','44014','44015','44016'); +f('44017','44018','44019','44020'); +f('44021','44022','44023','44024'); +f('44025','44026','44027','44028'); +f('44029','44030','44031','44032'); +f('44033','44034','44035','44036'); +f('44037','44038','44039','44040'); +f('44041','44042','44043','44044'); +f('44045','44046','44047','44048'); +f('44049','44050','44051','44052'); +f('44053','44054','44055','44056'); +f('44057','44058','44059','44060'); +f('44061','44062','44063','44064'); +f('44065','44066','44067','44068'); +f('44069','44070','44071','44072'); +f('44073','44074','44075','44076'); +f('44077','44078','44079','44080'); +f('44081','44082','44083','44084'); +f('44085','44086','44087','44088'); +f('44089','44090','44091','44092'); +f('44093','44094','44095','44096'); +f('44097','44098','44099','44100'); +f('44101','44102','44103','44104'); +f('44105','44106','44107','44108'); +f('44109','44110','44111','44112'); +f('44113','44114','44115','44116'); +f('44117','44118','44119','44120'); +f('44121','44122','44123','44124'); +f('44125','44126','44127','44128'); +f('44129','44130','44131','44132'); +f('44133','44134','44135','44136'); +f('44137','44138','44139','44140'); +f('44141','44142','44143','44144'); +f('44145','44146','44147','44148'); +f('44149','44150','44151','44152'); +f('44153','44154','44155','44156'); +f('44157','44158','44159','44160'); +f('44161','44162','44163','44164'); +f('44165','44166','44167','44168'); +f('44169','44170','44171','44172'); +f('44173','44174','44175','44176'); +f('44177','44178','44179','44180'); +f('44181','44182','44183','44184'); +f('44185','44186','44187','44188'); +f('44189','44190','44191','44192'); +f('44193','44194','44195','44196'); +f('44197','44198','44199','44200'); +f('44201','44202','44203','44204'); +f('44205','44206','44207','44208'); +f('44209','44210','44211','44212'); +f('44213','44214','44215','44216'); +f('44217','44218','44219','44220'); +f('44221','44222','44223','44224'); +f('44225','44226','44227','44228'); +f('44229','44230','44231','44232'); +f('44233','44234','44235','44236'); +f('44237','44238','44239','44240'); +f('44241','44242','44243','44244'); +f('44245','44246','44247','44248'); +f('44249','44250','44251','44252'); +f('44253','44254','44255','44256'); +f('44257','44258','44259','44260'); +f('44261','44262','44263','44264'); +f('44265','44266','44267','44268'); +f('44269','44270','44271','44272'); +f('44273','44274','44275','44276'); +f('44277','44278','44279','44280'); +f('44281','44282','44283','44284'); +f('44285','44286','44287','44288'); +f('44289','44290','44291','44292'); +f('44293','44294','44295','44296'); +f('44297','44298','44299','44300'); +f('44301','44302','44303','44304'); +f('44305','44306','44307','44308'); +f('44309','44310','44311','44312'); +f('44313','44314','44315','44316'); +f('44317','44318','44319','44320'); +f('44321','44322','44323','44324'); +f('44325','44326','44327','44328'); +f('44329','44330','44331','44332'); +f('44333','44334','44335','44336'); +f('44337','44338','44339','44340'); +f('44341','44342','44343','44344'); +f('44345','44346','44347','44348'); +f('44349','44350','44351','44352'); +f('44353','44354','44355','44356'); +f('44357','44358','44359','44360'); +f('44361','44362','44363','44364'); +f('44365','44366','44367','44368'); +f('44369','44370','44371','44372'); +f('44373','44374','44375','44376'); +f('44377','44378','44379','44380'); +f('44381','44382','44383','44384'); +f('44385','44386','44387','44388'); +f('44389','44390','44391','44392'); +f('44393','44394','44395','44396'); +f('44397','44398','44399','44400'); +f('44401','44402','44403','44404'); +f('44405','44406','44407','44408'); +f('44409','44410','44411','44412'); +f('44413','44414','44415','44416'); +f('44417','44418','44419','44420'); +f('44421','44422','44423','44424'); +f('44425','44426','44427','44428'); +f('44429','44430','44431','44432'); +f('44433','44434','44435','44436'); +f('44437','44438','44439','44440'); +f('44441','44442','44443','44444'); +f('44445','44446','44447','44448'); +f('44449','44450','44451','44452'); +f('44453','44454','44455','44456'); +f('44457','44458','44459','44460'); +f('44461','44462','44463','44464'); +f('44465','44466','44467','44468'); +f('44469','44470','44471','44472'); +f('44473','44474','44475','44476'); +f('44477','44478','44479','44480'); +f('44481','44482','44483','44484'); +f('44485','44486','44487','44488'); +f('44489','44490','44491','44492'); +f('44493','44494','44495','44496'); +f('44497','44498','44499','44500'); +f('44501','44502','44503','44504'); +f('44505','44506','44507','44508'); +f('44509','44510','44511','44512'); +f('44513','44514','44515','44516'); +f('44517','44518','44519','44520'); +f('44521','44522','44523','44524'); +f('44525','44526','44527','44528'); +f('44529','44530','44531','44532'); +f('44533','44534','44535','44536'); +f('44537','44538','44539','44540'); +f('44541','44542','44543','44544'); +f('44545','44546','44547','44548'); +f('44549','44550','44551','44552'); +f('44553','44554','44555','44556'); +f('44557','44558','44559','44560'); +f('44561','44562','44563','44564'); +f('44565','44566','44567','44568'); +f('44569','44570','44571','44572'); +f('44573','44574','44575','44576'); +f('44577','44578','44579','44580'); +f('44581','44582','44583','44584'); +f('44585','44586','44587','44588'); +f('44589','44590','44591','44592'); +f('44593','44594','44595','44596'); +f('44597','44598','44599','44600'); +f('44601','44602','44603','44604'); +f('44605','44606','44607','44608'); +f('44609','44610','44611','44612'); +f('44613','44614','44615','44616'); +f('44617','44618','44619','44620'); +f('44621','44622','44623','44624'); +f('44625','44626','44627','44628'); +f('44629','44630','44631','44632'); +f('44633','44634','44635','44636'); +f('44637','44638','44639','44640'); +f('44641','44642','44643','44644'); +f('44645','44646','44647','44648'); +f('44649','44650','44651','44652'); +f('44653','44654','44655','44656'); +f('44657','44658','44659','44660'); +f('44661','44662','44663','44664'); +f('44665','44666','44667','44668'); +f('44669','44670','44671','44672'); +f('44673','44674','44675','44676'); +f('44677','44678','44679','44680'); +f('44681','44682','44683','44684'); +f('44685','44686','44687','44688'); +f('44689','44690','44691','44692'); +f('44693','44694','44695','44696'); +f('44697','44698','44699','44700'); +f('44701','44702','44703','44704'); +f('44705','44706','44707','44708'); +f('44709','44710','44711','44712'); +f('44713','44714','44715','44716'); +f('44717','44718','44719','44720'); +f('44721','44722','44723','44724'); +f('44725','44726','44727','44728'); +f('44729','44730','44731','44732'); +f('44733','44734','44735','44736'); +f('44737','44738','44739','44740'); +f('44741','44742','44743','44744'); +f('44745','44746','44747','44748'); +f('44749','44750','44751','44752'); +f('44753','44754','44755','44756'); +f('44757','44758','44759','44760'); +f('44761','44762','44763','44764'); +f('44765','44766','44767','44768'); +f('44769','44770','44771','44772'); +f('44773','44774','44775','44776'); +f('44777','44778','44779','44780'); +f('44781','44782','44783','44784'); +f('44785','44786','44787','44788'); +f('44789','44790','44791','44792'); +f('44793','44794','44795','44796'); +f('44797','44798','44799','44800'); +f('44801','44802','44803','44804'); +f('44805','44806','44807','44808'); +f('44809','44810','44811','44812'); +f('44813','44814','44815','44816'); +f('44817','44818','44819','44820'); +f('44821','44822','44823','44824'); +f('44825','44826','44827','44828'); +f('44829','44830','44831','44832'); +f('44833','44834','44835','44836'); +f('44837','44838','44839','44840'); +f('44841','44842','44843','44844'); +f('44845','44846','44847','44848'); +f('44849','44850','44851','44852'); +f('44853','44854','44855','44856'); +f('44857','44858','44859','44860'); +f('44861','44862','44863','44864'); +f('44865','44866','44867','44868'); +f('44869','44870','44871','44872'); +f('44873','44874','44875','44876'); +f('44877','44878','44879','44880'); +f('44881','44882','44883','44884'); +f('44885','44886','44887','44888'); +f('44889','44890','44891','44892'); +f('44893','44894','44895','44896'); +f('44897','44898','44899','44900'); +f('44901','44902','44903','44904'); +f('44905','44906','44907','44908'); +f('44909','44910','44911','44912'); +f('44913','44914','44915','44916'); +f('44917','44918','44919','44920'); +f('44921','44922','44923','44924'); +f('44925','44926','44927','44928'); +f('44929','44930','44931','44932'); +f('44933','44934','44935','44936'); +f('44937','44938','44939','44940'); +f('44941','44942','44943','44944'); +f('44945','44946','44947','44948'); +f('44949','44950','44951','44952'); +f('44953','44954','44955','44956'); +f('44957','44958','44959','44960'); +f('44961','44962','44963','44964'); +f('44965','44966','44967','44968'); +f('44969','44970','44971','44972'); +f('44973','44974','44975','44976'); +f('44977','44978','44979','44980'); +f('44981','44982','44983','44984'); +f('44985','44986','44987','44988'); +f('44989','44990','44991','44992'); +f('44993','44994','44995','44996'); +f('44997','44998','44999','45000'); +f('45001','45002','45003','45004'); +f('45005','45006','45007','45008'); +f('45009','45010','45011','45012'); +f('45013','45014','45015','45016'); +f('45017','45018','45019','45020'); +f('45021','45022','45023','45024'); +f('45025','45026','45027','45028'); +f('45029','45030','45031','45032'); +f('45033','45034','45035','45036'); +f('45037','45038','45039','45040'); +f('45041','45042','45043','45044'); +f('45045','45046','45047','45048'); +f('45049','45050','45051','45052'); +f('45053','45054','45055','45056'); +f('45057','45058','45059','45060'); +f('45061','45062','45063','45064'); +f('45065','45066','45067','45068'); +f('45069','45070','45071','45072'); +f('45073','45074','45075','45076'); +f('45077','45078','45079','45080'); +f('45081','45082','45083','45084'); +f('45085','45086','45087','45088'); +f('45089','45090','45091','45092'); +f('45093','45094','45095','45096'); +f('45097','45098','45099','45100'); +f('45101','45102','45103','45104'); +f('45105','45106','45107','45108'); +f('45109','45110','45111','45112'); +f('45113','45114','45115','45116'); +f('45117','45118','45119','45120'); +f('45121','45122','45123','45124'); +f('45125','45126','45127','45128'); +f('45129','45130','45131','45132'); +f('45133','45134','45135','45136'); +f('45137','45138','45139','45140'); +f('45141','45142','45143','45144'); +f('45145','45146','45147','45148'); +f('45149','45150','45151','45152'); +f('45153','45154','45155','45156'); +f('45157','45158','45159','45160'); +f('45161','45162','45163','45164'); +f('45165','45166','45167','45168'); +f('45169','45170','45171','45172'); +f('45173','45174','45175','45176'); +f('45177','45178','45179','45180'); +f('45181','45182','45183','45184'); +f('45185','45186','45187','45188'); +f('45189','45190','45191','45192'); +f('45193','45194','45195','45196'); +f('45197','45198','45199','45200'); +f('45201','45202','45203','45204'); +f('45205','45206','45207','45208'); +f('45209','45210','45211','45212'); +f('45213','45214','45215','45216'); +f('45217','45218','45219','45220'); +f('45221','45222','45223','45224'); +f('45225','45226','45227','45228'); +f('45229','45230','45231','45232'); +f('45233','45234','45235','45236'); +f('45237','45238','45239','45240'); +f('45241','45242','45243','45244'); +f('45245','45246','45247','45248'); +f('45249','45250','45251','45252'); +f('45253','45254','45255','45256'); +f('45257','45258','45259','45260'); +f('45261','45262','45263','45264'); +f('45265','45266','45267','45268'); +f('45269','45270','45271','45272'); +f('45273','45274','45275','45276'); +f('45277','45278','45279','45280'); +f('45281','45282','45283','45284'); +f('45285','45286','45287','45288'); +f('45289','45290','45291','45292'); +f('45293','45294','45295','45296'); +f('45297','45298','45299','45300'); +f('45301','45302','45303','45304'); +f('45305','45306','45307','45308'); +f('45309','45310','45311','45312'); +f('45313','45314','45315','45316'); +f('45317','45318','45319','45320'); +f('45321','45322','45323','45324'); +f('45325','45326','45327','45328'); +f('45329','45330','45331','45332'); +f('45333','45334','45335','45336'); +f('45337','45338','45339','45340'); +f('45341','45342','45343','45344'); +f('45345','45346','45347','45348'); +f('45349','45350','45351','45352'); +f('45353','45354','45355','45356'); +f('45357','45358','45359','45360'); +f('45361','45362','45363','45364'); +f('45365','45366','45367','45368'); +f('45369','45370','45371','45372'); +f('45373','45374','45375','45376'); +f('45377','45378','45379','45380'); +f('45381','45382','45383','45384'); +f('45385','45386','45387','45388'); +f('45389','45390','45391','45392'); +f('45393','45394','45395','45396'); +f('45397','45398','45399','45400'); +f('45401','45402','45403','45404'); +f('45405','45406','45407','45408'); +f('45409','45410','45411','45412'); +f('45413','45414','45415','45416'); +f('45417','45418','45419','45420'); +f('45421','45422','45423','45424'); +f('45425','45426','45427','45428'); +f('45429','45430','45431','45432'); +f('45433','45434','45435','45436'); +f('45437','45438','45439','45440'); +f('45441','45442','45443','45444'); +f('45445','45446','45447','45448'); +f('45449','45450','45451','45452'); +f('45453','45454','45455','45456'); +f('45457','45458','45459','45460'); +f('45461','45462','45463','45464'); +f('45465','45466','45467','45468'); +f('45469','45470','45471','45472'); +f('45473','45474','45475','45476'); +f('45477','45478','45479','45480'); +f('45481','45482','45483','45484'); +f('45485','45486','45487','45488'); +f('45489','45490','45491','45492'); +f('45493','45494','45495','45496'); +f('45497','45498','45499','45500'); +f('45501','45502','45503','45504'); +f('45505','45506','45507','45508'); +f('45509','45510','45511','45512'); +f('45513','45514','45515','45516'); +f('45517','45518','45519','45520'); +f('45521','45522','45523','45524'); +f('45525','45526','45527','45528'); +f('45529','45530','45531','45532'); +f('45533','45534','45535','45536'); +f('45537','45538','45539','45540'); +f('45541','45542','45543','45544'); +f('45545','45546','45547','45548'); +f('45549','45550','45551','45552'); +f('45553','45554','45555','45556'); +f('45557','45558','45559','45560'); +f('45561','45562','45563','45564'); +f('45565','45566','45567','45568'); +f('45569','45570','45571','45572'); +f('45573','45574','45575','45576'); +f('45577','45578','45579','45580'); +f('45581','45582','45583','45584'); +f('45585','45586','45587','45588'); +f('45589','45590','45591','45592'); +f('45593','45594','45595','45596'); +f('45597','45598','45599','45600'); +f('45601','45602','45603','45604'); +f('45605','45606','45607','45608'); +f('45609','45610','45611','45612'); +f('45613','45614','45615','45616'); +f('45617','45618','45619','45620'); +f('45621','45622','45623','45624'); +f('45625','45626','45627','45628'); +f('45629','45630','45631','45632'); +f('45633','45634','45635','45636'); +f('45637','45638','45639','45640'); +f('45641','45642','45643','45644'); +f('45645','45646','45647','45648'); +f('45649','45650','45651','45652'); +f('45653','45654','45655','45656'); +f('45657','45658','45659','45660'); +f('45661','45662','45663','45664'); +f('45665','45666','45667','45668'); +f('45669','45670','45671','45672'); +f('45673','45674','45675','45676'); +f('45677','45678','45679','45680'); +f('45681','45682','45683','45684'); +f('45685','45686','45687','45688'); +f('45689','45690','45691','45692'); +f('45693','45694','45695','45696'); +f('45697','45698','45699','45700'); +f('45701','45702','45703','45704'); +f('45705','45706','45707','45708'); +f('45709','45710','45711','45712'); +f('45713','45714','45715','45716'); +f('45717','45718','45719','45720'); +f('45721','45722','45723','45724'); +f('45725','45726','45727','45728'); +f('45729','45730','45731','45732'); +f('45733','45734','45735','45736'); +f('45737','45738','45739','45740'); +f('45741','45742','45743','45744'); +f('45745','45746','45747','45748'); +f('45749','45750','45751','45752'); +f('45753','45754','45755','45756'); +f('45757','45758','45759','45760'); +f('45761','45762','45763','45764'); +f('45765','45766','45767','45768'); +f('45769','45770','45771','45772'); +f('45773','45774','45775','45776'); +f('45777','45778','45779','45780'); +f('45781','45782','45783','45784'); +f('45785','45786','45787','45788'); +f('45789','45790','45791','45792'); +f('45793','45794','45795','45796'); +f('45797','45798','45799','45800'); +f('45801','45802','45803','45804'); +f('45805','45806','45807','45808'); +f('45809','45810','45811','45812'); +f('45813','45814','45815','45816'); +f('45817','45818','45819','45820'); +f('45821','45822','45823','45824'); +f('45825','45826','45827','45828'); +f('45829','45830','45831','45832'); +f('45833','45834','45835','45836'); +f('45837','45838','45839','45840'); +f('45841','45842','45843','45844'); +f('45845','45846','45847','45848'); +f('45849','45850','45851','45852'); +f('45853','45854','45855','45856'); +f('45857','45858','45859','45860'); +f('45861','45862','45863','45864'); +f('45865','45866','45867','45868'); +f('45869','45870','45871','45872'); +f('45873','45874','45875','45876'); +f('45877','45878','45879','45880'); +f('45881','45882','45883','45884'); +f('45885','45886','45887','45888'); +f('45889','45890','45891','45892'); +f('45893','45894','45895','45896'); +f('45897','45898','45899','45900'); +f('45901','45902','45903','45904'); +f('45905','45906','45907','45908'); +f('45909','45910','45911','45912'); +f('45913','45914','45915','45916'); +f('45917','45918','45919','45920'); +f('45921','45922','45923','45924'); +f('45925','45926','45927','45928'); +f('45929','45930','45931','45932'); +f('45933','45934','45935','45936'); +f('45937','45938','45939','45940'); +f('45941','45942','45943','45944'); +f('45945','45946','45947','45948'); +f('45949','45950','45951','45952'); +f('45953','45954','45955','45956'); +f('45957','45958','45959','45960'); +f('45961','45962','45963','45964'); +f('45965','45966','45967','45968'); +f('45969','45970','45971','45972'); +f('45973','45974','45975','45976'); +f('45977','45978','45979','45980'); +f('45981','45982','45983','45984'); +f('45985','45986','45987','45988'); +f('45989','45990','45991','45992'); +f('45993','45994','45995','45996'); +f('45997','45998','45999','46000'); +f('46001','46002','46003','46004'); +f('46005','46006','46007','46008'); +f('46009','46010','46011','46012'); +f('46013','46014','46015','46016'); +f('46017','46018','46019','46020'); +f('46021','46022','46023','46024'); +f('46025','46026','46027','46028'); +f('46029','46030','46031','46032'); +f('46033','46034','46035','46036'); +f('46037','46038','46039','46040'); +f('46041','46042','46043','46044'); +f('46045','46046','46047','46048'); +f('46049','46050','46051','46052'); +f('46053','46054','46055','46056'); +f('46057','46058','46059','46060'); +f('46061','46062','46063','46064'); +f('46065','46066','46067','46068'); +f('46069','46070','46071','46072'); +f('46073','46074','46075','46076'); +f('46077','46078','46079','46080'); +f('46081','46082','46083','46084'); +f('46085','46086','46087','46088'); +f('46089','46090','46091','46092'); +f('46093','46094','46095','46096'); +f('46097','46098','46099','46100'); +f('46101','46102','46103','46104'); +f('46105','46106','46107','46108'); +f('46109','46110','46111','46112'); +f('46113','46114','46115','46116'); +f('46117','46118','46119','46120'); +f('46121','46122','46123','46124'); +f('46125','46126','46127','46128'); +f('46129','46130','46131','46132'); +f('46133','46134','46135','46136'); +f('46137','46138','46139','46140'); +f('46141','46142','46143','46144'); +f('46145','46146','46147','46148'); +f('46149','46150','46151','46152'); +f('46153','46154','46155','46156'); +f('46157','46158','46159','46160'); +f('46161','46162','46163','46164'); +f('46165','46166','46167','46168'); +f('46169','46170','46171','46172'); +f('46173','46174','46175','46176'); +f('46177','46178','46179','46180'); +f('46181','46182','46183','46184'); +f('46185','46186','46187','46188'); +f('46189','46190','46191','46192'); +f('46193','46194','46195','46196'); +f('46197','46198','46199','46200'); +f('46201','46202','46203','46204'); +f('46205','46206','46207','46208'); +f('46209','46210','46211','46212'); +f('46213','46214','46215','46216'); +f('46217','46218','46219','46220'); +f('46221','46222','46223','46224'); +f('46225','46226','46227','46228'); +f('46229','46230','46231','46232'); +f('46233','46234','46235','46236'); +f('46237','46238','46239','46240'); +f('46241','46242','46243','46244'); +f('46245','46246','46247','46248'); +f('46249','46250','46251','46252'); +f('46253','46254','46255','46256'); +f('46257','46258','46259','46260'); +f('46261','46262','46263','46264'); +f('46265','46266','46267','46268'); +f('46269','46270','46271','46272'); +f('46273','46274','46275','46276'); +f('46277','46278','46279','46280'); +f('46281','46282','46283','46284'); +f('46285','46286','46287','46288'); +f('46289','46290','46291','46292'); +f('46293','46294','46295','46296'); +f('46297','46298','46299','46300'); +f('46301','46302','46303','46304'); +f('46305','46306','46307','46308'); +f('46309','46310','46311','46312'); +f('46313','46314','46315','46316'); +f('46317','46318','46319','46320'); +f('46321','46322','46323','46324'); +f('46325','46326','46327','46328'); +f('46329','46330','46331','46332'); +f('46333','46334','46335','46336'); +f('46337','46338','46339','46340'); +f('46341','46342','46343','46344'); +f('46345','46346','46347','46348'); +f('46349','46350','46351','46352'); +f('46353','46354','46355','46356'); +f('46357','46358','46359','46360'); +f('46361','46362','46363','46364'); +f('46365','46366','46367','46368'); +f('46369','46370','46371','46372'); +f('46373','46374','46375','46376'); +f('46377','46378','46379','46380'); +f('46381','46382','46383','46384'); +f('46385','46386','46387','46388'); +f('46389','46390','46391','46392'); +f('46393','46394','46395','46396'); +f('46397','46398','46399','46400'); +f('46401','46402','46403','46404'); +f('46405','46406','46407','46408'); +f('46409','46410','46411','46412'); +f('46413','46414','46415','46416'); +f('46417','46418','46419','46420'); +f('46421','46422','46423','46424'); +f('46425','46426','46427','46428'); +f('46429','46430','46431','46432'); +f('46433','46434','46435','46436'); +f('46437','46438','46439','46440'); +f('46441','46442','46443','46444'); +f('46445','46446','46447','46448'); +f('46449','46450','46451','46452'); +f('46453','46454','46455','46456'); +f('46457','46458','46459','46460'); +f('46461','46462','46463','46464'); +f('46465','46466','46467','46468'); +f('46469','46470','46471','46472'); +f('46473','46474','46475','46476'); +f('46477','46478','46479','46480'); +f('46481','46482','46483','46484'); +f('46485','46486','46487','46488'); +f('46489','46490','46491','46492'); +f('46493','46494','46495','46496'); +f('46497','46498','46499','46500'); +f('46501','46502','46503','46504'); +f('46505','46506','46507','46508'); +f('46509','46510','46511','46512'); +f('46513','46514','46515','46516'); +f('46517','46518','46519','46520'); +f('46521','46522','46523','46524'); +f('46525','46526','46527','46528'); +f('46529','46530','46531','46532'); +f('46533','46534','46535','46536'); +f('46537','46538','46539','46540'); +f('46541','46542','46543','46544'); +f('46545','46546','46547','46548'); +f('46549','46550','46551','46552'); +f('46553','46554','46555','46556'); +f('46557','46558','46559','46560'); +f('46561','46562','46563','46564'); +f('46565','46566','46567','46568'); +f('46569','46570','46571','46572'); +f('46573','46574','46575','46576'); +f('46577','46578','46579','46580'); +f('46581','46582','46583','46584'); +f('46585','46586','46587','46588'); +f('46589','46590','46591','46592'); +f('46593','46594','46595','46596'); +f('46597','46598','46599','46600'); +f('46601','46602','46603','46604'); +f('46605','46606','46607','46608'); +f('46609','46610','46611','46612'); +f('46613','46614','46615','46616'); +f('46617','46618','46619','46620'); +f('46621','46622','46623','46624'); +f('46625','46626','46627','46628'); +f('46629','46630','46631','46632'); +f('46633','46634','46635','46636'); +f('46637','46638','46639','46640'); +f('46641','46642','46643','46644'); +f('46645','46646','46647','46648'); +f('46649','46650','46651','46652'); +f('46653','46654','46655','46656'); +f('46657','46658','46659','46660'); +f('46661','46662','46663','46664'); +f('46665','46666','46667','46668'); +f('46669','46670','46671','46672'); +f('46673','46674','46675','46676'); +f('46677','46678','46679','46680'); +f('46681','46682','46683','46684'); +f('46685','46686','46687','46688'); +f('46689','46690','46691','46692'); +f('46693','46694','46695','46696'); +f('46697','46698','46699','46700'); +f('46701','46702','46703','46704'); +f('46705','46706','46707','46708'); +f('46709','46710','46711','46712'); +f('46713','46714','46715','46716'); +f('46717','46718','46719','46720'); +f('46721','46722','46723','46724'); +f('46725','46726','46727','46728'); +f('46729','46730','46731','46732'); +f('46733','46734','46735','46736'); +f('46737','46738','46739','46740'); +f('46741','46742','46743','46744'); +f('46745','46746','46747','46748'); +f('46749','46750','46751','46752'); +f('46753','46754','46755','46756'); +f('46757','46758','46759','46760'); +f('46761','46762','46763','46764'); +f('46765','46766','46767','46768'); +f('46769','46770','46771','46772'); +f('46773','46774','46775','46776'); +f('46777','46778','46779','46780'); +f('46781','46782','46783','46784'); +f('46785','46786','46787','46788'); +f('46789','46790','46791','46792'); +f('46793','46794','46795','46796'); +f('46797','46798','46799','46800'); +f('46801','46802','46803','46804'); +f('46805','46806','46807','46808'); +f('46809','46810','46811','46812'); +f('46813','46814','46815','46816'); +f('46817','46818','46819','46820'); +f('46821','46822','46823','46824'); +f('46825','46826','46827','46828'); +f('46829','46830','46831','46832'); +f('46833','46834','46835','46836'); +f('46837','46838','46839','46840'); +f('46841','46842','46843','46844'); +f('46845','46846','46847','46848'); +f('46849','46850','46851','46852'); +f('46853','46854','46855','46856'); +f('46857','46858','46859','46860'); +f('46861','46862','46863','46864'); +f('46865','46866','46867','46868'); +f('46869','46870','46871','46872'); +f('46873','46874','46875','46876'); +f('46877','46878','46879','46880'); +f('46881','46882','46883','46884'); +f('46885','46886','46887','46888'); +f('46889','46890','46891','46892'); +f('46893','46894','46895','46896'); +f('46897','46898','46899','46900'); +f('46901','46902','46903','46904'); +f('46905','46906','46907','46908'); +f('46909','46910','46911','46912'); +f('46913','46914','46915','46916'); +f('46917','46918','46919','46920'); +f('46921','46922','46923','46924'); +f('46925','46926','46927','46928'); +f('46929','46930','46931','46932'); +f('46933','46934','46935','46936'); +f('46937','46938','46939','46940'); +f('46941','46942','46943','46944'); +f('46945','46946','46947','46948'); +f('46949','46950','46951','46952'); +f('46953','46954','46955','46956'); +f('46957','46958','46959','46960'); +f('46961','46962','46963','46964'); +f('46965','46966','46967','46968'); +f('46969','46970','46971','46972'); +f('46973','46974','46975','46976'); +f('46977','46978','46979','46980'); +f('46981','46982','46983','46984'); +f('46985','46986','46987','46988'); +f('46989','46990','46991','46992'); +f('46993','46994','46995','46996'); +f('46997','46998','46999','47000'); +f('47001','47002','47003','47004'); +f('47005','47006','47007','47008'); +f('47009','47010','47011','47012'); +f('47013','47014','47015','47016'); +f('47017','47018','47019','47020'); +f('47021','47022','47023','47024'); +f('47025','47026','47027','47028'); +f('47029','47030','47031','47032'); +f('47033','47034','47035','47036'); +f('47037','47038','47039','47040'); +f('47041','47042','47043','47044'); +f('47045','47046','47047','47048'); +f('47049','47050','47051','47052'); +f('47053','47054','47055','47056'); +f('47057','47058','47059','47060'); +f('47061','47062','47063','47064'); +f('47065','47066','47067','47068'); +f('47069','47070','47071','47072'); +f('47073','47074','47075','47076'); +f('47077','47078','47079','47080'); +f('47081','47082','47083','47084'); +f('47085','47086','47087','47088'); +f('47089','47090','47091','47092'); +f('47093','47094','47095','47096'); +f('47097','47098','47099','47100'); +f('47101','47102','47103','47104'); +f('47105','47106','47107','47108'); +f('47109','47110','47111','47112'); +f('47113','47114','47115','47116'); +f('47117','47118','47119','47120'); +f('47121','47122','47123','47124'); +f('47125','47126','47127','47128'); +f('47129','47130','47131','47132'); +f('47133','47134','47135','47136'); +f('47137','47138','47139','47140'); +f('47141','47142','47143','47144'); +f('47145','47146','47147','47148'); +f('47149','47150','47151','47152'); +f('47153','47154','47155','47156'); +f('47157','47158','47159','47160'); +f('47161','47162','47163','47164'); +f('47165','47166','47167','47168'); +f('47169','47170','47171','47172'); +f('47173','47174','47175','47176'); +f('47177','47178','47179','47180'); +f('47181','47182','47183','47184'); +f('47185','47186','47187','47188'); +f('47189','47190','47191','47192'); +f('47193','47194','47195','47196'); +f('47197','47198','47199','47200'); +f('47201','47202','47203','47204'); +f('47205','47206','47207','47208'); +f('47209','47210','47211','47212'); +f('47213','47214','47215','47216'); +f('47217','47218','47219','47220'); +f('47221','47222','47223','47224'); +f('47225','47226','47227','47228'); +f('47229','47230','47231','47232'); +f('47233','47234','47235','47236'); +f('47237','47238','47239','47240'); +f('47241','47242','47243','47244'); +f('47245','47246','47247','47248'); +f('47249','47250','47251','47252'); +f('47253','47254','47255','47256'); +f('47257','47258','47259','47260'); +f('47261','47262','47263','47264'); +f('47265','47266','47267','47268'); +f('47269','47270','47271','47272'); +f('47273','47274','47275','47276'); +f('47277','47278','47279','47280'); +f('47281','47282','47283','47284'); +f('47285','47286','47287','47288'); +f('47289','47290','47291','47292'); +f('47293','47294','47295','47296'); +f('47297','47298','47299','47300'); +f('47301','47302','47303','47304'); +f('47305','47306','47307','47308'); +f('47309','47310','47311','47312'); +f('47313','47314','47315','47316'); +f('47317','47318','47319','47320'); +f('47321','47322','47323','47324'); +f('47325','47326','47327','47328'); +f('47329','47330','47331','47332'); +f('47333','47334','47335','47336'); +f('47337','47338','47339','47340'); +f('47341','47342','47343','47344'); +f('47345','47346','47347','47348'); +f('47349','47350','47351','47352'); +f('47353','47354','47355','47356'); +f('47357','47358','47359','47360'); +f('47361','47362','47363','47364'); +f('47365','47366','47367','47368'); +f('47369','47370','47371','47372'); +f('47373','47374','47375','47376'); +f('47377','47378','47379','47380'); +f('47381','47382','47383','47384'); +f('47385','47386','47387','47388'); +f('47389','47390','47391','47392'); +f('47393','47394','47395','47396'); +f('47397','47398','47399','47400'); +f('47401','47402','47403','47404'); +f('47405','47406','47407','47408'); +f('47409','47410','47411','47412'); +f('47413','47414','47415','47416'); +f('47417','47418','47419','47420'); +f('47421','47422','47423','47424'); +f('47425','47426','47427','47428'); +f('47429','47430','47431','47432'); +f('47433','47434','47435','47436'); +f('47437','47438','47439','47440'); +f('47441','47442','47443','47444'); +f('47445','47446','47447','47448'); +f('47449','47450','47451','47452'); +f('47453','47454','47455','47456'); +f('47457','47458','47459','47460'); +f('47461','47462','47463','47464'); +f('47465','47466','47467','47468'); +f('47469','47470','47471','47472'); +f('47473','47474','47475','47476'); +f('47477','47478','47479','47480'); +f('47481','47482','47483','47484'); +f('47485','47486','47487','47488'); +f('47489','47490','47491','47492'); +f('47493','47494','47495','47496'); +f('47497','47498','47499','47500'); +f('47501','47502','47503','47504'); +f('47505','47506','47507','47508'); +f('47509','47510','47511','47512'); +f('47513','47514','47515','47516'); +f('47517','47518','47519','47520'); +f('47521','47522','47523','47524'); +f('47525','47526','47527','47528'); +f('47529','47530','47531','47532'); +f('47533','47534','47535','47536'); +f('47537','47538','47539','47540'); +f('47541','47542','47543','47544'); +f('47545','47546','47547','47548'); +f('47549','47550','47551','47552'); +f('47553','47554','47555','47556'); +f('47557','47558','47559','47560'); +f('47561','47562','47563','47564'); +f('47565','47566','47567','47568'); +f('47569','47570','47571','47572'); +f('47573','47574','47575','47576'); +f('47577','47578','47579','47580'); +f('47581','47582','47583','47584'); +f('47585','47586','47587','47588'); +f('47589','47590','47591','47592'); +f('47593','47594','47595','47596'); +f('47597','47598','47599','47600'); +f('47601','47602','47603','47604'); +f('47605','47606','47607','47608'); +f('47609','47610','47611','47612'); +f('47613','47614','47615','47616'); +f('47617','47618','47619','47620'); +f('47621','47622','47623','47624'); +f('47625','47626','47627','47628'); +f('47629','47630','47631','47632'); +f('47633','47634','47635','47636'); +f('47637','47638','47639','47640'); +f('47641','47642','47643','47644'); +f('47645','47646','47647','47648'); +f('47649','47650','47651','47652'); +f('47653','47654','47655','47656'); +f('47657','47658','47659','47660'); +f('47661','47662','47663','47664'); +f('47665','47666','47667','47668'); +f('47669','47670','47671','47672'); +f('47673','47674','47675','47676'); +f('47677','47678','47679','47680'); +f('47681','47682','47683','47684'); +f('47685','47686','47687','47688'); +f('47689','47690','47691','47692'); +f('47693','47694','47695','47696'); +f('47697','47698','47699','47700'); +f('47701','47702','47703','47704'); +f('47705','47706','47707','47708'); +f('47709','47710','47711','47712'); +f('47713','47714','47715','47716'); +f('47717','47718','47719','47720'); +f('47721','47722','47723','47724'); +f('47725','47726','47727','47728'); +f('47729','47730','47731','47732'); +f('47733','47734','47735','47736'); +f('47737','47738','47739','47740'); +f('47741','47742','47743','47744'); +f('47745','47746','47747','47748'); +f('47749','47750','47751','47752'); +f('47753','47754','47755','47756'); +f('47757','47758','47759','47760'); +f('47761','47762','47763','47764'); +f('47765','47766','47767','47768'); +f('47769','47770','47771','47772'); +f('47773','47774','47775','47776'); +f('47777','47778','47779','47780'); +f('47781','47782','47783','47784'); +f('47785','47786','47787','47788'); +f('47789','47790','47791','47792'); +f('47793','47794','47795','47796'); +f('47797','47798','47799','47800'); +f('47801','47802','47803','47804'); +f('47805','47806','47807','47808'); +f('47809','47810','47811','47812'); +f('47813','47814','47815','47816'); +f('47817','47818','47819','47820'); +f('47821','47822','47823','47824'); +f('47825','47826','47827','47828'); +f('47829','47830','47831','47832'); +f('47833','47834','47835','47836'); +f('47837','47838','47839','47840'); +f('47841','47842','47843','47844'); +f('47845','47846','47847','47848'); +f('47849','47850','47851','47852'); +f('47853','47854','47855','47856'); +f('47857','47858','47859','47860'); +f('47861','47862','47863','47864'); +f('47865','47866','47867','47868'); +f('47869','47870','47871','47872'); +f('47873','47874','47875','47876'); +f('47877','47878','47879','47880'); +f('47881','47882','47883','47884'); +f('47885','47886','47887','47888'); +f('47889','47890','47891','47892'); +f('47893','47894','47895','47896'); +f('47897','47898','47899','47900'); +f('47901','47902','47903','47904'); +f('47905','47906','47907','47908'); +f('47909','47910','47911','47912'); +f('47913','47914','47915','47916'); +f('47917','47918','47919','47920'); +f('47921','47922','47923','47924'); +f('47925','47926','47927','47928'); +f('47929','47930','47931','47932'); +f('47933','47934','47935','47936'); +f('47937','47938','47939','47940'); +f('47941','47942','47943','47944'); +f('47945','47946','47947','47948'); +f('47949','47950','47951','47952'); +f('47953','47954','47955','47956'); +f('47957','47958','47959','47960'); +f('47961','47962','47963','47964'); +f('47965','47966','47967','47968'); +f('47969','47970','47971','47972'); +f('47973','47974','47975','47976'); +f('47977','47978','47979','47980'); +f('47981','47982','47983','47984'); +f('47985','47986','47987','47988'); +f('47989','47990','47991','47992'); +f('47993','47994','47995','47996'); +f('47997','47998','47999','48000'); +f('48001','48002','48003','48004'); +f('48005','48006','48007','48008'); +f('48009','48010','48011','48012'); +f('48013','48014','48015','48016'); +f('48017','48018','48019','48020'); +f('48021','48022','48023','48024'); +f('48025','48026','48027','48028'); +f('48029','48030','48031','48032'); +f('48033','48034','48035','48036'); +f('48037','48038','48039','48040'); +f('48041','48042','48043','48044'); +f('48045','48046','48047','48048'); +f('48049','48050','48051','48052'); +f('48053','48054','48055','48056'); +f('48057','48058','48059','48060'); +f('48061','48062','48063','48064'); +f('48065','48066','48067','48068'); +f('48069','48070','48071','48072'); +f('48073','48074','48075','48076'); +f('48077','48078','48079','48080'); +f('48081','48082','48083','48084'); +f('48085','48086','48087','48088'); +f('48089','48090','48091','48092'); +f('48093','48094','48095','48096'); +f('48097','48098','48099','48100'); +f('48101','48102','48103','48104'); +f('48105','48106','48107','48108'); +f('48109','48110','48111','48112'); +f('48113','48114','48115','48116'); +f('48117','48118','48119','48120'); +f('48121','48122','48123','48124'); +f('48125','48126','48127','48128'); +f('48129','48130','48131','48132'); +f('48133','48134','48135','48136'); +f('48137','48138','48139','48140'); +f('48141','48142','48143','48144'); +f('48145','48146','48147','48148'); +f('48149','48150','48151','48152'); +f('48153','48154','48155','48156'); +f('48157','48158','48159','48160'); +f('48161','48162','48163','48164'); +f('48165','48166','48167','48168'); +f('48169','48170','48171','48172'); +f('48173','48174','48175','48176'); +f('48177','48178','48179','48180'); +f('48181','48182','48183','48184'); +f('48185','48186','48187','48188'); +f('48189','48190','48191','48192'); +f('48193','48194','48195','48196'); +f('48197','48198','48199','48200'); +f('48201','48202','48203','48204'); +f('48205','48206','48207','48208'); +f('48209','48210','48211','48212'); +f('48213','48214','48215','48216'); +f('48217','48218','48219','48220'); +f('48221','48222','48223','48224'); +f('48225','48226','48227','48228'); +f('48229','48230','48231','48232'); +f('48233','48234','48235','48236'); +f('48237','48238','48239','48240'); +f('48241','48242','48243','48244'); +f('48245','48246','48247','48248'); +f('48249','48250','48251','48252'); +f('48253','48254','48255','48256'); +f('48257','48258','48259','48260'); +f('48261','48262','48263','48264'); +f('48265','48266','48267','48268'); +f('48269','48270','48271','48272'); +f('48273','48274','48275','48276'); +f('48277','48278','48279','48280'); +f('48281','48282','48283','48284'); +f('48285','48286','48287','48288'); +f('48289','48290','48291','48292'); +f('48293','48294','48295','48296'); +f('48297','48298','48299','48300'); +f('48301','48302','48303','48304'); +f('48305','48306','48307','48308'); +f('48309','48310','48311','48312'); +f('48313','48314','48315','48316'); +f('48317','48318','48319','48320'); +f('48321','48322','48323','48324'); +f('48325','48326','48327','48328'); +f('48329','48330','48331','48332'); +f('48333','48334','48335','48336'); +f('48337','48338','48339','48340'); +f('48341','48342','48343','48344'); +f('48345','48346','48347','48348'); +f('48349','48350','48351','48352'); +f('48353','48354','48355','48356'); +f('48357','48358','48359','48360'); +f('48361','48362','48363','48364'); +f('48365','48366','48367','48368'); +f('48369','48370','48371','48372'); +f('48373','48374','48375','48376'); +f('48377','48378','48379','48380'); +f('48381','48382','48383','48384'); +f('48385','48386','48387','48388'); +f('48389','48390','48391','48392'); +f('48393','48394','48395','48396'); +f('48397','48398','48399','48400'); +f('48401','48402','48403','48404'); +f('48405','48406','48407','48408'); +f('48409','48410','48411','48412'); +f('48413','48414','48415','48416'); +f('48417','48418','48419','48420'); +f('48421','48422','48423','48424'); +f('48425','48426','48427','48428'); +f('48429','48430','48431','48432'); +f('48433','48434','48435','48436'); +f('48437','48438','48439','48440'); +f('48441','48442','48443','48444'); +f('48445','48446','48447','48448'); +f('48449','48450','48451','48452'); +f('48453','48454','48455','48456'); +f('48457','48458','48459','48460'); +f('48461','48462','48463','48464'); +f('48465','48466','48467','48468'); +f('48469','48470','48471','48472'); +f('48473','48474','48475','48476'); +f('48477','48478','48479','48480'); +f('48481','48482','48483','48484'); +f('48485','48486','48487','48488'); +f('48489','48490','48491','48492'); +f('48493','48494','48495','48496'); +f('48497','48498','48499','48500'); +f('48501','48502','48503','48504'); +f('48505','48506','48507','48508'); +f('48509','48510','48511','48512'); +f('48513','48514','48515','48516'); +f('48517','48518','48519','48520'); +f('48521','48522','48523','48524'); +f('48525','48526','48527','48528'); +f('48529','48530','48531','48532'); +f('48533','48534','48535','48536'); +f('48537','48538','48539','48540'); +f('48541','48542','48543','48544'); +f('48545','48546','48547','48548'); +f('48549','48550','48551','48552'); +f('48553','48554','48555','48556'); +f('48557','48558','48559','48560'); +f('48561','48562','48563','48564'); +f('48565','48566','48567','48568'); +f('48569','48570','48571','48572'); +f('48573','48574','48575','48576'); +f('48577','48578','48579','48580'); +f('48581','48582','48583','48584'); +f('48585','48586','48587','48588'); +f('48589','48590','48591','48592'); +f('48593','48594','48595','48596'); +f('48597','48598','48599','48600'); +f('48601','48602','48603','48604'); +f('48605','48606','48607','48608'); +f('48609','48610','48611','48612'); +f('48613','48614','48615','48616'); +f('48617','48618','48619','48620'); +f('48621','48622','48623','48624'); +f('48625','48626','48627','48628'); +f('48629','48630','48631','48632'); +f('48633','48634','48635','48636'); +f('48637','48638','48639','48640'); +f('48641','48642','48643','48644'); +f('48645','48646','48647','48648'); +f('48649','48650','48651','48652'); +f('48653','48654','48655','48656'); +f('48657','48658','48659','48660'); +f('48661','48662','48663','48664'); +f('48665','48666','48667','48668'); +f('48669','48670','48671','48672'); +f('48673','48674','48675','48676'); +f('48677','48678','48679','48680'); +f('48681','48682','48683','48684'); +f('48685','48686','48687','48688'); +f('48689','48690','48691','48692'); +f('48693','48694','48695','48696'); +f('48697','48698','48699','48700'); +f('48701','48702','48703','48704'); +f('48705','48706','48707','48708'); +f('48709','48710','48711','48712'); +f('48713','48714','48715','48716'); +f('48717','48718','48719','48720'); +f('48721','48722','48723','48724'); +f('48725','48726','48727','48728'); +f('48729','48730','48731','48732'); +f('48733','48734','48735','48736'); +f('48737','48738','48739','48740'); +f('48741','48742','48743','48744'); +f('48745','48746','48747','48748'); +f('48749','48750','48751','48752'); +f('48753','48754','48755','48756'); +f('48757','48758','48759','48760'); +f('48761','48762','48763','48764'); +f('48765','48766','48767','48768'); +f('48769','48770','48771','48772'); +f('48773','48774','48775','48776'); +f('48777','48778','48779','48780'); +f('48781','48782','48783','48784'); +f('48785','48786','48787','48788'); +f('48789','48790','48791','48792'); +f('48793','48794','48795','48796'); +f('48797','48798','48799','48800'); +f('48801','48802','48803','48804'); +f('48805','48806','48807','48808'); +f('48809','48810','48811','48812'); +f('48813','48814','48815','48816'); +f('48817','48818','48819','48820'); +f('48821','48822','48823','48824'); +f('48825','48826','48827','48828'); +f('48829','48830','48831','48832'); +f('48833','48834','48835','48836'); +f('48837','48838','48839','48840'); +f('48841','48842','48843','48844'); +f('48845','48846','48847','48848'); +f('48849','48850','48851','48852'); +f('48853','48854','48855','48856'); +f('48857','48858','48859','48860'); +f('48861','48862','48863','48864'); +f('48865','48866','48867','48868'); +f('48869','48870','48871','48872'); +f('48873','48874','48875','48876'); +f('48877','48878','48879','48880'); +f('48881','48882','48883','48884'); +f('48885','48886','48887','48888'); +f('48889','48890','48891','48892'); +f('48893','48894','48895','48896'); +f('48897','48898','48899','48900'); +f('48901','48902','48903','48904'); +f('48905','48906','48907','48908'); +f('48909','48910','48911','48912'); +f('48913','48914','48915','48916'); +f('48917','48918','48919','48920'); +f('48921','48922','48923','48924'); +f('48925','48926','48927','48928'); +f('48929','48930','48931','48932'); +f('48933','48934','48935','48936'); +f('48937','48938','48939','48940'); +f('48941','48942','48943','48944'); +f('48945','48946','48947','48948'); +f('48949','48950','48951','48952'); +f('48953','48954','48955','48956'); +f('48957','48958','48959','48960'); +f('48961','48962','48963','48964'); +f('48965','48966','48967','48968'); +f('48969','48970','48971','48972'); +f('48973','48974','48975','48976'); +f('48977','48978','48979','48980'); +f('48981','48982','48983','48984'); +f('48985','48986','48987','48988'); +f('48989','48990','48991','48992'); +f('48993','48994','48995','48996'); +f('48997','48998','48999','49000'); +f('49001','49002','49003','49004'); +f('49005','49006','49007','49008'); +f('49009','49010','49011','49012'); +f('49013','49014','49015','49016'); +f('49017','49018','49019','49020'); +f('49021','49022','49023','49024'); +f('49025','49026','49027','49028'); +f('49029','49030','49031','49032'); +f('49033','49034','49035','49036'); +f('49037','49038','49039','49040'); +f('49041','49042','49043','49044'); +f('49045','49046','49047','49048'); +f('49049','49050','49051','49052'); +f('49053','49054','49055','49056'); +f('49057','49058','49059','49060'); +f('49061','49062','49063','49064'); +f('49065','49066','49067','49068'); +f('49069','49070','49071','49072'); +f('49073','49074','49075','49076'); +f('49077','49078','49079','49080'); +f('49081','49082','49083','49084'); +f('49085','49086','49087','49088'); +f('49089','49090','49091','49092'); +f('49093','49094','49095','49096'); +f('49097','49098','49099','49100'); +f('49101','49102','49103','49104'); +f('49105','49106','49107','49108'); +f('49109','49110','49111','49112'); +f('49113','49114','49115','49116'); +f('49117','49118','49119','49120'); +f('49121','49122','49123','49124'); +f('49125','49126','49127','49128'); +f('49129','49130','49131','49132'); +f('49133','49134','49135','49136'); +f('49137','49138','49139','49140'); +f('49141','49142','49143','49144'); +f('49145','49146','49147','49148'); +f('49149','49150','49151','49152'); +f('49153','49154','49155','49156'); +f('49157','49158','49159','49160'); +f('49161','49162','49163','49164'); +f('49165','49166','49167','49168'); +f('49169','49170','49171','49172'); +f('49173','49174','49175','49176'); +f('49177','49178','49179','49180'); +f('49181','49182','49183','49184'); +f('49185','49186','49187','49188'); +f('49189','49190','49191','49192'); +f('49193','49194','49195','49196'); +f('49197','49198','49199','49200'); +f('49201','49202','49203','49204'); +f('49205','49206','49207','49208'); +f('49209','49210','49211','49212'); +f('49213','49214','49215','49216'); +f('49217','49218','49219','49220'); +f('49221','49222','49223','49224'); +f('49225','49226','49227','49228'); +f('49229','49230','49231','49232'); +f('49233','49234','49235','49236'); +f('49237','49238','49239','49240'); +f('49241','49242','49243','49244'); +f('49245','49246','49247','49248'); +f('49249','49250','49251','49252'); +f('49253','49254','49255','49256'); +f('49257','49258','49259','49260'); +f('49261','49262','49263','49264'); +f('49265','49266','49267','49268'); +f('49269','49270','49271','49272'); +f('49273','49274','49275','49276'); +f('49277','49278','49279','49280'); +f('49281','49282','49283','49284'); +f('49285','49286','49287','49288'); +f('49289','49290','49291','49292'); +f('49293','49294','49295','49296'); +f('49297','49298','49299','49300'); +f('49301','49302','49303','49304'); +f('49305','49306','49307','49308'); +f('49309','49310','49311','49312'); +f('49313','49314','49315','49316'); +f('49317','49318','49319','49320'); +f('49321','49322','49323','49324'); +f('49325','49326','49327','49328'); +f('49329','49330','49331','49332'); +f('49333','49334','49335','49336'); +f('49337','49338','49339','49340'); +f('49341','49342','49343','49344'); +f('49345','49346','49347','49348'); +f('49349','49350','49351','49352'); +f('49353','49354','49355','49356'); +f('49357','49358','49359','49360'); +f('49361','49362','49363','49364'); +f('49365','49366','49367','49368'); +f('49369','49370','49371','49372'); +f('49373','49374','49375','49376'); +f('49377','49378','49379','49380'); +f('49381','49382','49383','49384'); +f('49385','49386','49387','49388'); +f('49389','49390','49391','49392'); +f('49393','49394','49395','49396'); +f('49397','49398','49399','49400'); +f('49401','49402','49403','49404'); +f('49405','49406','49407','49408'); +f('49409','49410','49411','49412'); +f('49413','49414','49415','49416'); +f('49417','49418','49419','49420'); +f('49421','49422','49423','49424'); +f('49425','49426','49427','49428'); +f('49429','49430','49431','49432'); +f('49433','49434','49435','49436'); +f('49437','49438','49439','49440'); +f('49441','49442','49443','49444'); +f('49445','49446','49447','49448'); +f('49449','49450','49451','49452'); +f('49453','49454','49455','49456'); +f('49457','49458','49459','49460'); +f('49461','49462','49463','49464'); +f('49465','49466','49467','49468'); +f('49469','49470','49471','49472'); +f('49473','49474','49475','49476'); +f('49477','49478','49479','49480'); +f('49481','49482','49483','49484'); +f('49485','49486','49487','49488'); +f('49489','49490','49491','49492'); +f('49493','49494','49495','49496'); +f('49497','49498','49499','49500'); +f('49501','49502','49503','49504'); +f('49505','49506','49507','49508'); +f('49509','49510','49511','49512'); +f('49513','49514','49515','49516'); +f('49517','49518','49519','49520'); +f('49521','49522','49523','49524'); +f('49525','49526','49527','49528'); +f('49529','49530','49531','49532'); +f('49533','49534','49535','49536'); +f('49537','49538','49539','49540'); +f('49541','49542','49543','49544'); +f('49545','49546','49547','49548'); +f('49549','49550','49551','49552'); +f('49553','49554','49555','49556'); +f('49557','49558','49559','49560'); +f('49561','49562','49563','49564'); +f('49565','49566','49567','49568'); +f('49569','49570','49571','49572'); +f('49573','49574','49575','49576'); +f('49577','49578','49579','49580'); +f('49581','49582','49583','49584'); +f('49585','49586','49587','49588'); +f('49589','49590','49591','49592'); +f('49593','49594','49595','49596'); +f('49597','49598','49599','49600'); +f('49601','49602','49603','49604'); +f('49605','49606','49607','49608'); +f('49609','49610','49611','49612'); +f('49613','49614','49615','49616'); +f('49617','49618','49619','49620'); +f('49621','49622','49623','49624'); +f('49625','49626','49627','49628'); +f('49629','49630','49631','49632'); +f('49633','49634','49635','49636'); +f('49637','49638','49639','49640'); +f('49641','49642','49643','49644'); +f('49645','49646','49647','49648'); +f('49649','49650','49651','49652'); +f('49653','49654','49655','49656'); +f('49657','49658','49659','49660'); +f('49661','49662','49663','49664'); +f('49665','49666','49667','49668'); +f('49669','49670','49671','49672'); +f('49673','49674','49675','49676'); +f('49677','49678','49679','49680'); +f('49681','49682','49683','49684'); +f('49685','49686','49687','49688'); +f('49689','49690','49691','49692'); +f('49693','49694','49695','49696'); +f('49697','49698','49699','49700'); +f('49701','49702','49703','49704'); +f('49705','49706','49707','49708'); +f('49709','49710','49711','49712'); +f('49713','49714','49715','49716'); +f('49717','49718','49719','49720'); +f('49721','49722','49723','49724'); +f('49725','49726','49727','49728'); +f('49729','49730','49731','49732'); +f('49733','49734','49735','49736'); +f('49737','49738','49739','49740'); +f('49741','49742','49743','49744'); +f('49745','49746','49747','49748'); +f('49749','49750','49751','49752'); +f('49753','49754','49755','49756'); +f('49757','49758','49759','49760'); +f('49761','49762','49763','49764'); +f('49765','49766','49767','49768'); +f('49769','49770','49771','49772'); +f('49773','49774','49775','49776'); +f('49777','49778','49779','49780'); +f('49781','49782','49783','49784'); +f('49785','49786','49787','49788'); +f('49789','49790','49791','49792'); +f('49793','49794','49795','49796'); +f('49797','49798','49799','49800'); +f('49801','49802','49803','49804'); +f('49805','49806','49807','49808'); +f('49809','49810','49811','49812'); +f('49813','49814','49815','49816'); +f('49817','49818','49819','49820'); +f('49821','49822','49823','49824'); +f('49825','49826','49827','49828'); +f('49829','49830','49831','49832'); +f('49833','49834','49835','49836'); +f('49837','49838','49839','49840'); +f('49841','49842','49843','49844'); +f('49845','49846','49847','49848'); +f('49849','49850','49851','49852'); +f('49853','49854','49855','49856'); +f('49857','49858','49859','49860'); +f('49861','49862','49863','49864'); +f('49865','49866','49867','49868'); +f('49869','49870','49871','49872'); +f('49873','49874','49875','49876'); +f('49877','49878','49879','49880'); +f('49881','49882','49883','49884'); +f('49885','49886','49887','49888'); +f('49889','49890','49891','49892'); +f('49893','49894','49895','49896'); +f('49897','49898','49899','49900'); +f('49901','49902','49903','49904'); +f('49905','49906','49907','49908'); +f('49909','49910','49911','49912'); +f('49913','49914','49915','49916'); +f('49917','49918','49919','49920'); +f('49921','49922','49923','49924'); +f('49925','49926','49927','49928'); +f('49929','49930','49931','49932'); +f('49933','49934','49935','49936'); +f('49937','49938','49939','49940'); +f('49941','49942','49943','49944'); +f('49945','49946','49947','49948'); +f('49949','49950','49951','49952'); +f('49953','49954','49955','49956'); +f('49957','49958','49959','49960'); +f('49961','49962','49963','49964'); +f('49965','49966','49967','49968'); +f('49969','49970','49971','49972'); +f('49973','49974','49975','49976'); +f('49977','49978','49979','49980'); +f('49981','49982','49983','49984'); +f('49985','49986','49987','49988'); +f('49989','49990','49991','49992'); +f('49993','49994','49995','49996'); +f('49997','49998','49999','50000'); +f('50001','50002','50003','50004'); +f('50005','50006','50007','50008'); +f('50009','50010','50011','50012'); +f('50013','50014','50015','50016'); +f('50017','50018','50019','50020'); +f('50021','50022','50023','50024'); +f('50025','50026','50027','50028'); +f('50029','50030','50031','50032'); +f('50033','50034','50035','50036'); +f('50037','50038','50039','50040'); +f('50041','50042','50043','50044'); +f('50045','50046','50047','50048'); +f('50049','50050','50051','50052'); +f('50053','50054','50055','50056'); +f('50057','50058','50059','50060'); +f('50061','50062','50063','50064'); +f('50065','50066','50067','50068'); +f('50069','50070','50071','50072'); +f('50073','50074','50075','50076'); +f('50077','50078','50079','50080'); +f('50081','50082','50083','50084'); +f('50085','50086','50087','50088'); +f('50089','50090','50091','50092'); +f('50093','50094','50095','50096'); +f('50097','50098','50099','50100'); +f('50101','50102','50103','50104'); +f('50105','50106','50107','50108'); +f('50109','50110','50111','50112'); +f('50113','50114','50115','50116'); +f('50117','50118','50119','50120'); +f('50121','50122','50123','50124'); +f('50125','50126','50127','50128'); +f('50129','50130','50131','50132'); +f('50133','50134','50135','50136'); +f('50137','50138','50139','50140'); +f('50141','50142','50143','50144'); +f('50145','50146','50147','50148'); +f('50149','50150','50151','50152'); +f('50153','50154','50155','50156'); +f('50157','50158','50159','50160'); +f('50161','50162','50163','50164'); +f('50165','50166','50167','50168'); +f('50169','50170','50171','50172'); +f('50173','50174','50175','50176'); +f('50177','50178','50179','50180'); +f('50181','50182','50183','50184'); +f('50185','50186','50187','50188'); +f('50189','50190','50191','50192'); +f('50193','50194','50195','50196'); +f('50197','50198','50199','50200'); +f('50201','50202','50203','50204'); +f('50205','50206','50207','50208'); +f('50209','50210','50211','50212'); +f('50213','50214','50215','50216'); +f('50217','50218','50219','50220'); +f('50221','50222','50223','50224'); +f('50225','50226','50227','50228'); +f('50229','50230','50231','50232'); +f('50233','50234','50235','50236'); +f('50237','50238','50239','50240'); +f('50241','50242','50243','50244'); +f('50245','50246','50247','50248'); +f('50249','50250','50251','50252'); +f('50253','50254','50255','50256'); +f('50257','50258','50259','50260'); +f('50261','50262','50263','50264'); +f('50265','50266','50267','50268'); +f('50269','50270','50271','50272'); +f('50273','50274','50275','50276'); +f('50277','50278','50279','50280'); +f('50281','50282','50283','50284'); +f('50285','50286','50287','50288'); +f('50289','50290','50291','50292'); +f('50293','50294','50295','50296'); +f('50297','50298','50299','50300'); +f('50301','50302','50303','50304'); +f('50305','50306','50307','50308'); +f('50309','50310','50311','50312'); +f('50313','50314','50315','50316'); +f('50317','50318','50319','50320'); +f('50321','50322','50323','50324'); +f('50325','50326','50327','50328'); +f('50329','50330','50331','50332'); +f('50333','50334','50335','50336'); +f('50337','50338','50339','50340'); +f('50341','50342','50343','50344'); +f('50345','50346','50347','50348'); +f('50349','50350','50351','50352'); +f('50353','50354','50355','50356'); +f('50357','50358','50359','50360'); +f('50361','50362','50363','50364'); +f('50365','50366','50367','50368'); +f('50369','50370','50371','50372'); +f('50373','50374','50375','50376'); +f('50377','50378','50379','50380'); +f('50381','50382','50383','50384'); +f('50385','50386','50387','50388'); +f('50389','50390','50391','50392'); +f('50393','50394','50395','50396'); +f('50397','50398','50399','50400'); +f('50401','50402','50403','50404'); +f('50405','50406','50407','50408'); +f('50409','50410','50411','50412'); +f('50413','50414','50415','50416'); +f('50417','50418','50419','50420'); +f('50421','50422','50423','50424'); +f('50425','50426','50427','50428'); +f('50429','50430','50431','50432'); +f('50433','50434','50435','50436'); +f('50437','50438','50439','50440'); +f('50441','50442','50443','50444'); +f('50445','50446','50447','50448'); +f('50449','50450','50451','50452'); +f('50453','50454','50455','50456'); +f('50457','50458','50459','50460'); +f('50461','50462','50463','50464'); +f('50465','50466','50467','50468'); +f('50469','50470','50471','50472'); +f('50473','50474','50475','50476'); +f('50477','50478','50479','50480'); +f('50481','50482','50483','50484'); +f('50485','50486','50487','50488'); +f('50489','50490','50491','50492'); +f('50493','50494','50495','50496'); +f('50497','50498','50499','50500'); +f('50501','50502','50503','50504'); +f('50505','50506','50507','50508'); +f('50509','50510','50511','50512'); +f('50513','50514','50515','50516'); +f('50517','50518','50519','50520'); +f('50521','50522','50523','50524'); +f('50525','50526','50527','50528'); +f('50529','50530','50531','50532'); +f('50533','50534','50535','50536'); +f('50537','50538','50539','50540'); +f('50541','50542','50543','50544'); +f('50545','50546','50547','50548'); +f('50549','50550','50551','50552'); +f('50553','50554','50555','50556'); +f('50557','50558','50559','50560'); +f('50561','50562','50563','50564'); +f('50565','50566','50567','50568'); +f('50569','50570','50571','50572'); +f('50573','50574','50575','50576'); +f('50577','50578','50579','50580'); +f('50581','50582','50583','50584'); +f('50585','50586','50587','50588'); +f('50589','50590','50591','50592'); +f('50593','50594','50595','50596'); +f('50597','50598','50599','50600'); +f('50601','50602','50603','50604'); +f('50605','50606','50607','50608'); +f('50609','50610','50611','50612'); +f('50613','50614','50615','50616'); +f('50617','50618','50619','50620'); +f('50621','50622','50623','50624'); +f('50625','50626','50627','50628'); +f('50629','50630','50631','50632'); +f('50633','50634','50635','50636'); +f('50637','50638','50639','50640'); +f('50641','50642','50643','50644'); +f('50645','50646','50647','50648'); +f('50649','50650','50651','50652'); +f('50653','50654','50655','50656'); +f('50657','50658','50659','50660'); +f('50661','50662','50663','50664'); +f('50665','50666','50667','50668'); +f('50669','50670','50671','50672'); +f('50673','50674','50675','50676'); +f('50677','50678','50679','50680'); +f('50681','50682','50683','50684'); +f('50685','50686','50687','50688'); +f('50689','50690','50691','50692'); +f('50693','50694','50695','50696'); +f('50697','50698','50699','50700'); +f('50701','50702','50703','50704'); +f('50705','50706','50707','50708'); +f('50709','50710','50711','50712'); +f('50713','50714','50715','50716'); +f('50717','50718','50719','50720'); +f('50721','50722','50723','50724'); +f('50725','50726','50727','50728'); +f('50729','50730','50731','50732'); +f('50733','50734','50735','50736'); +f('50737','50738','50739','50740'); +f('50741','50742','50743','50744'); +f('50745','50746','50747','50748'); +f('50749','50750','50751','50752'); +f('50753','50754','50755','50756'); +f('50757','50758','50759','50760'); +f('50761','50762','50763','50764'); +f('50765','50766','50767','50768'); +f('50769','50770','50771','50772'); +f('50773','50774','50775','50776'); +f('50777','50778','50779','50780'); +f('50781','50782','50783','50784'); +f('50785','50786','50787','50788'); +f('50789','50790','50791','50792'); +f('50793','50794','50795','50796'); +f('50797','50798','50799','50800'); +f('50801','50802','50803','50804'); +f('50805','50806','50807','50808'); +f('50809','50810','50811','50812'); +f('50813','50814','50815','50816'); +f('50817','50818','50819','50820'); +f('50821','50822','50823','50824'); +f('50825','50826','50827','50828'); +f('50829','50830','50831','50832'); +f('50833','50834','50835','50836'); +f('50837','50838','50839','50840'); +f('50841','50842','50843','50844'); +f('50845','50846','50847','50848'); +f('50849','50850','50851','50852'); +f('50853','50854','50855','50856'); +f('50857','50858','50859','50860'); +f('50861','50862','50863','50864'); +f('50865','50866','50867','50868'); +f('50869','50870','50871','50872'); +f('50873','50874','50875','50876'); +f('50877','50878','50879','50880'); +f('50881','50882','50883','50884'); +f('50885','50886','50887','50888'); +f('50889','50890','50891','50892'); +f('50893','50894','50895','50896'); +f('50897','50898','50899','50900'); +f('50901','50902','50903','50904'); +f('50905','50906','50907','50908'); +f('50909','50910','50911','50912'); +f('50913','50914','50915','50916'); +f('50917','50918','50919','50920'); +f('50921','50922','50923','50924'); +f('50925','50926','50927','50928'); +f('50929','50930','50931','50932'); +f('50933','50934','50935','50936'); +f('50937','50938','50939','50940'); +f('50941','50942','50943','50944'); +f('50945','50946','50947','50948'); +f('50949','50950','50951','50952'); +f('50953','50954','50955','50956'); +f('50957','50958','50959','50960'); +f('50961','50962','50963','50964'); +f('50965','50966','50967','50968'); +f('50969','50970','50971','50972'); +f('50973','50974','50975','50976'); +f('50977','50978','50979','50980'); +f('50981','50982','50983','50984'); +f('50985','50986','50987','50988'); +f('50989','50990','50991','50992'); +f('50993','50994','50995','50996'); +f('50997','50998','50999','51000'); +f('51001','51002','51003','51004'); +f('51005','51006','51007','51008'); +f('51009','51010','51011','51012'); +f('51013','51014','51015','51016'); +f('51017','51018','51019','51020'); +f('51021','51022','51023','51024'); +f('51025','51026','51027','51028'); +f('51029','51030','51031','51032'); +f('51033','51034','51035','51036'); +f('51037','51038','51039','51040'); +f('51041','51042','51043','51044'); +f('51045','51046','51047','51048'); +f('51049','51050','51051','51052'); +f('51053','51054','51055','51056'); +f('51057','51058','51059','51060'); +f('51061','51062','51063','51064'); +f('51065','51066','51067','51068'); +f('51069','51070','51071','51072'); +f('51073','51074','51075','51076'); +f('51077','51078','51079','51080'); +f('51081','51082','51083','51084'); +f('51085','51086','51087','51088'); +f('51089','51090','51091','51092'); +f('51093','51094','51095','51096'); +f('51097','51098','51099','51100'); +f('51101','51102','51103','51104'); +f('51105','51106','51107','51108'); +f('51109','51110','51111','51112'); +f('51113','51114','51115','51116'); +f('51117','51118','51119','51120'); +f('51121','51122','51123','51124'); +f('51125','51126','51127','51128'); +f('51129','51130','51131','51132'); +f('51133','51134','51135','51136'); +f('51137','51138','51139','51140'); +f('51141','51142','51143','51144'); +f('51145','51146','51147','51148'); +f('51149','51150','51151','51152'); +f('51153','51154','51155','51156'); +f('51157','51158','51159','51160'); +f('51161','51162','51163','51164'); +f('51165','51166','51167','51168'); +f('51169','51170','51171','51172'); +f('51173','51174','51175','51176'); +f('51177','51178','51179','51180'); +f('51181','51182','51183','51184'); +f('51185','51186','51187','51188'); +f('51189','51190','51191','51192'); +f('51193','51194','51195','51196'); +f('51197','51198','51199','51200'); +f('51201','51202','51203','51204'); +f('51205','51206','51207','51208'); +f('51209','51210','51211','51212'); +f('51213','51214','51215','51216'); +f('51217','51218','51219','51220'); +f('51221','51222','51223','51224'); +f('51225','51226','51227','51228'); +f('51229','51230','51231','51232'); +f('51233','51234','51235','51236'); +f('51237','51238','51239','51240'); +f('51241','51242','51243','51244'); +f('51245','51246','51247','51248'); +f('51249','51250','51251','51252'); +f('51253','51254','51255','51256'); +f('51257','51258','51259','51260'); +f('51261','51262','51263','51264'); +f('51265','51266','51267','51268'); +f('51269','51270','51271','51272'); +f('51273','51274','51275','51276'); +f('51277','51278','51279','51280'); +f('51281','51282','51283','51284'); +f('51285','51286','51287','51288'); +f('51289','51290','51291','51292'); +f('51293','51294','51295','51296'); +f('51297','51298','51299','51300'); +f('51301','51302','51303','51304'); +f('51305','51306','51307','51308'); +f('51309','51310','51311','51312'); +f('51313','51314','51315','51316'); +f('51317','51318','51319','51320'); +f('51321','51322','51323','51324'); +f('51325','51326','51327','51328'); +f('51329','51330','51331','51332'); +f('51333','51334','51335','51336'); +f('51337','51338','51339','51340'); +f('51341','51342','51343','51344'); +f('51345','51346','51347','51348'); +f('51349','51350','51351','51352'); +f('51353','51354','51355','51356'); +f('51357','51358','51359','51360'); +f('51361','51362','51363','51364'); +f('51365','51366','51367','51368'); +f('51369','51370','51371','51372'); +f('51373','51374','51375','51376'); +f('51377','51378','51379','51380'); +f('51381','51382','51383','51384'); +f('51385','51386','51387','51388'); +f('51389','51390','51391','51392'); +f('51393','51394','51395','51396'); +f('51397','51398','51399','51400'); +f('51401','51402','51403','51404'); +f('51405','51406','51407','51408'); +f('51409','51410','51411','51412'); +f('51413','51414','51415','51416'); +f('51417','51418','51419','51420'); +f('51421','51422','51423','51424'); +f('51425','51426','51427','51428'); +f('51429','51430','51431','51432'); +f('51433','51434','51435','51436'); +f('51437','51438','51439','51440'); +f('51441','51442','51443','51444'); +f('51445','51446','51447','51448'); +f('51449','51450','51451','51452'); +f('51453','51454','51455','51456'); +f('51457','51458','51459','51460'); +f('51461','51462','51463','51464'); +f('51465','51466','51467','51468'); +f('51469','51470','51471','51472'); +f('51473','51474','51475','51476'); +f('51477','51478','51479','51480'); +f('51481','51482','51483','51484'); +f('51485','51486','51487','51488'); +f('51489','51490','51491','51492'); +f('51493','51494','51495','51496'); +f('51497','51498','51499','51500'); +f('51501','51502','51503','51504'); +f('51505','51506','51507','51508'); +f('51509','51510','51511','51512'); +f('51513','51514','51515','51516'); +f('51517','51518','51519','51520'); +f('51521','51522','51523','51524'); +f('51525','51526','51527','51528'); +f('51529','51530','51531','51532'); +f('51533','51534','51535','51536'); +f('51537','51538','51539','51540'); +f('51541','51542','51543','51544'); +f('51545','51546','51547','51548'); +f('51549','51550','51551','51552'); +f('51553','51554','51555','51556'); +f('51557','51558','51559','51560'); +f('51561','51562','51563','51564'); +f('51565','51566','51567','51568'); +f('51569','51570','51571','51572'); +f('51573','51574','51575','51576'); +f('51577','51578','51579','51580'); +f('51581','51582','51583','51584'); +f('51585','51586','51587','51588'); +f('51589','51590','51591','51592'); +f('51593','51594','51595','51596'); +f('51597','51598','51599','51600'); +f('51601','51602','51603','51604'); +f('51605','51606','51607','51608'); +f('51609','51610','51611','51612'); +f('51613','51614','51615','51616'); +f('51617','51618','51619','51620'); +f('51621','51622','51623','51624'); +f('51625','51626','51627','51628'); +f('51629','51630','51631','51632'); +f('51633','51634','51635','51636'); +f('51637','51638','51639','51640'); +f('51641','51642','51643','51644'); +f('51645','51646','51647','51648'); +f('51649','51650','51651','51652'); +f('51653','51654','51655','51656'); +f('51657','51658','51659','51660'); +f('51661','51662','51663','51664'); +f('51665','51666','51667','51668'); +f('51669','51670','51671','51672'); +f('51673','51674','51675','51676'); +f('51677','51678','51679','51680'); +f('51681','51682','51683','51684'); +f('51685','51686','51687','51688'); +f('51689','51690','51691','51692'); +f('51693','51694','51695','51696'); +f('51697','51698','51699','51700'); +f('51701','51702','51703','51704'); +f('51705','51706','51707','51708'); +f('51709','51710','51711','51712'); +f('51713','51714','51715','51716'); +f('51717','51718','51719','51720'); +f('51721','51722','51723','51724'); +f('51725','51726','51727','51728'); +f('51729','51730','51731','51732'); +f('51733','51734','51735','51736'); +f('51737','51738','51739','51740'); +f('51741','51742','51743','51744'); +f('51745','51746','51747','51748'); +f('51749','51750','51751','51752'); +f('51753','51754','51755','51756'); +f('51757','51758','51759','51760'); +f('51761','51762','51763','51764'); +f('51765','51766','51767','51768'); +f('51769','51770','51771','51772'); +f('51773','51774','51775','51776'); +f('51777','51778','51779','51780'); +f('51781','51782','51783','51784'); +f('51785','51786','51787','51788'); +f('51789','51790','51791','51792'); +f('51793','51794','51795','51796'); +f('51797','51798','51799','51800'); +f('51801','51802','51803','51804'); +f('51805','51806','51807','51808'); +f('51809','51810','51811','51812'); +f('51813','51814','51815','51816'); +f('51817','51818','51819','51820'); +f('51821','51822','51823','51824'); +f('51825','51826','51827','51828'); +f('51829','51830','51831','51832'); +f('51833','51834','51835','51836'); +f('51837','51838','51839','51840'); +f('51841','51842','51843','51844'); +f('51845','51846','51847','51848'); +f('51849','51850','51851','51852'); +f('51853','51854','51855','51856'); +f('51857','51858','51859','51860'); +f('51861','51862','51863','51864'); +f('51865','51866','51867','51868'); +f('51869','51870','51871','51872'); +f('51873','51874','51875','51876'); +f('51877','51878','51879','51880'); +f('51881','51882','51883','51884'); +f('51885','51886','51887','51888'); +f('51889','51890','51891','51892'); +f('51893','51894','51895','51896'); +f('51897','51898','51899','51900'); +f('51901','51902','51903','51904'); +f('51905','51906','51907','51908'); +f('51909','51910','51911','51912'); +f('51913','51914','51915','51916'); +f('51917','51918','51919','51920'); +f('51921','51922','51923','51924'); +f('51925','51926','51927','51928'); +f('51929','51930','51931','51932'); +f('51933','51934','51935','51936'); +f('51937','51938','51939','51940'); +f('51941','51942','51943','51944'); +f('51945','51946','51947','51948'); +f('51949','51950','51951','51952'); +f('51953','51954','51955','51956'); +f('51957','51958','51959','51960'); +f('51961','51962','51963','51964'); +f('51965','51966','51967','51968'); +f('51969','51970','51971','51972'); +f('51973','51974','51975','51976'); +f('51977','51978','51979','51980'); +f('51981','51982','51983','51984'); +f('51985','51986','51987','51988'); +f('51989','51990','51991','51992'); +f('51993','51994','51995','51996'); +f('51997','51998','51999','52000'); +f('52001','52002','52003','52004'); +f('52005','52006','52007','52008'); +f('52009','52010','52011','52012'); +f('52013','52014','52015','52016'); +f('52017','52018','52019','52020'); +f('52021','52022','52023','52024'); +f('52025','52026','52027','52028'); +f('52029','52030','52031','52032'); +f('52033','52034','52035','52036'); +f('52037','52038','52039','52040'); +f('52041','52042','52043','52044'); +f('52045','52046','52047','52048'); +f('52049','52050','52051','52052'); +f('52053','52054','52055','52056'); +f('52057','52058','52059','52060'); +f('52061','52062','52063','52064'); +f('52065','52066','52067','52068'); +f('52069','52070','52071','52072'); +f('52073','52074','52075','52076'); +f('52077','52078','52079','52080'); +f('52081','52082','52083','52084'); +f('52085','52086','52087','52088'); +f('52089','52090','52091','52092'); +f('52093','52094','52095','52096'); +f('52097','52098','52099','52100'); +f('52101','52102','52103','52104'); +f('52105','52106','52107','52108'); +f('52109','52110','52111','52112'); +f('52113','52114','52115','52116'); +f('52117','52118','52119','52120'); +f('52121','52122','52123','52124'); +f('52125','52126','52127','52128'); +f('52129','52130','52131','52132'); +f('52133','52134','52135','52136'); +f('52137','52138','52139','52140'); +f('52141','52142','52143','52144'); +f('52145','52146','52147','52148'); +f('52149','52150','52151','52152'); +f('52153','52154','52155','52156'); +f('52157','52158','52159','52160'); +f('52161','52162','52163','52164'); +f('52165','52166','52167','52168'); +f('52169','52170','52171','52172'); +f('52173','52174','52175','52176'); +f('52177','52178','52179','52180'); +f('52181','52182','52183','52184'); +f('52185','52186','52187','52188'); +f('52189','52190','52191','52192'); +f('52193','52194','52195','52196'); +f('52197','52198','52199','52200'); +f('52201','52202','52203','52204'); +f('52205','52206','52207','52208'); +f('52209','52210','52211','52212'); +f('52213','52214','52215','52216'); +f('52217','52218','52219','52220'); +f('52221','52222','52223','52224'); +f('52225','52226','52227','52228'); +f('52229','52230','52231','52232'); +f('52233','52234','52235','52236'); +f('52237','52238','52239','52240'); +f('52241','52242','52243','52244'); +f('52245','52246','52247','52248'); +f('52249','52250','52251','52252'); +f('52253','52254','52255','52256'); +f('52257','52258','52259','52260'); +f('52261','52262','52263','52264'); +f('52265','52266','52267','52268'); +f('52269','52270','52271','52272'); +f('52273','52274','52275','52276'); +f('52277','52278','52279','52280'); +f('52281','52282','52283','52284'); +f('52285','52286','52287','52288'); +f('52289','52290','52291','52292'); +f('52293','52294','52295','52296'); +f('52297','52298','52299','52300'); +f('52301','52302','52303','52304'); +f('52305','52306','52307','52308'); +f('52309','52310','52311','52312'); +f('52313','52314','52315','52316'); +f('52317','52318','52319','52320'); +f('52321','52322','52323','52324'); +f('52325','52326','52327','52328'); +f('52329','52330','52331','52332'); +f('52333','52334','52335','52336'); +f('52337','52338','52339','52340'); +f('52341','52342','52343','52344'); +f('52345','52346','52347','52348'); +f('52349','52350','52351','52352'); +f('52353','52354','52355','52356'); +f('52357','52358','52359','52360'); +f('52361','52362','52363','52364'); +f('52365','52366','52367','52368'); +f('52369','52370','52371','52372'); +f('52373','52374','52375','52376'); +f('52377','52378','52379','52380'); +f('52381','52382','52383','52384'); +f('52385','52386','52387','52388'); +f('52389','52390','52391','52392'); +f('52393','52394','52395','52396'); +f('52397','52398','52399','52400'); +f('52401','52402','52403','52404'); +f('52405','52406','52407','52408'); +f('52409','52410','52411','52412'); +f('52413','52414','52415','52416'); +f('52417','52418','52419','52420'); +f('52421','52422','52423','52424'); +f('52425','52426','52427','52428'); +f('52429','52430','52431','52432'); +f('52433','52434','52435','52436'); +f('52437','52438','52439','52440'); +f('52441','52442','52443','52444'); +f('52445','52446','52447','52448'); +f('52449','52450','52451','52452'); +f('52453','52454','52455','52456'); +f('52457','52458','52459','52460'); +f('52461','52462','52463','52464'); +f('52465','52466','52467','52468'); +f('52469','52470','52471','52472'); +f('52473','52474','52475','52476'); +f('52477','52478','52479','52480'); +f('52481','52482','52483','52484'); +f('52485','52486','52487','52488'); +f('52489','52490','52491','52492'); +f('52493','52494','52495','52496'); +f('52497','52498','52499','52500'); +f('52501','52502','52503','52504'); +f('52505','52506','52507','52508'); +f('52509','52510','52511','52512'); +f('52513','52514','52515','52516'); +f('52517','52518','52519','52520'); +f('52521','52522','52523','52524'); +f('52525','52526','52527','52528'); +f('52529','52530','52531','52532'); +f('52533','52534','52535','52536'); +f('52537','52538','52539','52540'); +f('52541','52542','52543','52544'); +f('52545','52546','52547','52548'); +f('52549','52550','52551','52552'); +f('52553','52554','52555','52556'); +f('52557','52558','52559','52560'); +f('52561','52562','52563','52564'); +f('52565','52566','52567','52568'); +f('52569','52570','52571','52572'); +f('52573','52574','52575','52576'); +f('52577','52578','52579','52580'); +f('52581','52582','52583','52584'); +f('52585','52586','52587','52588'); +f('52589','52590','52591','52592'); +f('52593','52594','52595','52596'); +f('52597','52598','52599','52600'); +f('52601','52602','52603','52604'); +f('52605','52606','52607','52608'); +f('52609','52610','52611','52612'); +f('52613','52614','52615','52616'); +f('52617','52618','52619','52620'); +f('52621','52622','52623','52624'); +f('52625','52626','52627','52628'); +f('52629','52630','52631','52632'); +f('52633','52634','52635','52636'); +f('52637','52638','52639','52640'); +f('52641','52642','52643','52644'); +f('52645','52646','52647','52648'); +f('52649','52650','52651','52652'); +f('52653','52654','52655','52656'); +f('52657','52658','52659','52660'); +f('52661','52662','52663','52664'); +f('52665','52666','52667','52668'); +f('52669','52670','52671','52672'); +f('52673','52674','52675','52676'); +f('52677','52678','52679','52680'); +f('52681','52682','52683','52684'); +f('52685','52686','52687','52688'); +f('52689','52690','52691','52692'); +f('52693','52694','52695','52696'); +f('52697','52698','52699','52700'); +f('52701','52702','52703','52704'); +f('52705','52706','52707','52708'); +f('52709','52710','52711','52712'); +f('52713','52714','52715','52716'); +f('52717','52718','52719','52720'); +f('52721','52722','52723','52724'); +f('52725','52726','52727','52728'); +f('52729','52730','52731','52732'); +f('52733','52734','52735','52736'); +f('52737','52738','52739','52740'); +f('52741','52742','52743','52744'); +f('52745','52746','52747','52748'); +f('52749','52750','52751','52752'); +f('52753','52754','52755','52756'); +f('52757','52758','52759','52760'); +f('52761','52762','52763','52764'); +f('52765','52766','52767','52768'); +f('52769','52770','52771','52772'); +f('52773','52774','52775','52776'); +f('52777','52778','52779','52780'); +f('52781','52782','52783','52784'); +f('52785','52786','52787','52788'); +f('52789','52790','52791','52792'); +f('52793','52794','52795','52796'); +f('52797','52798','52799','52800'); +f('52801','52802','52803','52804'); +f('52805','52806','52807','52808'); +f('52809','52810','52811','52812'); +f('52813','52814','52815','52816'); +f('52817','52818','52819','52820'); +f('52821','52822','52823','52824'); +f('52825','52826','52827','52828'); +f('52829','52830','52831','52832'); +f('52833','52834','52835','52836'); +f('52837','52838','52839','52840'); +f('52841','52842','52843','52844'); +f('52845','52846','52847','52848'); +f('52849','52850','52851','52852'); +f('52853','52854','52855','52856'); +f('52857','52858','52859','52860'); +f('52861','52862','52863','52864'); +f('52865','52866','52867','52868'); +f('52869','52870','52871','52872'); +f('52873','52874','52875','52876'); +f('52877','52878','52879','52880'); +f('52881','52882','52883','52884'); +f('52885','52886','52887','52888'); +f('52889','52890','52891','52892'); +f('52893','52894','52895','52896'); +f('52897','52898','52899','52900'); +f('52901','52902','52903','52904'); +f('52905','52906','52907','52908'); +f('52909','52910','52911','52912'); +f('52913','52914','52915','52916'); +f('52917','52918','52919','52920'); +f('52921','52922','52923','52924'); +f('52925','52926','52927','52928'); +f('52929','52930','52931','52932'); +f('52933','52934','52935','52936'); +f('52937','52938','52939','52940'); +f('52941','52942','52943','52944'); +f('52945','52946','52947','52948'); +f('52949','52950','52951','52952'); +f('52953','52954','52955','52956'); +f('52957','52958','52959','52960'); +f('52961','52962','52963','52964'); +f('52965','52966','52967','52968'); +f('52969','52970','52971','52972'); +f('52973','52974','52975','52976'); +f('52977','52978','52979','52980'); +f('52981','52982','52983','52984'); +f('52985','52986','52987','52988'); +f('52989','52990','52991','52992'); +f('52993','52994','52995','52996'); +f('52997','52998','52999','53000'); +f('53001','53002','53003','53004'); +f('53005','53006','53007','53008'); +f('53009','53010','53011','53012'); +f('53013','53014','53015','53016'); +f('53017','53018','53019','53020'); +f('53021','53022','53023','53024'); +f('53025','53026','53027','53028'); +f('53029','53030','53031','53032'); +f('53033','53034','53035','53036'); +f('53037','53038','53039','53040'); +f('53041','53042','53043','53044'); +f('53045','53046','53047','53048'); +f('53049','53050','53051','53052'); +f('53053','53054','53055','53056'); +f('53057','53058','53059','53060'); +f('53061','53062','53063','53064'); +f('53065','53066','53067','53068'); +f('53069','53070','53071','53072'); +f('53073','53074','53075','53076'); +f('53077','53078','53079','53080'); +f('53081','53082','53083','53084'); +f('53085','53086','53087','53088'); +f('53089','53090','53091','53092'); +f('53093','53094','53095','53096'); +f('53097','53098','53099','53100'); +f('53101','53102','53103','53104'); +f('53105','53106','53107','53108'); +f('53109','53110','53111','53112'); +f('53113','53114','53115','53116'); +f('53117','53118','53119','53120'); +f('53121','53122','53123','53124'); +f('53125','53126','53127','53128'); +f('53129','53130','53131','53132'); +f('53133','53134','53135','53136'); +f('53137','53138','53139','53140'); +f('53141','53142','53143','53144'); +f('53145','53146','53147','53148'); +f('53149','53150','53151','53152'); +f('53153','53154','53155','53156'); +f('53157','53158','53159','53160'); +f('53161','53162','53163','53164'); +f('53165','53166','53167','53168'); +f('53169','53170','53171','53172'); +f('53173','53174','53175','53176'); +f('53177','53178','53179','53180'); +f('53181','53182','53183','53184'); +f('53185','53186','53187','53188'); +f('53189','53190','53191','53192'); +f('53193','53194','53195','53196'); +f('53197','53198','53199','53200'); +f('53201','53202','53203','53204'); +f('53205','53206','53207','53208'); +f('53209','53210','53211','53212'); +f('53213','53214','53215','53216'); +f('53217','53218','53219','53220'); +f('53221','53222','53223','53224'); +f('53225','53226','53227','53228'); +f('53229','53230','53231','53232'); +f('53233','53234','53235','53236'); +f('53237','53238','53239','53240'); +f('53241','53242','53243','53244'); +f('53245','53246','53247','53248'); +f('53249','53250','53251','53252'); +f('53253','53254','53255','53256'); +f('53257','53258','53259','53260'); +f('53261','53262','53263','53264'); +f('53265','53266','53267','53268'); +f('53269','53270','53271','53272'); +f('53273','53274','53275','53276'); +f('53277','53278','53279','53280'); +f('53281','53282','53283','53284'); +f('53285','53286','53287','53288'); +f('53289','53290','53291','53292'); +f('53293','53294','53295','53296'); +f('53297','53298','53299','53300'); +f('53301','53302','53303','53304'); +f('53305','53306','53307','53308'); +f('53309','53310','53311','53312'); +f('53313','53314','53315','53316'); +f('53317','53318','53319','53320'); +f('53321','53322','53323','53324'); +f('53325','53326','53327','53328'); +f('53329','53330','53331','53332'); +f('53333','53334','53335','53336'); +f('53337','53338','53339','53340'); +f('53341','53342','53343','53344'); +f('53345','53346','53347','53348'); +f('53349','53350','53351','53352'); +f('53353','53354','53355','53356'); +f('53357','53358','53359','53360'); +f('53361','53362','53363','53364'); +f('53365','53366','53367','53368'); +f('53369','53370','53371','53372'); +f('53373','53374','53375','53376'); +f('53377','53378','53379','53380'); +f('53381','53382','53383','53384'); +f('53385','53386','53387','53388'); +f('53389','53390','53391','53392'); +f('53393','53394','53395','53396'); +f('53397','53398','53399','53400'); +f('53401','53402','53403','53404'); +f('53405','53406','53407','53408'); +f('53409','53410','53411','53412'); +f('53413','53414','53415','53416'); +f('53417','53418','53419','53420'); +f('53421','53422','53423','53424'); +f('53425','53426','53427','53428'); +f('53429','53430','53431','53432'); +f('53433','53434','53435','53436'); +f('53437','53438','53439','53440'); +f('53441','53442','53443','53444'); +f('53445','53446','53447','53448'); +f('53449','53450','53451','53452'); +f('53453','53454','53455','53456'); +f('53457','53458','53459','53460'); +f('53461','53462','53463','53464'); +f('53465','53466','53467','53468'); +f('53469','53470','53471','53472'); +f('53473','53474','53475','53476'); +f('53477','53478','53479','53480'); +f('53481','53482','53483','53484'); +f('53485','53486','53487','53488'); +f('53489','53490','53491','53492'); +f('53493','53494','53495','53496'); +f('53497','53498','53499','53500'); +f('53501','53502','53503','53504'); +f('53505','53506','53507','53508'); +f('53509','53510','53511','53512'); +f('53513','53514','53515','53516'); +f('53517','53518','53519','53520'); +f('53521','53522','53523','53524'); +f('53525','53526','53527','53528'); +f('53529','53530','53531','53532'); +f('53533','53534','53535','53536'); +f('53537','53538','53539','53540'); +f('53541','53542','53543','53544'); +f('53545','53546','53547','53548'); +f('53549','53550','53551','53552'); +f('53553','53554','53555','53556'); +f('53557','53558','53559','53560'); +f('53561','53562','53563','53564'); +f('53565','53566','53567','53568'); +f('53569','53570','53571','53572'); +f('53573','53574','53575','53576'); +f('53577','53578','53579','53580'); +f('53581','53582','53583','53584'); +f('53585','53586','53587','53588'); +f('53589','53590','53591','53592'); +f('53593','53594','53595','53596'); +f('53597','53598','53599','53600'); +f('53601','53602','53603','53604'); +f('53605','53606','53607','53608'); +f('53609','53610','53611','53612'); +f('53613','53614','53615','53616'); +f('53617','53618','53619','53620'); +f('53621','53622','53623','53624'); +f('53625','53626','53627','53628'); +f('53629','53630','53631','53632'); +f('53633','53634','53635','53636'); +f('53637','53638','53639','53640'); +f('53641','53642','53643','53644'); +f('53645','53646','53647','53648'); +f('53649','53650','53651','53652'); +f('53653','53654','53655','53656'); +f('53657','53658','53659','53660'); +f('53661','53662','53663','53664'); +f('53665','53666','53667','53668'); +f('53669','53670','53671','53672'); +f('53673','53674','53675','53676'); +f('53677','53678','53679','53680'); +f('53681','53682','53683','53684'); +f('53685','53686','53687','53688'); +f('53689','53690','53691','53692'); +f('53693','53694','53695','53696'); +f('53697','53698','53699','53700'); +f('53701','53702','53703','53704'); +f('53705','53706','53707','53708'); +f('53709','53710','53711','53712'); +f('53713','53714','53715','53716'); +f('53717','53718','53719','53720'); +f('53721','53722','53723','53724'); +f('53725','53726','53727','53728'); +f('53729','53730','53731','53732'); +f('53733','53734','53735','53736'); +f('53737','53738','53739','53740'); +f('53741','53742','53743','53744'); +f('53745','53746','53747','53748'); +f('53749','53750','53751','53752'); +f('53753','53754','53755','53756'); +f('53757','53758','53759','53760'); +f('53761','53762','53763','53764'); +f('53765','53766','53767','53768'); +f('53769','53770','53771','53772'); +f('53773','53774','53775','53776'); +f('53777','53778','53779','53780'); +f('53781','53782','53783','53784'); +f('53785','53786','53787','53788'); +f('53789','53790','53791','53792'); +f('53793','53794','53795','53796'); +f('53797','53798','53799','53800'); +f('53801','53802','53803','53804'); +f('53805','53806','53807','53808'); +f('53809','53810','53811','53812'); +f('53813','53814','53815','53816'); +f('53817','53818','53819','53820'); +f('53821','53822','53823','53824'); +f('53825','53826','53827','53828'); +f('53829','53830','53831','53832'); +f('53833','53834','53835','53836'); +f('53837','53838','53839','53840'); +f('53841','53842','53843','53844'); +f('53845','53846','53847','53848'); +f('53849','53850','53851','53852'); +f('53853','53854','53855','53856'); +f('53857','53858','53859','53860'); +f('53861','53862','53863','53864'); +f('53865','53866','53867','53868'); +f('53869','53870','53871','53872'); +f('53873','53874','53875','53876'); +f('53877','53878','53879','53880'); +f('53881','53882','53883','53884'); +f('53885','53886','53887','53888'); +f('53889','53890','53891','53892'); +f('53893','53894','53895','53896'); +f('53897','53898','53899','53900'); +f('53901','53902','53903','53904'); +f('53905','53906','53907','53908'); +f('53909','53910','53911','53912'); +f('53913','53914','53915','53916'); +f('53917','53918','53919','53920'); +f('53921','53922','53923','53924'); +f('53925','53926','53927','53928'); +f('53929','53930','53931','53932'); +f('53933','53934','53935','53936'); +f('53937','53938','53939','53940'); +f('53941','53942','53943','53944'); +f('53945','53946','53947','53948'); +f('53949','53950','53951','53952'); +f('53953','53954','53955','53956'); +f('53957','53958','53959','53960'); +f('53961','53962','53963','53964'); +f('53965','53966','53967','53968'); +f('53969','53970','53971','53972'); +f('53973','53974','53975','53976'); +f('53977','53978','53979','53980'); +f('53981','53982','53983','53984'); +f('53985','53986','53987','53988'); +f('53989','53990','53991','53992'); +f('53993','53994','53995','53996'); +f('53997','53998','53999','54000'); +f('54001','54002','54003','54004'); +f('54005','54006','54007','54008'); +f('54009','54010','54011','54012'); +f('54013','54014','54015','54016'); +f('54017','54018','54019','54020'); +f('54021','54022','54023','54024'); +f('54025','54026','54027','54028'); +f('54029','54030','54031','54032'); +f('54033','54034','54035','54036'); +f('54037','54038','54039','54040'); +f('54041','54042','54043','54044'); +f('54045','54046','54047','54048'); +f('54049','54050','54051','54052'); +f('54053','54054','54055','54056'); +f('54057','54058','54059','54060'); +f('54061','54062','54063','54064'); +f('54065','54066','54067','54068'); +f('54069','54070','54071','54072'); +f('54073','54074','54075','54076'); +f('54077','54078','54079','54080'); +f('54081','54082','54083','54084'); +f('54085','54086','54087','54088'); +f('54089','54090','54091','54092'); +f('54093','54094','54095','54096'); +f('54097','54098','54099','54100'); +f('54101','54102','54103','54104'); +f('54105','54106','54107','54108'); +f('54109','54110','54111','54112'); +f('54113','54114','54115','54116'); +f('54117','54118','54119','54120'); +f('54121','54122','54123','54124'); +f('54125','54126','54127','54128'); +f('54129','54130','54131','54132'); +f('54133','54134','54135','54136'); +f('54137','54138','54139','54140'); +f('54141','54142','54143','54144'); +f('54145','54146','54147','54148'); +f('54149','54150','54151','54152'); +f('54153','54154','54155','54156'); +f('54157','54158','54159','54160'); +f('54161','54162','54163','54164'); +f('54165','54166','54167','54168'); +f('54169','54170','54171','54172'); +f('54173','54174','54175','54176'); +f('54177','54178','54179','54180'); +f('54181','54182','54183','54184'); +f('54185','54186','54187','54188'); +f('54189','54190','54191','54192'); +f('54193','54194','54195','54196'); +f('54197','54198','54199','54200'); +f('54201','54202','54203','54204'); +f('54205','54206','54207','54208'); +f('54209','54210','54211','54212'); +f('54213','54214','54215','54216'); +f('54217','54218','54219','54220'); +f('54221','54222','54223','54224'); +f('54225','54226','54227','54228'); +f('54229','54230','54231','54232'); +f('54233','54234','54235','54236'); +f('54237','54238','54239','54240'); +f('54241','54242','54243','54244'); +f('54245','54246','54247','54248'); +f('54249','54250','54251','54252'); +f('54253','54254','54255','54256'); +f('54257','54258','54259','54260'); +f('54261','54262','54263','54264'); +f('54265','54266','54267','54268'); +f('54269','54270','54271','54272'); +f('54273','54274','54275','54276'); +f('54277','54278','54279','54280'); +f('54281','54282','54283','54284'); +f('54285','54286','54287','54288'); +f('54289','54290','54291','54292'); +f('54293','54294','54295','54296'); +f('54297','54298','54299','54300'); +f('54301','54302','54303','54304'); +f('54305','54306','54307','54308'); +f('54309','54310','54311','54312'); +f('54313','54314','54315','54316'); +f('54317','54318','54319','54320'); +f('54321','54322','54323','54324'); +f('54325','54326','54327','54328'); +f('54329','54330','54331','54332'); +f('54333','54334','54335','54336'); +f('54337','54338','54339','54340'); +f('54341','54342','54343','54344'); +f('54345','54346','54347','54348'); +f('54349','54350','54351','54352'); +f('54353','54354','54355','54356'); +f('54357','54358','54359','54360'); +f('54361','54362','54363','54364'); +f('54365','54366','54367','54368'); +f('54369','54370','54371','54372'); +f('54373','54374','54375','54376'); +f('54377','54378','54379','54380'); +f('54381','54382','54383','54384'); +f('54385','54386','54387','54388'); +f('54389','54390','54391','54392'); +f('54393','54394','54395','54396'); +f('54397','54398','54399','54400'); +f('54401','54402','54403','54404'); +f('54405','54406','54407','54408'); +f('54409','54410','54411','54412'); +f('54413','54414','54415','54416'); +f('54417','54418','54419','54420'); +f('54421','54422','54423','54424'); +f('54425','54426','54427','54428'); +f('54429','54430','54431','54432'); +f('54433','54434','54435','54436'); +f('54437','54438','54439','54440'); +f('54441','54442','54443','54444'); +f('54445','54446','54447','54448'); +f('54449','54450','54451','54452'); +f('54453','54454','54455','54456'); +f('54457','54458','54459','54460'); +f('54461','54462','54463','54464'); +f('54465','54466','54467','54468'); +f('54469','54470','54471','54472'); +f('54473','54474','54475','54476'); +f('54477','54478','54479','54480'); +f('54481','54482','54483','54484'); +f('54485','54486','54487','54488'); +f('54489','54490','54491','54492'); +f('54493','54494','54495','54496'); +f('54497','54498','54499','54500'); +f('54501','54502','54503','54504'); +f('54505','54506','54507','54508'); +f('54509','54510','54511','54512'); +f('54513','54514','54515','54516'); +f('54517','54518','54519','54520'); +f('54521','54522','54523','54524'); +f('54525','54526','54527','54528'); +f('54529','54530','54531','54532'); +f('54533','54534','54535','54536'); +f('54537','54538','54539','54540'); +f('54541','54542','54543','54544'); +f('54545','54546','54547','54548'); +f('54549','54550','54551','54552'); +f('54553','54554','54555','54556'); +f('54557','54558','54559','54560'); +f('54561','54562','54563','54564'); +f('54565','54566','54567','54568'); +f('54569','54570','54571','54572'); +f('54573','54574','54575','54576'); +f('54577','54578','54579','54580'); +f('54581','54582','54583','54584'); +f('54585','54586','54587','54588'); +f('54589','54590','54591','54592'); +f('54593','54594','54595','54596'); +f('54597','54598','54599','54600'); +f('54601','54602','54603','54604'); +f('54605','54606','54607','54608'); +f('54609','54610','54611','54612'); +f('54613','54614','54615','54616'); +f('54617','54618','54619','54620'); +f('54621','54622','54623','54624'); +f('54625','54626','54627','54628'); +f('54629','54630','54631','54632'); +f('54633','54634','54635','54636'); +f('54637','54638','54639','54640'); +f('54641','54642','54643','54644'); +f('54645','54646','54647','54648'); +f('54649','54650','54651','54652'); +f('54653','54654','54655','54656'); +f('54657','54658','54659','54660'); +f('54661','54662','54663','54664'); +f('54665','54666','54667','54668'); +f('54669','54670','54671','54672'); +f('54673','54674','54675','54676'); +f('54677','54678','54679','54680'); +f('54681','54682','54683','54684'); +f('54685','54686','54687','54688'); +f('54689','54690','54691','54692'); +f('54693','54694','54695','54696'); +f('54697','54698','54699','54700'); +f('54701','54702','54703','54704'); +f('54705','54706','54707','54708'); +f('54709','54710','54711','54712'); +f('54713','54714','54715','54716'); +f('54717','54718','54719','54720'); +f('54721','54722','54723','54724'); +f('54725','54726','54727','54728'); +f('54729','54730','54731','54732'); +f('54733','54734','54735','54736'); +f('54737','54738','54739','54740'); +f('54741','54742','54743','54744'); +f('54745','54746','54747','54748'); +f('54749','54750','54751','54752'); +f('54753','54754','54755','54756'); +f('54757','54758','54759','54760'); +f('54761','54762','54763','54764'); +f('54765','54766','54767','54768'); +f('54769','54770','54771','54772'); +f('54773','54774','54775','54776'); +f('54777','54778','54779','54780'); +f('54781','54782','54783','54784'); +f('54785','54786','54787','54788'); +f('54789','54790','54791','54792'); +f('54793','54794','54795','54796'); +f('54797','54798','54799','54800'); +f('54801','54802','54803','54804'); +f('54805','54806','54807','54808'); +f('54809','54810','54811','54812'); +f('54813','54814','54815','54816'); +f('54817','54818','54819','54820'); +f('54821','54822','54823','54824'); +f('54825','54826','54827','54828'); +f('54829','54830','54831','54832'); +f('54833','54834','54835','54836'); +f('54837','54838','54839','54840'); +f('54841','54842','54843','54844'); +f('54845','54846','54847','54848'); +f('54849','54850','54851','54852'); +f('54853','54854','54855','54856'); +f('54857','54858','54859','54860'); +f('54861','54862','54863','54864'); +f('54865','54866','54867','54868'); +f('54869','54870','54871','54872'); +f('54873','54874','54875','54876'); +f('54877','54878','54879','54880'); +f('54881','54882','54883','54884'); +f('54885','54886','54887','54888'); +f('54889','54890','54891','54892'); +f('54893','54894','54895','54896'); +f('54897','54898','54899','54900'); +f('54901','54902','54903','54904'); +f('54905','54906','54907','54908'); +f('54909','54910','54911','54912'); +f('54913','54914','54915','54916'); +f('54917','54918','54919','54920'); +f('54921','54922','54923','54924'); +f('54925','54926','54927','54928'); +f('54929','54930','54931','54932'); +f('54933','54934','54935','54936'); +f('54937','54938','54939','54940'); +f('54941','54942','54943','54944'); +f('54945','54946','54947','54948'); +f('54949','54950','54951','54952'); +f('54953','54954','54955','54956'); +f('54957','54958','54959','54960'); +f('54961','54962','54963','54964'); +f('54965','54966','54967','54968'); +f('54969','54970','54971','54972'); +f('54973','54974','54975','54976'); +f('54977','54978','54979','54980'); +f('54981','54982','54983','54984'); +f('54985','54986','54987','54988'); +f('54989','54990','54991','54992'); +f('54993','54994','54995','54996'); +f('54997','54998','54999','55000'); +f('55001','55002','55003','55004'); +f('55005','55006','55007','55008'); +f('55009','55010','55011','55012'); +f('55013','55014','55015','55016'); +f('55017','55018','55019','55020'); +f('55021','55022','55023','55024'); +f('55025','55026','55027','55028'); +f('55029','55030','55031','55032'); +f('55033','55034','55035','55036'); +f('55037','55038','55039','55040'); +f('55041','55042','55043','55044'); +f('55045','55046','55047','55048'); +f('55049','55050','55051','55052'); +f('55053','55054','55055','55056'); +f('55057','55058','55059','55060'); +f('55061','55062','55063','55064'); +f('55065','55066','55067','55068'); +f('55069','55070','55071','55072'); +f('55073','55074','55075','55076'); +f('55077','55078','55079','55080'); +f('55081','55082','55083','55084'); +f('55085','55086','55087','55088'); +f('55089','55090','55091','55092'); +f('55093','55094','55095','55096'); +f('55097','55098','55099','55100'); +f('55101','55102','55103','55104'); +f('55105','55106','55107','55108'); +f('55109','55110','55111','55112'); +f('55113','55114','55115','55116'); +f('55117','55118','55119','55120'); +f('55121','55122','55123','55124'); +f('55125','55126','55127','55128'); +f('55129','55130','55131','55132'); +f('55133','55134','55135','55136'); +f('55137','55138','55139','55140'); +f('55141','55142','55143','55144'); +f('55145','55146','55147','55148'); +f('55149','55150','55151','55152'); +f('55153','55154','55155','55156'); +f('55157','55158','55159','55160'); +f('55161','55162','55163','55164'); +f('55165','55166','55167','55168'); +f('55169','55170','55171','55172'); +f('55173','55174','55175','55176'); +f('55177','55178','55179','55180'); +f('55181','55182','55183','55184'); +f('55185','55186','55187','55188'); +f('55189','55190','55191','55192'); +f('55193','55194','55195','55196'); +f('55197','55198','55199','55200'); +f('55201','55202','55203','55204'); +f('55205','55206','55207','55208'); +f('55209','55210','55211','55212'); +f('55213','55214','55215','55216'); +f('55217','55218','55219','55220'); +f('55221','55222','55223','55224'); +f('55225','55226','55227','55228'); +f('55229','55230','55231','55232'); +f('55233','55234','55235','55236'); +f('55237','55238','55239','55240'); +f('55241','55242','55243','55244'); +f('55245','55246','55247','55248'); +f('55249','55250','55251','55252'); +f('55253','55254','55255','55256'); +f('55257','55258','55259','55260'); +f('55261','55262','55263','55264'); +f('55265','55266','55267','55268'); +f('55269','55270','55271','55272'); +f('55273','55274','55275','55276'); +f('55277','55278','55279','55280'); +f('55281','55282','55283','55284'); +f('55285','55286','55287','55288'); +f('55289','55290','55291','55292'); +f('55293','55294','55295','55296'); +f('55297','55298','55299','55300'); +f('55301','55302','55303','55304'); +f('55305','55306','55307','55308'); +f('55309','55310','55311','55312'); +f('55313','55314','55315','55316'); +f('55317','55318','55319','55320'); +f('55321','55322','55323','55324'); +f('55325','55326','55327','55328'); +f('55329','55330','55331','55332'); +f('55333','55334','55335','55336'); +f('55337','55338','55339','55340'); +f('55341','55342','55343','55344'); +f('55345','55346','55347','55348'); +f('55349','55350','55351','55352'); +f('55353','55354','55355','55356'); +f('55357','55358','55359','55360'); +f('55361','55362','55363','55364'); +f('55365','55366','55367','55368'); +f('55369','55370','55371','55372'); +f('55373','55374','55375','55376'); +f('55377','55378','55379','55380'); +f('55381','55382','55383','55384'); +f('55385','55386','55387','55388'); +f('55389','55390','55391','55392'); +f('55393','55394','55395','55396'); +f('55397','55398','55399','55400'); +f('55401','55402','55403','55404'); +f('55405','55406','55407','55408'); +f('55409','55410','55411','55412'); +f('55413','55414','55415','55416'); +f('55417','55418','55419','55420'); +f('55421','55422','55423','55424'); +f('55425','55426','55427','55428'); +f('55429','55430','55431','55432'); +f('55433','55434','55435','55436'); +f('55437','55438','55439','55440'); +f('55441','55442','55443','55444'); +f('55445','55446','55447','55448'); +f('55449','55450','55451','55452'); +f('55453','55454','55455','55456'); +f('55457','55458','55459','55460'); +f('55461','55462','55463','55464'); +f('55465','55466','55467','55468'); +f('55469','55470','55471','55472'); +f('55473','55474','55475','55476'); +f('55477','55478','55479','55480'); +f('55481','55482','55483','55484'); +f('55485','55486','55487','55488'); +f('55489','55490','55491','55492'); +f('55493','55494','55495','55496'); +f('55497','55498','55499','55500'); +f('55501','55502','55503','55504'); +f('55505','55506','55507','55508'); +f('55509','55510','55511','55512'); +f('55513','55514','55515','55516'); +f('55517','55518','55519','55520'); +f('55521','55522','55523','55524'); +f('55525','55526','55527','55528'); +f('55529','55530','55531','55532'); +f('55533','55534','55535','55536'); +f('55537','55538','55539','55540'); +f('55541','55542','55543','55544'); +f('55545','55546','55547','55548'); +f('55549','55550','55551','55552'); +f('55553','55554','55555','55556'); +f('55557','55558','55559','55560'); +f('55561','55562','55563','55564'); +f('55565','55566','55567','55568'); +f('55569','55570','55571','55572'); +f('55573','55574','55575','55576'); +f('55577','55578','55579','55580'); +f('55581','55582','55583','55584'); +f('55585','55586','55587','55588'); +f('55589','55590','55591','55592'); +f('55593','55594','55595','55596'); +f('55597','55598','55599','55600'); +f('55601','55602','55603','55604'); +f('55605','55606','55607','55608'); +f('55609','55610','55611','55612'); +f('55613','55614','55615','55616'); +f('55617','55618','55619','55620'); +f('55621','55622','55623','55624'); +f('55625','55626','55627','55628'); +f('55629','55630','55631','55632'); +f('55633','55634','55635','55636'); +f('55637','55638','55639','55640'); +f('55641','55642','55643','55644'); +f('55645','55646','55647','55648'); +f('55649','55650','55651','55652'); +f('55653','55654','55655','55656'); +f('55657','55658','55659','55660'); +f('55661','55662','55663','55664'); +f('55665','55666','55667','55668'); +f('55669','55670','55671','55672'); +f('55673','55674','55675','55676'); +f('55677','55678','55679','55680'); +f('55681','55682','55683','55684'); +f('55685','55686','55687','55688'); +f('55689','55690','55691','55692'); +f('55693','55694','55695','55696'); +f('55697','55698','55699','55700'); +f('55701','55702','55703','55704'); +f('55705','55706','55707','55708'); +f('55709','55710','55711','55712'); +f('55713','55714','55715','55716'); +f('55717','55718','55719','55720'); +f('55721','55722','55723','55724'); +f('55725','55726','55727','55728'); +f('55729','55730','55731','55732'); +f('55733','55734','55735','55736'); +f('55737','55738','55739','55740'); +f('55741','55742','55743','55744'); +f('55745','55746','55747','55748'); +f('55749','55750','55751','55752'); +f('55753','55754','55755','55756'); +f('55757','55758','55759','55760'); +f('55761','55762','55763','55764'); +f('55765','55766','55767','55768'); +f('55769','55770','55771','55772'); +f('55773','55774','55775','55776'); +f('55777','55778','55779','55780'); +f('55781','55782','55783','55784'); +f('55785','55786','55787','55788'); +f('55789','55790','55791','55792'); +f('55793','55794','55795','55796'); +f('55797','55798','55799','55800'); +f('55801','55802','55803','55804'); +f('55805','55806','55807','55808'); +f('55809','55810','55811','55812'); +f('55813','55814','55815','55816'); +f('55817','55818','55819','55820'); +f('55821','55822','55823','55824'); +f('55825','55826','55827','55828'); +f('55829','55830','55831','55832'); +f('55833','55834','55835','55836'); +f('55837','55838','55839','55840'); +f('55841','55842','55843','55844'); +f('55845','55846','55847','55848'); +f('55849','55850','55851','55852'); +f('55853','55854','55855','55856'); +f('55857','55858','55859','55860'); +f('55861','55862','55863','55864'); +f('55865','55866','55867','55868'); +f('55869','55870','55871','55872'); +f('55873','55874','55875','55876'); +f('55877','55878','55879','55880'); +f('55881','55882','55883','55884'); +f('55885','55886','55887','55888'); +f('55889','55890','55891','55892'); +f('55893','55894','55895','55896'); +f('55897','55898','55899','55900'); +f('55901','55902','55903','55904'); +f('55905','55906','55907','55908'); +f('55909','55910','55911','55912'); +f('55913','55914','55915','55916'); +f('55917','55918','55919','55920'); +f('55921','55922','55923','55924'); +f('55925','55926','55927','55928'); +f('55929','55930','55931','55932'); +f('55933','55934','55935','55936'); +f('55937','55938','55939','55940'); +f('55941','55942','55943','55944'); +f('55945','55946','55947','55948'); +f('55949','55950','55951','55952'); +f('55953','55954','55955','55956'); +f('55957','55958','55959','55960'); +f('55961','55962','55963','55964'); +f('55965','55966','55967','55968'); +f('55969','55970','55971','55972'); +f('55973','55974','55975','55976'); +f('55977','55978','55979','55980'); +f('55981','55982','55983','55984'); +f('55985','55986','55987','55988'); +f('55989','55990','55991','55992'); +f('55993','55994','55995','55996'); +f('55997','55998','55999','56000'); +f('56001','56002','56003','56004'); +f('56005','56006','56007','56008'); +f('56009','56010','56011','56012'); +f('56013','56014','56015','56016'); +f('56017','56018','56019','56020'); +f('56021','56022','56023','56024'); +f('56025','56026','56027','56028'); +f('56029','56030','56031','56032'); +f('56033','56034','56035','56036'); +f('56037','56038','56039','56040'); +f('56041','56042','56043','56044'); +f('56045','56046','56047','56048'); +f('56049','56050','56051','56052'); +f('56053','56054','56055','56056'); +f('56057','56058','56059','56060'); +f('56061','56062','56063','56064'); +f('56065','56066','56067','56068'); +f('56069','56070','56071','56072'); +f('56073','56074','56075','56076'); +f('56077','56078','56079','56080'); +f('56081','56082','56083','56084'); +f('56085','56086','56087','56088'); +f('56089','56090','56091','56092'); +f('56093','56094','56095','56096'); +f('56097','56098','56099','56100'); +f('56101','56102','56103','56104'); +f('56105','56106','56107','56108'); +f('56109','56110','56111','56112'); +f('56113','56114','56115','56116'); +f('56117','56118','56119','56120'); +f('56121','56122','56123','56124'); +f('56125','56126','56127','56128'); +f('56129','56130','56131','56132'); +f('56133','56134','56135','56136'); +f('56137','56138','56139','56140'); +f('56141','56142','56143','56144'); +f('56145','56146','56147','56148'); +f('56149','56150','56151','56152'); +f('56153','56154','56155','56156'); +f('56157','56158','56159','56160'); +f('56161','56162','56163','56164'); +f('56165','56166','56167','56168'); +f('56169','56170','56171','56172'); +f('56173','56174','56175','56176'); +f('56177','56178','56179','56180'); +f('56181','56182','56183','56184'); +f('56185','56186','56187','56188'); +f('56189','56190','56191','56192'); +f('56193','56194','56195','56196'); +f('56197','56198','56199','56200'); +f('56201','56202','56203','56204'); +f('56205','56206','56207','56208'); +f('56209','56210','56211','56212'); +f('56213','56214','56215','56216'); +f('56217','56218','56219','56220'); +f('56221','56222','56223','56224'); +f('56225','56226','56227','56228'); +f('56229','56230','56231','56232'); +f('56233','56234','56235','56236'); +f('56237','56238','56239','56240'); +f('56241','56242','56243','56244'); +f('56245','56246','56247','56248'); +f('56249','56250','56251','56252'); +f('56253','56254','56255','56256'); +f('56257','56258','56259','56260'); +f('56261','56262','56263','56264'); +f('56265','56266','56267','56268'); +f('56269','56270','56271','56272'); +f('56273','56274','56275','56276'); +f('56277','56278','56279','56280'); +f('56281','56282','56283','56284'); +f('56285','56286','56287','56288'); +f('56289','56290','56291','56292'); +f('56293','56294','56295','56296'); +f('56297','56298','56299','56300'); +f('56301','56302','56303','56304'); +f('56305','56306','56307','56308'); +f('56309','56310','56311','56312'); +f('56313','56314','56315','56316'); +f('56317','56318','56319','56320'); +f('56321','56322','56323','56324'); +f('56325','56326','56327','56328'); +f('56329','56330','56331','56332'); +f('56333','56334','56335','56336'); +f('56337','56338','56339','56340'); +f('56341','56342','56343','56344'); +f('56345','56346','56347','56348'); +f('56349','56350','56351','56352'); +f('56353','56354','56355','56356'); +f('56357','56358','56359','56360'); +f('56361','56362','56363','56364'); +f('56365','56366','56367','56368'); +f('56369','56370','56371','56372'); +f('56373','56374','56375','56376'); +f('56377','56378','56379','56380'); +f('56381','56382','56383','56384'); +f('56385','56386','56387','56388'); +f('56389','56390','56391','56392'); +f('56393','56394','56395','56396'); +f('56397','56398','56399','56400'); +f('56401','56402','56403','56404'); +f('56405','56406','56407','56408'); +f('56409','56410','56411','56412'); +f('56413','56414','56415','56416'); +f('56417','56418','56419','56420'); +f('56421','56422','56423','56424'); +f('56425','56426','56427','56428'); +f('56429','56430','56431','56432'); +f('56433','56434','56435','56436'); +f('56437','56438','56439','56440'); +f('56441','56442','56443','56444'); +f('56445','56446','56447','56448'); +f('56449','56450','56451','56452'); +f('56453','56454','56455','56456'); +f('56457','56458','56459','56460'); +f('56461','56462','56463','56464'); +f('56465','56466','56467','56468'); +f('56469','56470','56471','56472'); +f('56473','56474','56475','56476'); +f('56477','56478','56479','56480'); +f('56481','56482','56483','56484'); +f('56485','56486','56487','56488'); +f('56489','56490','56491','56492'); +f('56493','56494','56495','56496'); +f('56497','56498','56499','56500'); +f('56501','56502','56503','56504'); +f('56505','56506','56507','56508'); +f('56509','56510','56511','56512'); +f('56513','56514','56515','56516'); +f('56517','56518','56519','56520'); +f('56521','56522','56523','56524'); +f('56525','56526','56527','56528'); +f('56529','56530','56531','56532'); +f('56533','56534','56535','56536'); +f('56537','56538','56539','56540'); +f('56541','56542','56543','56544'); +f('56545','56546','56547','56548'); +f('56549','56550','56551','56552'); +f('56553','56554','56555','56556'); +f('56557','56558','56559','56560'); +f('56561','56562','56563','56564'); +f('56565','56566','56567','56568'); +f('56569','56570','56571','56572'); +f('56573','56574','56575','56576'); +f('56577','56578','56579','56580'); +f('56581','56582','56583','56584'); +f('56585','56586','56587','56588'); +f('56589','56590','56591','56592'); +f('56593','56594','56595','56596'); +f('56597','56598','56599','56600'); +f('56601','56602','56603','56604'); +f('56605','56606','56607','56608'); +f('56609','56610','56611','56612'); +f('56613','56614','56615','56616'); +f('56617','56618','56619','56620'); +f('56621','56622','56623','56624'); +f('56625','56626','56627','56628'); +f('56629','56630','56631','56632'); +f('56633','56634','56635','56636'); +f('56637','56638','56639','56640'); +f('56641','56642','56643','56644'); +f('56645','56646','56647','56648'); +f('56649','56650','56651','56652'); +f('56653','56654','56655','56656'); +f('56657','56658','56659','56660'); +f('56661','56662','56663','56664'); +f('56665','56666','56667','56668'); +f('56669','56670','56671','56672'); +f('56673','56674','56675','56676'); +f('56677','56678','56679','56680'); +f('56681','56682','56683','56684'); +f('56685','56686','56687','56688'); +f('56689','56690','56691','56692'); +f('56693','56694','56695','56696'); +f('56697','56698','56699','56700'); +f('56701','56702','56703','56704'); +f('56705','56706','56707','56708'); +f('56709','56710','56711','56712'); +f('56713','56714','56715','56716'); +f('56717','56718','56719','56720'); +f('56721','56722','56723','56724'); +f('56725','56726','56727','56728'); +f('56729','56730','56731','56732'); +f('56733','56734','56735','56736'); +f('56737','56738','56739','56740'); +f('56741','56742','56743','56744'); +f('56745','56746','56747','56748'); +f('56749','56750','56751','56752'); +f('56753','56754','56755','56756'); +f('56757','56758','56759','56760'); +f('56761','56762','56763','56764'); +f('56765','56766','56767','56768'); +f('56769','56770','56771','56772'); +f('56773','56774','56775','56776'); +f('56777','56778','56779','56780'); +f('56781','56782','56783','56784'); +f('56785','56786','56787','56788'); +f('56789','56790','56791','56792'); +f('56793','56794','56795','56796'); +f('56797','56798','56799','56800'); +f('56801','56802','56803','56804'); +f('56805','56806','56807','56808'); +f('56809','56810','56811','56812'); +f('56813','56814','56815','56816'); +f('56817','56818','56819','56820'); +f('56821','56822','56823','56824'); +f('56825','56826','56827','56828'); +f('56829','56830','56831','56832'); +f('56833','56834','56835','56836'); +f('56837','56838','56839','56840'); +f('56841','56842','56843','56844'); +f('56845','56846','56847','56848'); +f('56849','56850','56851','56852'); +f('56853','56854','56855','56856'); +f('56857','56858','56859','56860'); +f('56861','56862','56863','56864'); +f('56865','56866','56867','56868'); +f('56869','56870','56871','56872'); +f('56873','56874','56875','56876'); +f('56877','56878','56879','56880'); +f('56881','56882','56883','56884'); +f('56885','56886','56887','56888'); +f('56889','56890','56891','56892'); +f('56893','56894','56895','56896'); +f('56897','56898','56899','56900'); +f('56901','56902','56903','56904'); +f('56905','56906','56907','56908'); +f('56909','56910','56911','56912'); +f('56913','56914','56915','56916'); +f('56917','56918','56919','56920'); +f('56921','56922','56923','56924'); +f('56925','56926','56927','56928'); +f('56929','56930','56931','56932'); +f('56933','56934','56935','56936'); +f('56937','56938','56939','56940'); +f('56941','56942','56943','56944'); +f('56945','56946','56947','56948'); +f('56949','56950','56951','56952'); +f('56953','56954','56955','56956'); +f('56957','56958','56959','56960'); +f('56961','56962','56963','56964'); +f('56965','56966','56967','56968'); +f('56969','56970','56971','56972'); +f('56973','56974','56975','56976'); +f('56977','56978','56979','56980'); +f('56981','56982','56983','56984'); +f('56985','56986','56987','56988'); +f('56989','56990','56991','56992'); +f('56993','56994','56995','56996'); +f('56997','56998','56999','57000'); +f('57001','57002','57003','57004'); +f('57005','57006','57007','57008'); +f('57009','57010','57011','57012'); +f('57013','57014','57015','57016'); +f('57017','57018','57019','57020'); +f('57021','57022','57023','57024'); +f('57025','57026','57027','57028'); +f('57029','57030','57031','57032'); +f('57033','57034','57035','57036'); +f('57037','57038','57039','57040'); +f('57041','57042','57043','57044'); +f('57045','57046','57047','57048'); +f('57049','57050','57051','57052'); +f('57053','57054','57055','57056'); +f('57057','57058','57059','57060'); +f('57061','57062','57063','57064'); +f('57065','57066','57067','57068'); +f('57069','57070','57071','57072'); +f('57073','57074','57075','57076'); +f('57077','57078','57079','57080'); +f('57081','57082','57083','57084'); +f('57085','57086','57087','57088'); +f('57089','57090','57091','57092'); +f('57093','57094','57095','57096'); +f('57097','57098','57099','57100'); +f('57101','57102','57103','57104'); +f('57105','57106','57107','57108'); +f('57109','57110','57111','57112'); +f('57113','57114','57115','57116'); +f('57117','57118','57119','57120'); +f('57121','57122','57123','57124'); +f('57125','57126','57127','57128'); +f('57129','57130','57131','57132'); +f('57133','57134','57135','57136'); +f('57137','57138','57139','57140'); +f('57141','57142','57143','57144'); +f('57145','57146','57147','57148'); +f('57149','57150','57151','57152'); +f('57153','57154','57155','57156'); +f('57157','57158','57159','57160'); +f('57161','57162','57163','57164'); +f('57165','57166','57167','57168'); +f('57169','57170','57171','57172'); +f('57173','57174','57175','57176'); +f('57177','57178','57179','57180'); +f('57181','57182','57183','57184'); +f('57185','57186','57187','57188'); +f('57189','57190','57191','57192'); +f('57193','57194','57195','57196'); +f('57197','57198','57199','57200'); +f('57201','57202','57203','57204'); +f('57205','57206','57207','57208'); +f('57209','57210','57211','57212'); +f('57213','57214','57215','57216'); +f('57217','57218','57219','57220'); +f('57221','57222','57223','57224'); +f('57225','57226','57227','57228'); +f('57229','57230','57231','57232'); +f('57233','57234','57235','57236'); +f('57237','57238','57239','57240'); +f('57241','57242','57243','57244'); +f('57245','57246','57247','57248'); +f('57249','57250','57251','57252'); +f('57253','57254','57255','57256'); +f('57257','57258','57259','57260'); +f('57261','57262','57263','57264'); +f('57265','57266','57267','57268'); +f('57269','57270','57271','57272'); +f('57273','57274','57275','57276'); +f('57277','57278','57279','57280'); +f('57281','57282','57283','57284'); +f('57285','57286','57287','57288'); +f('57289','57290','57291','57292'); +f('57293','57294','57295','57296'); +f('57297','57298','57299','57300'); +f('57301','57302','57303','57304'); +f('57305','57306','57307','57308'); +f('57309','57310','57311','57312'); +f('57313','57314','57315','57316'); +f('57317','57318','57319','57320'); +f('57321','57322','57323','57324'); +f('57325','57326','57327','57328'); +f('57329','57330','57331','57332'); +f('57333','57334','57335','57336'); +f('57337','57338','57339','57340'); +f('57341','57342','57343','57344'); +f('57345','57346','57347','57348'); +f('57349','57350','57351','57352'); +f('57353','57354','57355','57356'); +f('57357','57358','57359','57360'); +f('57361','57362','57363','57364'); +f('57365','57366','57367','57368'); +f('57369','57370','57371','57372'); +f('57373','57374','57375','57376'); +f('57377','57378','57379','57380'); +f('57381','57382','57383','57384'); +f('57385','57386','57387','57388'); +f('57389','57390','57391','57392'); +f('57393','57394','57395','57396'); +f('57397','57398','57399','57400'); +f('57401','57402','57403','57404'); +f('57405','57406','57407','57408'); +f('57409','57410','57411','57412'); +f('57413','57414','57415','57416'); +f('57417','57418','57419','57420'); +f('57421','57422','57423','57424'); +f('57425','57426','57427','57428'); +f('57429','57430','57431','57432'); +f('57433','57434','57435','57436'); +f('57437','57438','57439','57440'); +f('57441','57442','57443','57444'); +f('57445','57446','57447','57448'); +f('57449','57450','57451','57452'); +f('57453','57454','57455','57456'); +f('57457','57458','57459','57460'); +f('57461','57462','57463','57464'); +f('57465','57466','57467','57468'); +f('57469','57470','57471','57472'); +f('57473','57474','57475','57476'); +f('57477','57478','57479','57480'); +f('57481','57482','57483','57484'); +f('57485','57486','57487','57488'); +f('57489','57490','57491','57492'); +f('57493','57494','57495','57496'); +f('57497','57498','57499','57500'); +f('57501','57502','57503','57504'); +f('57505','57506','57507','57508'); +f('57509','57510','57511','57512'); +f('57513','57514','57515','57516'); +f('57517','57518','57519','57520'); +f('57521','57522','57523','57524'); +f('57525','57526','57527','57528'); +f('57529','57530','57531','57532'); +f('57533','57534','57535','57536'); +f('57537','57538','57539','57540'); +f('57541','57542','57543','57544'); +f('57545','57546','57547','57548'); +f('57549','57550','57551','57552'); +f('57553','57554','57555','57556'); +f('57557','57558','57559','57560'); +f('57561','57562','57563','57564'); +f('57565','57566','57567','57568'); +f('57569','57570','57571','57572'); +f('57573','57574','57575','57576'); +f('57577','57578','57579','57580'); +f('57581','57582','57583','57584'); +f('57585','57586','57587','57588'); +f('57589','57590','57591','57592'); +f('57593','57594','57595','57596'); +f('57597','57598','57599','57600'); +f('57601','57602','57603','57604'); +f('57605','57606','57607','57608'); +f('57609','57610','57611','57612'); +f('57613','57614','57615','57616'); +f('57617','57618','57619','57620'); +f('57621','57622','57623','57624'); +f('57625','57626','57627','57628'); +f('57629','57630','57631','57632'); +f('57633','57634','57635','57636'); +f('57637','57638','57639','57640'); +f('57641','57642','57643','57644'); +f('57645','57646','57647','57648'); +f('57649','57650','57651','57652'); +f('57653','57654','57655','57656'); +f('57657','57658','57659','57660'); +f('57661','57662','57663','57664'); +f('57665','57666','57667','57668'); +f('57669','57670','57671','57672'); +f('57673','57674','57675','57676'); +f('57677','57678','57679','57680'); +f('57681','57682','57683','57684'); +f('57685','57686','57687','57688'); +f('57689','57690','57691','57692'); +f('57693','57694','57695','57696'); +f('57697','57698','57699','57700'); +f('57701','57702','57703','57704'); +f('57705','57706','57707','57708'); +f('57709','57710','57711','57712'); +f('57713','57714','57715','57716'); +f('57717','57718','57719','57720'); +f('57721','57722','57723','57724'); +f('57725','57726','57727','57728'); +f('57729','57730','57731','57732'); +f('57733','57734','57735','57736'); +f('57737','57738','57739','57740'); +f('57741','57742','57743','57744'); +f('57745','57746','57747','57748'); +f('57749','57750','57751','57752'); +f('57753','57754','57755','57756'); +f('57757','57758','57759','57760'); +f('57761','57762','57763','57764'); +f('57765','57766','57767','57768'); +f('57769','57770','57771','57772'); +f('57773','57774','57775','57776'); +f('57777','57778','57779','57780'); +f('57781','57782','57783','57784'); +f('57785','57786','57787','57788'); +f('57789','57790','57791','57792'); +f('57793','57794','57795','57796'); +f('57797','57798','57799','57800'); +f('57801','57802','57803','57804'); +f('57805','57806','57807','57808'); +f('57809','57810','57811','57812'); +f('57813','57814','57815','57816'); +f('57817','57818','57819','57820'); +f('57821','57822','57823','57824'); +f('57825','57826','57827','57828'); +f('57829','57830','57831','57832'); +f('57833','57834','57835','57836'); +f('57837','57838','57839','57840'); +f('57841','57842','57843','57844'); +f('57845','57846','57847','57848'); +f('57849','57850','57851','57852'); +f('57853','57854','57855','57856'); +f('57857','57858','57859','57860'); +f('57861','57862','57863','57864'); +f('57865','57866','57867','57868'); +f('57869','57870','57871','57872'); +f('57873','57874','57875','57876'); +f('57877','57878','57879','57880'); +f('57881','57882','57883','57884'); +f('57885','57886','57887','57888'); +f('57889','57890','57891','57892'); +f('57893','57894','57895','57896'); +f('57897','57898','57899','57900'); +f('57901','57902','57903','57904'); +f('57905','57906','57907','57908'); +f('57909','57910','57911','57912'); +f('57913','57914','57915','57916'); +f('57917','57918','57919','57920'); +f('57921','57922','57923','57924'); +f('57925','57926','57927','57928'); +f('57929','57930','57931','57932'); +f('57933','57934','57935','57936'); +f('57937','57938','57939','57940'); +f('57941','57942','57943','57944'); +f('57945','57946','57947','57948'); +f('57949','57950','57951','57952'); +f('57953','57954','57955','57956'); +f('57957','57958','57959','57960'); +f('57961','57962','57963','57964'); +f('57965','57966','57967','57968'); +f('57969','57970','57971','57972'); +f('57973','57974','57975','57976'); +f('57977','57978','57979','57980'); +f('57981','57982','57983','57984'); +f('57985','57986','57987','57988'); +f('57989','57990','57991','57992'); +f('57993','57994','57995','57996'); +f('57997','57998','57999','58000'); +f('58001','58002','58003','58004'); +f('58005','58006','58007','58008'); +f('58009','58010','58011','58012'); +f('58013','58014','58015','58016'); +f('58017','58018','58019','58020'); +f('58021','58022','58023','58024'); +f('58025','58026','58027','58028'); +f('58029','58030','58031','58032'); +f('58033','58034','58035','58036'); +f('58037','58038','58039','58040'); +f('58041','58042','58043','58044'); +f('58045','58046','58047','58048'); +f('58049','58050','58051','58052'); +f('58053','58054','58055','58056'); +f('58057','58058','58059','58060'); +f('58061','58062','58063','58064'); +f('58065','58066','58067','58068'); +f('58069','58070','58071','58072'); +f('58073','58074','58075','58076'); +f('58077','58078','58079','58080'); +f('58081','58082','58083','58084'); +f('58085','58086','58087','58088'); +f('58089','58090','58091','58092'); +f('58093','58094','58095','58096'); +f('58097','58098','58099','58100'); +f('58101','58102','58103','58104'); +f('58105','58106','58107','58108'); +f('58109','58110','58111','58112'); +f('58113','58114','58115','58116'); +f('58117','58118','58119','58120'); +f('58121','58122','58123','58124'); +f('58125','58126','58127','58128'); +f('58129','58130','58131','58132'); +f('58133','58134','58135','58136'); +f('58137','58138','58139','58140'); +f('58141','58142','58143','58144'); +f('58145','58146','58147','58148'); +f('58149','58150','58151','58152'); +f('58153','58154','58155','58156'); +f('58157','58158','58159','58160'); +f('58161','58162','58163','58164'); +f('58165','58166','58167','58168'); +f('58169','58170','58171','58172'); +f('58173','58174','58175','58176'); +f('58177','58178','58179','58180'); +f('58181','58182','58183','58184'); +f('58185','58186','58187','58188'); +f('58189','58190','58191','58192'); +f('58193','58194','58195','58196'); +f('58197','58198','58199','58200'); +f('58201','58202','58203','58204'); +f('58205','58206','58207','58208'); +f('58209','58210','58211','58212'); +f('58213','58214','58215','58216'); +f('58217','58218','58219','58220'); +f('58221','58222','58223','58224'); +f('58225','58226','58227','58228'); +f('58229','58230','58231','58232'); +f('58233','58234','58235','58236'); +f('58237','58238','58239','58240'); +f('58241','58242','58243','58244'); +f('58245','58246','58247','58248'); +f('58249','58250','58251','58252'); +f('58253','58254','58255','58256'); +f('58257','58258','58259','58260'); +f('58261','58262','58263','58264'); +f('58265','58266','58267','58268'); +f('58269','58270','58271','58272'); +f('58273','58274','58275','58276'); +f('58277','58278','58279','58280'); +f('58281','58282','58283','58284'); +f('58285','58286','58287','58288'); +f('58289','58290','58291','58292'); +f('58293','58294','58295','58296'); +f('58297','58298','58299','58300'); +f('58301','58302','58303','58304'); +f('58305','58306','58307','58308'); +f('58309','58310','58311','58312'); +f('58313','58314','58315','58316'); +f('58317','58318','58319','58320'); +f('58321','58322','58323','58324'); +f('58325','58326','58327','58328'); +f('58329','58330','58331','58332'); +f('58333','58334','58335','58336'); +f('58337','58338','58339','58340'); +f('58341','58342','58343','58344'); +f('58345','58346','58347','58348'); +f('58349','58350','58351','58352'); +f('58353','58354','58355','58356'); +f('58357','58358','58359','58360'); +f('58361','58362','58363','58364'); +f('58365','58366','58367','58368'); +f('58369','58370','58371','58372'); +f('58373','58374','58375','58376'); +f('58377','58378','58379','58380'); +f('58381','58382','58383','58384'); +f('58385','58386','58387','58388'); +f('58389','58390','58391','58392'); +f('58393','58394','58395','58396'); +f('58397','58398','58399','58400'); +f('58401','58402','58403','58404'); +f('58405','58406','58407','58408'); +f('58409','58410','58411','58412'); +f('58413','58414','58415','58416'); +f('58417','58418','58419','58420'); +f('58421','58422','58423','58424'); +f('58425','58426','58427','58428'); +f('58429','58430','58431','58432'); +f('58433','58434','58435','58436'); +f('58437','58438','58439','58440'); +f('58441','58442','58443','58444'); +f('58445','58446','58447','58448'); +f('58449','58450','58451','58452'); +f('58453','58454','58455','58456'); +f('58457','58458','58459','58460'); +f('58461','58462','58463','58464'); +f('58465','58466','58467','58468'); +f('58469','58470','58471','58472'); +f('58473','58474','58475','58476'); +f('58477','58478','58479','58480'); +f('58481','58482','58483','58484'); +f('58485','58486','58487','58488'); +f('58489','58490','58491','58492'); +f('58493','58494','58495','58496'); +f('58497','58498','58499','58500'); +f('58501','58502','58503','58504'); +f('58505','58506','58507','58508'); +f('58509','58510','58511','58512'); +f('58513','58514','58515','58516'); +f('58517','58518','58519','58520'); +f('58521','58522','58523','58524'); +f('58525','58526','58527','58528'); +f('58529','58530','58531','58532'); +f('58533','58534','58535','58536'); +f('58537','58538','58539','58540'); +f('58541','58542','58543','58544'); +f('58545','58546','58547','58548'); +f('58549','58550','58551','58552'); +f('58553','58554','58555','58556'); +f('58557','58558','58559','58560'); +f('58561','58562','58563','58564'); +f('58565','58566','58567','58568'); +f('58569','58570','58571','58572'); +f('58573','58574','58575','58576'); +f('58577','58578','58579','58580'); +f('58581','58582','58583','58584'); +f('58585','58586','58587','58588'); +f('58589','58590','58591','58592'); +f('58593','58594','58595','58596'); +f('58597','58598','58599','58600'); +f('58601','58602','58603','58604'); +f('58605','58606','58607','58608'); +f('58609','58610','58611','58612'); +f('58613','58614','58615','58616'); +f('58617','58618','58619','58620'); +f('58621','58622','58623','58624'); +f('58625','58626','58627','58628'); +f('58629','58630','58631','58632'); +f('58633','58634','58635','58636'); +f('58637','58638','58639','58640'); +f('58641','58642','58643','58644'); +f('58645','58646','58647','58648'); +f('58649','58650','58651','58652'); +f('58653','58654','58655','58656'); +f('58657','58658','58659','58660'); +f('58661','58662','58663','58664'); +f('58665','58666','58667','58668'); +f('58669','58670','58671','58672'); +f('58673','58674','58675','58676'); +f('58677','58678','58679','58680'); +f('58681','58682','58683','58684'); +f('58685','58686','58687','58688'); +f('58689','58690','58691','58692'); +f('58693','58694','58695','58696'); +f('58697','58698','58699','58700'); +f('58701','58702','58703','58704'); +f('58705','58706','58707','58708'); +f('58709','58710','58711','58712'); +f('58713','58714','58715','58716'); +f('58717','58718','58719','58720'); +f('58721','58722','58723','58724'); +f('58725','58726','58727','58728'); +f('58729','58730','58731','58732'); +f('58733','58734','58735','58736'); +f('58737','58738','58739','58740'); +f('58741','58742','58743','58744'); +f('58745','58746','58747','58748'); +f('58749','58750','58751','58752'); +f('58753','58754','58755','58756'); +f('58757','58758','58759','58760'); +f('58761','58762','58763','58764'); +f('58765','58766','58767','58768'); +f('58769','58770','58771','58772'); +f('58773','58774','58775','58776'); +f('58777','58778','58779','58780'); +f('58781','58782','58783','58784'); +f('58785','58786','58787','58788'); +f('58789','58790','58791','58792'); +f('58793','58794','58795','58796'); +f('58797','58798','58799','58800'); +f('58801','58802','58803','58804'); +f('58805','58806','58807','58808'); +f('58809','58810','58811','58812'); +f('58813','58814','58815','58816'); +f('58817','58818','58819','58820'); +f('58821','58822','58823','58824'); +f('58825','58826','58827','58828'); +f('58829','58830','58831','58832'); +f('58833','58834','58835','58836'); +f('58837','58838','58839','58840'); +f('58841','58842','58843','58844'); +f('58845','58846','58847','58848'); +f('58849','58850','58851','58852'); +f('58853','58854','58855','58856'); +f('58857','58858','58859','58860'); +f('58861','58862','58863','58864'); +f('58865','58866','58867','58868'); +f('58869','58870','58871','58872'); +f('58873','58874','58875','58876'); +f('58877','58878','58879','58880'); +f('58881','58882','58883','58884'); +f('58885','58886','58887','58888'); +f('58889','58890','58891','58892'); +f('58893','58894','58895','58896'); +f('58897','58898','58899','58900'); +f('58901','58902','58903','58904'); +f('58905','58906','58907','58908'); +f('58909','58910','58911','58912'); +f('58913','58914','58915','58916'); +f('58917','58918','58919','58920'); +f('58921','58922','58923','58924'); +f('58925','58926','58927','58928'); +f('58929','58930','58931','58932'); +f('58933','58934','58935','58936'); +f('58937','58938','58939','58940'); +f('58941','58942','58943','58944'); +f('58945','58946','58947','58948'); +f('58949','58950','58951','58952'); +f('58953','58954','58955','58956'); +f('58957','58958','58959','58960'); +f('58961','58962','58963','58964'); +f('58965','58966','58967','58968'); +f('58969','58970','58971','58972'); +f('58973','58974','58975','58976'); +f('58977','58978','58979','58980'); +f('58981','58982','58983','58984'); +f('58985','58986','58987','58988'); +f('58989','58990','58991','58992'); +f('58993','58994','58995','58996'); +f('58997','58998','58999','59000'); +f('59001','59002','59003','59004'); +f('59005','59006','59007','59008'); +f('59009','59010','59011','59012'); +f('59013','59014','59015','59016'); +f('59017','59018','59019','59020'); +f('59021','59022','59023','59024'); +f('59025','59026','59027','59028'); +f('59029','59030','59031','59032'); +f('59033','59034','59035','59036'); +f('59037','59038','59039','59040'); +f('59041','59042','59043','59044'); +f('59045','59046','59047','59048'); +f('59049','59050','59051','59052'); +f('59053','59054','59055','59056'); +f('59057','59058','59059','59060'); +f('59061','59062','59063','59064'); +f('59065','59066','59067','59068'); +f('59069','59070','59071','59072'); +f('59073','59074','59075','59076'); +f('59077','59078','59079','59080'); +f('59081','59082','59083','59084'); +f('59085','59086','59087','59088'); +f('59089','59090','59091','59092'); +f('59093','59094','59095','59096'); +f('59097','59098','59099','59100'); +f('59101','59102','59103','59104'); +f('59105','59106','59107','59108'); +f('59109','59110','59111','59112'); +f('59113','59114','59115','59116'); +f('59117','59118','59119','59120'); +f('59121','59122','59123','59124'); +f('59125','59126','59127','59128'); +f('59129','59130','59131','59132'); +f('59133','59134','59135','59136'); +f('59137','59138','59139','59140'); +f('59141','59142','59143','59144'); +f('59145','59146','59147','59148'); +f('59149','59150','59151','59152'); +f('59153','59154','59155','59156'); +f('59157','59158','59159','59160'); +f('59161','59162','59163','59164'); +f('59165','59166','59167','59168'); +f('59169','59170','59171','59172'); +f('59173','59174','59175','59176'); +f('59177','59178','59179','59180'); +f('59181','59182','59183','59184'); +f('59185','59186','59187','59188'); +f('59189','59190','59191','59192'); +f('59193','59194','59195','59196'); +f('59197','59198','59199','59200'); +f('59201','59202','59203','59204'); +f('59205','59206','59207','59208'); +f('59209','59210','59211','59212'); +f('59213','59214','59215','59216'); +f('59217','59218','59219','59220'); +f('59221','59222','59223','59224'); +f('59225','59226','59227','59228'); +f('59229','59230','59231','59232'); +f('59233','59234','59235','59236'); +f('59237','59238','59239','59240'); +f('59241','59242','59243','59244'); +f('59245','59246','59247','59248'); +f('59249','59250','59251','59252'); +f('59253','59254','59255','59256'); +f('59257','59258','59259','59260'); +f('59261','59262','59263','59264'); +f('59265','59266','59267','59268'); +f('59269','59270','59271','59272'); +f('59273','59274','59275','59276'); +f('59277','59278','59279','59280'); +f('59281','59282','59283','59284'); +f('59285','59286','59287','59288'); +f('59289','59290','59291','59292'); +f('59293','59294','59295','59296'); +f('59297','59298','59299','59300'); +f('59301','59302','59303','59304'); +f('59305','59306','59307','59308'); +f('59309','59310','59311','59312'); +f('59313','59314','59315','59316'); +f('59317','59318','59319','59320'); +f('59321','59322','59323','59324'); +f('59325','59326','59327','59328'); +f('59329','59330','59331','59332'); +f('59333','59334','59335','59336'); +f('59337','59338','59339','59340'); +f('59341','59342','59343','59344'); +f('59345','59346','59347','59348'); +f('59349','59350','59351','59352'); +f('59353','59354','59355','59356'); +f('59357','59358','59359','59360'); +f('59361','59362','59363','59364'); +f('59365','59366','59367','59368'); +f('59369','59370','59371','59372'); +f('59373','59374','59375','59376'); +f('59377','59378','59379','59380'); +f('59381','59382','59383','59384'); +f('59385','59386','59387','59388'); +f('59389','59390','59391','59392'); +f('59393','59394','59395','59396'); +f('59397','59398','59399','59400'); +f('59401','59402','59403','59404'); +f('59405','59406','59407','59408'); +f('59409','59410','59411','59412'); +f('59413','59414','59415','59416'); +f('59417','59418','59419','59420'); +f('59421','59422','59423','59424'); +f('59425','59426','59427','59428'); +f('59429','59430','59431','59432'); +f('59433','59434','59435','59436'); +f('59437','59438','59439','59440'); +f('59441','59442','59443','59444'); +f('59445','59446','59447','59448'); +f('59449','59450','59451','59452'); +f('59453','59454','59455','59456'); +f('59457','59458','59459','59460'); +f('59461','59462','59463','59464'); +f('59465','59466','59467','59468'); +f('59469','59470','59471','59472'); +f('59473','59474','59475','59476'); +f('59477','59478','59479','59480'); +f('59481','59482','59483','59484'); +f('59485','59486','59487','59488'); +f('59489','59490','59491','59492'); +f('59493','59494','59495','59496'); +f('59497','59498','59499','59500'); +f('59501','59502','59503','59504'); +f('59505','59506','59507','59508'); +f('59509','59510','59511','59512'); +f('59513','59514','59515','59516'); +f('59517','59518','59519','59520'); +f('59521','59522','59523','59524'); +f('59525','59526','59527','59528'); +f('59529','59530','59531','59532'); +f('59533','59534','59535','59536'); +f('59537','59538','59539','59540'); +f('59541','59542','59543','59544'); +f('59545','59546','59547','59548'); +f('59549','59550','59551','59552'); +f('59553','59554','59555','59556'); +f('59557','59558','59559','59560'); +f('59561','59562','59563','59564'); +f('59565','59566','59567','59568'); +f('59569','59570','59571','59572'); +f('59573','59574','59575','59576'); +f('59577','59578','59579','59580'); +f('59581','59582','59583','59584'); +f('59585','59586','59587','59588'); +f('59589','59590','59591','59592'); +f('59593','59594','59595','59596'); +f('59597','59598','59599','59600'); +f('59601','59602','59603','59604'); +f('59605','59606','59607','59608'); +f('59609','59610','59611','59612'); +f('59613','59614','59615','59616'); +f('59617','59618','59619','59620'); +f('59621','59622','59623','59624'); +f('59625','59626','59627','59628'); +f('59629','59630','59631','59632'); +f('59633','59634','59635','59636'); +f('59637','59638','59639','59640'); +f('59641','59642','59643','59644'); +f('59645','59646','59647','59648'); +f('59649','59650','59651','59652'); +f('59653','59654','59655','59656'); +f('59657','59658','59659','59660'); +f('59661','59662','59663','59664'); +f('59665','59666','59667','59668'); +f('59669','59670','59671','59672'); +f('59673','59674','59675','59676'); +f('59677','59678','59679','59680'); +f('59681','59682','59683','59684'); +f('59685','59686','59687','59688'); +f('59689','59690','59691','59692'); +f('59693','59694','59695','59696'); +f('59697','59698','59699','59700'); +f('59701','59702','59703','59704'); +f('59705','59706','59707','59708'); +f('59709','59710','59711','59712'); +f('59713','59714','59715','59716'); +f('59717','59718','59719','59720'); +f('59721','59722','59723','59724'); +f('59725','59726','59727','59728'); +f('59729','59730','59731','59732'); +f('59733','59734','59735','59736'); +f('59737','59738','59739','59740'); +f('59741','59742','59743','59744'); +f('59745','59746','59747','59748'); +f('59749','59750','59751','59752'); +f('59753','59754','59755','59756'); +f('59757','59758','59759','59760'); +f('59761','59762','59763','59764'); +f('59765','59766','59767','59768'); +f('59769','59770','59771','59772'); +f('59773','59774','59775','59776'); +f('59777','59778','59779','59780'); +f('59781','59782','59783','59784'); +f('59785','59786','59787','59788'); +f('59789','59790','59791','59792'); +f('59793','59794','59795','59796'); +f('59797','59798','59799','59800'); +f('59801','59802','59803','59804'); +f('59805','59806','59807','59808'); +f('59809','59810','59811','59812'); +f('59813','59814','59815','59816'); +f('59817','59818','59819','59820'); +f('59821','59822','59823','59824'); +f('59825','59826','59827','59828'); +f('59829','59830','59831','59832'); +f('59833','59834','59835','59836'); +f('59837','59838','59839','59840'); +f('59841','59842','59843','59844'); +f('59845','59846','59847','59848'); +f('59849','59850','59851','59852'); +f('59853','59854','59855','59856'); +f('59857','59858','59859','59860'); +f('59861','59862','59863','59864'); +f('59865','59866','59867','59868'); +f('59869','59870','59871','59872'); +f('59873','59874','59875','59876'); +f('59877','59878','59879','59880'); +f('59881','59882','59883','59884'); +f('59885','59886','59887','59888'); +f('59889','59890','59891','59892'); +f('59893','59894','59895','59896'); +f('59897','59898','59899','59900'); +f('59901','59902','59903','59904'); +f('59905','59906','59907','59908'); +f('59909','59910','59911','59912'); +f('59913','59914','59915','59916'); +f('59917','59918','59919','59920'); +f('59921','59922','59923','59924'); +f('59925','59926','59927','59928'); +f('59929','59930','59931','59932'); +f('59933','59934','59935','59936'); +f('59937','59938','59939','59940'); +f('59941','59942','59943','59944'); +f('59945','59946','59947','59948'); +f('59949','59950','59951','59952'); +f('59953','59954','59955','59956'); +f('59957','59958','59959','59960'); +f('59961','59962','59963','59964'); +f('59965','59966','59967','59968'); +f('59969','59970','59971','59972'); +f('59973','59974','59975','59976'); +f('59977','59978','59979','59980'); +f('59981','59982','59983','59984'); +f('59985','59986','59987','59988'); +f('59989','59990','59991','59992'); +f('59993','59994','59995','59996'); +f('59997','59998','59999','60000'); +f('60001','60002','60003','60004'); +f('60005','60006','60007','60008'); +f('60009','60010','60011','60012'); +f('60013','60014','60015','60016'); +f('60017','60018','60019','60020'); +f('60021','60022','60023','60024'); +f('60025','60026','60027','60028'); +f('60029','60030','60031','60032'); +f('60033','60034','60035','60036'); +f('60037','60038','60039','60040'); +f('60041','60042','60043','60044'); +f('60045','60046','60047','60048'); +f('60049','60050','60051','60052'); +f('60053','60054','60055','60056'); +f('60057','60058','60059','60060'); +f('60061','60062','60063','60064'); +f('60065','60066','60067','60068'); +f('60069','60070','60071','60072'); +f('60073','60074','60075','60076'); +f('60077','60078','60079','60080'); +f('60081','60082','60083','60084'); +f('60085','60086','60087','60088'); +f('60089','60090','60091','60092'); +f('60093','60094','60095','60096'); +f('60097','60098','60099','60100'); +f('60101','60102','60103','60104'); +f('60105','60106','60107','60108'); +f('60109','60110','60111','60112'); +f('60113','60114','60115','60116'); +f('60117','60118','60119','60120'); +f('60121','60122','60123','60124'); +f('60125','60126','60127','60128'); +f('60129','60130','60131','60132'); +f('60133','60134','60135','60136'); +f('60137','60138','60139','60140'); +f('60141','60142','60143','60144'); +f('60145','60146','60147','60148'); +f('60149','60150','60151','60152'); +f('60153','60154','60155','60156'); +f('60157','60158','60159','60160'); +f('60161','60162','60163','60164'); +f('60165','60166','60167','60168'); +f('60169','60170','60171','60172'); +f('60173','60174','60175','60176'); +f('60177','60178','60179','60180'); +f('60181','60182','60183','60184'); +f('60185','60186','60187','60188'); +f('60189','60190','60191','60192'); +f('60193','60194','60195','60196'); +f('60197','60198','60199','60200'); +f('60201','60202','60203','60204'); +f('60205','60206','60207','60208'); +f('60209','60210','60211','60212'); +f('60213','60214','60215','60216'); +f('60217','60218','60219','60220'); +f('60221','60222','60223','60224'); +f('60225','60226','60227','60228'); +f('60229','60230','60231','60232'); +f('60233','60234','60235','60236'); +f('60237','60238','60239','60240'); +f('60241','60242','60243','60244'); +f('60245','60246','60247','60248'); +f('60249','60250','60251','60252'); +f('60253','60254','60255','60256'); +f('60257','60258','60259','60260'); +f('60261','60262','60263','60264'); +f('60265','60266','60267','60268'); +f('60269','60270','60271','60272'); +f('60273','60274','60275','60276'); +f('60277','60278','60279','60280'); +f('60281','60282','60283','60284'); +f('60285','60286','60287','60288'); +f('60289','60290','60291','60292'); +f('60293','60294','60295','60296'); +f('60297','60298','60299','60300'); +f('60301','60302','60303','60304'); +f('60305','60306','60307','60308'); +f('60309','60310','60311','60312'); +f('60313','60314','60315','60316'); +f('60317','60318','60319','60320'); +f('60321','60322','60323','60324'); +f('60325','60326','60327','60328'); +f('60329','60330','60331','60332'); +f('60333','60334','60335','60336'); +f('60337','60338','60339','60340'); +f('60341','60342','60343','60344'); +f('60345','60346','60347','60348'); +f('60349','60350','60351','60352'); +f('60353','60354','60355','60356'); +f('60357','60358','60359','60360'); +f('60361','60362','60363','60364'); +f('60365','60366','60367','60368'); +f('60369','60370','60371','60372'); +f('60373','60374','60375','60376'); +f('60377','60378','60379','60380'); +f('60381','60382','60383','60384'); +f('60385','60386','60387','60388'); +f('60389','60390','60391','60392'); +f('60393','60394','60395','60396'); +f('60397','60398','60399','60400'); +f('60401','60402','60403','60404'); +f('60405','60406','60407','60408'); +f('60409','60410','60411','60412'); +f('60413','60414','60415','60416'); +f('60417','60418','60419','60420'); +f('60421','60422','60423','60424'); +f('60425','60426','60427','60428'); +f('60429','60430','60431','60432'); +f('60433','60434','60435','60436'); +f('60437','60438','60439','60440'); +f('60441','60442','60443','60444'); +f('60445','60446','60447','60448'); +f('60449','60450','60451','60452'); +f('60453','60454','60455','60456'); +f('60457','60458','60459','60460'); +f('60461','60462','60463','60464'); +f('60465','60466','60467','60468'); +f('60469','60470','60471','60472'); +f('60473','60474','60475','60476'); +f('60477','60478','60479','60480'); +f('60481','60482','60483','60484'); +f('60485','60486','60487','60488'); +f('60489','60490','60491','60492'); +f('60493','60494','60495','60496'); +f('60497','60498','60499','60500'); +f('60501','60502','60503','60504'); +f('60505','60506','60507','60508'); +f('60509','60510','60511','60512'); +f('60513','60514','60515','60516'); +f('60517','60518','60519','60520'); +f('60521','60522','60523','60524'); +f('60525','60526','60527','60528'); +f('60529','60530','60531','60532'); +f('60533','60534','60535','60536'); +f('60537','60538','60539','60540'); +f('60541','60542','60543','60544'); +f('60545','60546','60547','60548'); +f('60549','60550','60551','60552'); +f('60553','60554','60555','60556'); +f('60557','60558','60559','60560'); +f('60561','60562','60563','60564'); +f('60565','60566','60567','60568'); +f('60569','60570','60571','60572'); +f('60573','60574','60575','60576'); +f('60577','60578','60579','60580'); +f('60581','60582','60583','60584'); +f('60585','60586','60587','60588'); +f('60589','60590','60591','60592'); +f('60593','60594','60595','60596'); +f('60597','60598','60599','60600'); +f('60601','60602','60603','60604'); +f('60605','60606','60607','60608'); +f('60609','60610','60611','60612'); +f('60613','60614','60615','60616'); +f('60617','60618','60619','60620'); +f('60621','60622','60623','60624'); +f('60625','60626','60627','60628'); +f('60629','60630','60631','60632'); +f('60633','60634','60635','60636'); +f('60637','60638','60639','60640'); +f('60641','60642','60643','60644'); +f('60645','60646','60647','60648'); +f('60649','60650','60651','60652'); +f('60653','60654','60655','60656'); +f('60657','60658','60659','60660'); +f('60661','60662','60663','60664'); +f('60665','60666','60667','60668'); +f('60669','60670','60671','60672'); +f('60673','60674','60675','60676'); +f('60677','60678','60679','60680'); +f('60681','60682','60683','60684'); +f('60685','60686','60687','60688'); +f('60689','60690','60691','60692'); +f('60693','60694','60695','60696'); +f('60697','60698','60699','60700'); +f('60701','60702','60703','60704'); +f('60705','60706','60707','60708'); +f('60709','60710','60711','60712'); +f('60713','60714','60715','60716'); +f('60717','60718','60719','60720'); +f('60721','60722','60723','60724'); +f('60725','60726','60727','60728'); +f('60729','60730','60731','60732'); +f('60733','60734','60735','60736'); +f('60737','60738','60739','60740'); +f('60741','60742','60743','60744'); +f('60745','60746','60747','60748'); +f('60749','60750','60751','60752'); +f('60753','60754','60755','60756'); +f('60757','60758','60759','60760'); +f('60761','60762','60763','60764'); +f('60765','60766','60767','60768'); +f('60769','60770','60771','60772'); +f('60773','60774','60775','60776'); +f('60777','60778','60779','60780'); +f('60781','60782','60783','60784'); +f('60785','60786','60787','60788'); +f('60789','60790','60791','60792'); +f('60793','60794','60795','60796'); +f('60797','60798','60799','60800'); +f('60801','60802','60803','60804'); +f('60805','60806','60807','60808'); +f('60809','60810','60811','60812'); +f('60813','60814','60815','60816'); +f('60817','60818','60819','60820'); +f('60821','60822','60823','60824'); +f('60825','60826','60827','60828'); +f('60829','60830','60831','60832'); +f('60833','60834','60835','60836'); +f('60837','60838','60839','60840'); +f('60841','60842','60843','60844'); +f('60845','60846','60847','60848'); +f('60849','60850','60851','60852'); +f('60853','60854','60855','60856'); +f('60857','60858','60859','60860'); +f('60861','60862','60863','60864'); +f('60865','60866','60867','60868'); +f('60869','60870','60871','60872'); +f('60873','60874','60875','60876'); +f('60877','60878','60879','60880'); +f('60881','60882','60883','60884'); +f('60885','60886','60887','60888'); +f('60889','60890','60891','60892'); +f('60893','60894','60895','60896'); +f('60897','60898','60899','60900'); +f('60901','60902','60903','60904'); +f('60905','60906','60907','60908'); +f('60909','60910','60911','60912'); +f('60913','60914','60915','60916'); +f('60917','60918','60919','60920'); +f('60921','60922','60923','60924'); +f('60925','60926','60927','60928'); +f('60929','60930','60931','60932'); +f('60933','60934','60935','60936'); +f('60937','60938','60939','60940'); +f('60941','60942','60943','60944'); +f('60945','60946','60947','60948'); +f('60949','60950','60951','60952'); +f('60953','60954','60955','60956'); +f('60957','60958','60959','60960'); +f('60961','60962','60963','60964'); +f('60965','60966','60967','60968'); +f('60969','60970','60971','60972'); +f('60973','60974','60975','60976'); +f('60977','60978','60979','60980'); +f('60981','60982','60983','60984'); +f('60985','60986','60987','60988'); +f('60989','60990','60991','60992'); +f('60993','60994','60995','60996'); +f('60997','60998','60999','61000'); +f('61001','61002','61003','61004'); +f('61005','61006','61007','61008'); +f('61009','61010','61011','61012'); +f('61013','61014','61015','61016'); +f('61017','61018','61019','61020'); +f('61021','61022','61023','61024'); +f('61025','61026','61027','61028'); +f('61029','61030','61031','61032'); +f('61033','61034','61035','61036'); +f('61037','61038','61039','61040'); +f('61041','61042','61043','61044'); +f('61045','61046','61047','61048'); +f('61049','61050','61051','61052'); +f('61053','61054','61055','61056'); +f('61057','61058','61059','61060'); +f('61061','61062','61063','61064'); +f('61065','61066','61067','61068'); +f('61069','61070','61071','61072'); +f('61073','61074','61075','61076'); +f('61077','61078','61079','61080'); +f('61081','61082','61083','61084'); +f('61085','61086','61087','61088'); +f('61089','61090','61091','61092'); +f('61093','61094','61095','61096'); +f('61097','61098','61099','61100'); +f('61101','61102','61103','61104'); +f('61105','61106','61107','61108'); +f('61109','61110','61111','61112'); +f('61113','61114','61115','61116'); +f('61117','61118','61119','61120'); +f('61121','61122','61123','61124'); +f('61125','61126','61127','61128'); +f('61129','61130','61131','61132'); +f('61133','61134','61135','61136'); +f('61137','61138','61139','61140'); +f('61141','61142','61143','61144'); +f('61145','61146','61147','61148'); +f('61149','61150','61151','61152'); +f('61153','61154','61155','61156'); +f('61157','61158','61159','61160'); +f('61161','61162','61163','61164'); +f('61165','61166','61167','61168'); +f('61169','61170','61171','61172'); +f('61173','61174','61175','61176'); +f('61177','61178','61179','61180'); +f('61181','61182','61183','61184'); +f('61185','61186','61187','61188'); +f('61189','61190','61191','61192'); +f('61193','61194','61195','61196'); +f('61197','61198','61199','61200'); +f('61201','61202','61203','61204'); +f('61205','61206','61207','61208'); +f('61209','61210','61211','61212'); +f('61213','61214','61215','61216'); +f('61217','61218','61219','61220'); +f('61221','61222','61223','61224'); +f('61225','61226','61227','61228'); +f('61229','61230','61231','61232'); +f('61233','61234','61235','61236'); +f('61237','61238','61239','61240'); +f('61241','61242','61243','61244'); +f('61245','61246','61247','61248'); +f('61249','61250','61251','61252'); +f('61253','61254','61255','61256'); +f('61257','61258','61259','61260'); +f('61261','61262','61263','61264'); +f('61265','61266','61267','61268'); +f('61269','61270','61271','61272'); +f('61273','61274','61275','61276'); +f('61277','61278','61279','61280'); +f('61281','61282','61283','61284'); +f('61285','61286','61287','61288'); +f('61289','61290','61291','61292'); +f('61293','61294','61295','61296'); +f('61297','61298','61299','61300'); +f('61301','61302','61303','61304'); +f('61305','61306','61307','61308'); +f('61309','61310','61311','61312'); +f('61313','61314','61315','61316'); +f('61317','61318','61319','61320'); +f('61321','61322','61323','61324'); +f('61325','61326','61327','61328'); +f('61329','61330','61331','61332'); +f('61333','61334','61335','61336'); +f('61337','61338','61339','61340'); +f('61341','61342','61343','61344'); +f('61345','61346','61347','61348'); +f('61349','61350','61351','61352'); +f('61353','61354','61355','61356'); +f('61357','61358','61359','61360'); +f('61361','61362','61363','61364'); +f('61365','61366','61367','61368'); +f('61369','61370','61371','61372'); +f('61373','61374','61375','61376'); +f('61377','61378','61379','61380'); +f('61381','61382','61383','61384'); +f('61385','61386','61387','61388'); +f('61389','61390','61391','61392'); +f('61393','61394','61395','61396'); +f('61397','61398','61399','61400'); +f('61401','61402','61403','61404'); +f('61405','61406','61407','61408'); +f('61409','61410','61411','61412'); +f('61413','61414','61415','61416'); +f('61417','61418','61419','61420'); +f('61421','61422','61423','61424'); +f('61425','61426','61427','61428'); +f('61429','61430','61431','61432'); +f('61433','61434','61435','61436'); +f('61437','61438','61439','61440'); +f('61441','61442','61443','61444'); +f('61445','61446','61447','61448'); +f('61449','61450','61451','61452'); +f('61453','61454','61455','61456'); +f('61457','61458','61459','61460'); +f('61461','61462','61463','61464'); +f('61465','61466','61467','61468'); +f('61469','61470','61471','61472'); +f('61473','61474','61475','61476'); +f('61477','61478','61479','61480'); +f('61481','61482','61483','61484'); +f('61485','61486','61487','61488'); +f('61489','61490','61491','61492'); +f('61493','61494','61495','61496'); +f('61497','61498','61499','61500'); +f('61501','61502','61503','61504'); +f('61505','61506','61507','61508'); +f('61509','61510','61511','61512'); +f('61513','61514','61515','61516'); +f('61517','61518','61519','61520'); +f('61521','61522','61523','61524'); +f('61525','61526','61527','61528'); +f('61529','61530','61531','61532'); +f('61533','61534','61535','61536'); +f('61537','61538','61539','61540'); +f('61541','61542','61543','61544'); +f('61545','61546','61547','61548'); +f('61549','61550','61551','61552'); +f('61553','61554','61555','61556'); +f('61557','61558','61559','61560'); +f('61561','61562','61563','61564'); +f('61565','61566','61567','61568'); +f('61569','61570','61571','61572'); +f('61573','61574','61575','61576'); +f('61577','61578','61579','61580'); +f('61581','61582','61583','61584'); +f('61585','61586','61587','61588'); +f('61589','61590','61591','61592'); +f('61593','61594','61595','61596'); +f('61597','61598','61599','61600'); +f('61601','61602','61603','61604'); +f('61605','61606','61607','61608'); +f('61609','61610','61611','61612'); +f('61613','61614','61615','61616'); +f('61617','61618','61619','61620'); +f('61621','61622','61623','61624'); +f('61625','61626','61627','61628'); +f('61629','61630','61631','61632'); +f('61633','61634','61635','61636'); +f('61637','61638','61639','61640'); +f('61641','61642','61643','61644'); +f('61645','61646','61647','61648'); +f('61649','61650','61651','61652'); +f('61653','61654','61655','61656'); +f('61657','61658','61659','61660'); +f('61661','61662','61663','61664'); +f('61665','61666','61667','61668'); +f('61669','61670','61671','61672'); +f('61673','61674','61675','61676'); +f('61677','61678','61679','61680'); +f('61681','61682','61683','61684'); +f('61685','61686','61687','61688'); +f('61689','61690','61691','61692'); +f('61693','61694','61695','61696'); +f('61697','61698','61699','61700'); +f('61701','61702','61703','61704'); +f('61705','61706','61707','61708'); +f('61709','61710','61711','61712'); +f('61713','61714','61715','61716'); +f('61717','61718','61719','61720'); +f('61721','61722','61723','61724'); +f('61725','61726','61727','61728'); +f('61729','61730','61731','61732'); +f('61733','61734','61735','61736'); +f('61737','61738','61739','61740'); +f('61741','61742','61743','61744'); +f('61745','61746','61747','61748'); +f('61749','61750','61751','61752'); +f('61753','61754','61755','61756'); +f('61757','61758','61759','61760'); +f('61761','61762','61763','61764'); +f('61765','61766','61767','61768'); +f('61769','61770','61771','61772'); +f('61773','61774','61775','61776'); +f('61777','61778','61779','61780'); +f('61781','61782','61783','61784'); +f('61785','61786','61787','61788'); +f('61789','61790','61791','61792'); +f('61793','61794','61795','61796'); +f('61797','61798','61799','61800'); +f('61801','61802','61803','61804'); +f('61805','61806','61807','61808'); +f('61809','61810','61811','61812'); +f('61813','61814','61815','61816'); +f('61817','61818','61819','61820'); +f('61821','61822','61823','61824'); +f('61825','61826','61827','61828'); +f('61829','61830','61831','61832'); +f('61833','61834','61835','61836'); +f('61837','61838','61839','61840'); +f('61841','61842','61843','61844'); +f('61845','61846','61847','61848'); +f('61849','61850','61851','61852'); +f('61853','61854','61855','61856'); +f('61857','61858','61859','61860'); +f('61861','61862','61863','61864'); +f('61865','61866','61867','61868'); +f('61869','61870','61871','61872'); +f('61873','61874','61875','61876'); +f('61877','61878','61879','61880'); +f('61881','61882','61883','61884'); +f('61885','61886','61887','61888'); +f('61889','61890','61891','61892'); +f('61893','61894','61895','61896'); +f('61897','61898','61899','61900'); +f('61901','61902','61903','61904'); +f('61905','61906','61907','61908'); +f('61909','61910','61911','61912'); +f('61913','61914','61915','61916'); +f('61917','61918','61919','61920'); +f('61921','61922','61923','61924'); +f('61925','61926','61927','61928'); +f('61929','61930','61931','61932'); +f('61933','61934','61935','61936'); +f('61937','61938','61939','61940'); +f('61941','61942','61943','61944'); +f('61945','61946','61947','61948'); +f('61949','61950','61951','61952'); +f('61953','61954','61955','61956'); +f('61957','61958','61959','61960'); +f('61961','61962','61963','61964'); +f('61965','61966','61967','61968'); +f('61969','61970','61971','61972'); +f('61973','61974','61975','61976'); +f('61977','61978','61979','61980'); +f('61981','61982','61983','61984'); +f('61985','61986','61987','61988'); +f('61989','61990','61991','61992'); +f('61993','61994','61995','61996'); +f('61997','61998','61999','62000'); +f('62001','62002','62003','62004'); +f('62005','62006','62007','62008'); +f('62009','62010','62011','62012'); +f('62013','62014','62015','62016'); +f('62017','62018','62019','62020'); +f('62021','62022','62023','62024'); +f('62025','62026','62027','62028'); +f('62029','62030','62031','62032'); +f('62033','62034','62035','62036'); +f('62037','62038','62039','62040'); +f('62041','62042','62043','62044'); +f('62045','62046','62047','62048'); +f('62049','62050','62051','62052'); +f('62053','62054','62055','62056'); +f('62057','62058','62059','62060'); +f('62061','62062','62063','62064'); +f('62065','62066','62067','62068'); +f('62069','62070','62071','62072'); +f('62073','62074','62075','62076'); +f('62077','62078','62079','62080'); +f('62081','62082','62083','62084'); +f('62085','62086','62087','62088'); +f('62089','62090','62091','62092'); +f('62093','62094','62095','62096'); +f('62097','62098','62099','62100'); +f('62101','62102','62103','62104'); +f('62105','62106','62107','62108'); +f('62109','62110','62111','62112'); +f('62113','62114','62115','62116'); +f('62117','62118','62119','62120'); +f('62121','62122','62123','62124'); +f('62125','62126','62127','62128'); +f('62129','62130','62131','62132'); +f('62133','62134','62135','62136'); +f('62137','62138','62139','62140'); +f('62141','62142','62143','62144'); +f('62145','62146','62147','62148'); +f('62149','62150','62151','62152'); +f('62153','62154','62155','62156'); +f('62157','62158','62159','62160'); +f('62161','62162','62163','62164'); +f('62165','62166','62167','62168'); +f('62169','62170','62171','62172'); +f('62173','62174','62175','62176'); +f('62177','62178','62179','62180'); +f('62181','62182','62183','62184'); +f('62185','62186','62187','62188'); +f('62189','62190','62191','62192'); +f('62193','62194','62195','62196'); +f('62197','62198','62199','62200'); +f('62201','62202','62203','62204'); +f('62205','62206','62207','62208'); +f('62209','62210','62211','62212'); +f('62213','62214','62215','62216'); +f('62217','62218','62219','62220'); +f('62221','62222','62223','62224'); +f('62225','62226','62227','62228'); +f('62229','62230','62231','62232'); +f('62233','62234','62235','62236'); +f('62237','62238','62239','62240'); +f('62241','62242','62243','62244'); +f('62245','62246','62247','62248'); +f('62249','62250','62251','62252'); +f('62253','62254','62255','62256'); +f('62257','62258','62259','62260'); +f('62261','62262','62263','62264'); +f('62265','62266','62267','62268'); +f('62269','62270','62271','62272'); +f('62273','62274','62275','62276'); +f('62277','62278','62279','62280'); +f('62281','62282','62283','62284'); +f('62285','62286','62287','62288'); +f('62289','62290','62291','62292'); +f('62293','62294','62295','62296'); +f('62297','62298','62299','62300'); +f('62301','62302','62303','62304'); +f('62305','62306','62307','62308'); +f('62309','62310','62311','62312'); +f('62313','62314','62315','62316'); +f('62317','62318','62319','62320'); +f('62321','62322','62323','62324'); +f('62325','62326','62327','62328'); +f('62329','62330','62331','62332'); +f('62333','62334','62335','62336'); +f('62337','62338','62339','62340'); +f('62341','62342','62343','62344'); +f('62345','62346','62347','62348'); +f('62349','62350','62351','62352'); +f('62353','62354','62355','62356'); +f('62357','62358','62359','62360'); +f('62361','62362','62363','62364'); +f('62365','62366','62367','62368'); +f('62369','62370','62371','62372'); +f('62373','62374','62375','62376'); +f('62377','62378','62379','62380'); +f('62381','62382','62383','62384'); +f('62385','62386','62387','62388'); +f('62389','62390','62391','62392'); +f('62393','62394','62395','62396'); +f('62397','62398','62399','62400'); +f('62401','62402','62403','62404'); +f('62405','62406','62407','62408'); +f('62409','62410','62411','62412'); +f('62413','62414','62415','62416'); +f('62417','62418','62419','62420'); +f('62421','62422','62423','62424'); +f('62425','62426','62427','62428'); +f('62429','62430','62431','62432'); +f('62433','62434','62435','62436'); +f('62437','62438','62439','62440'); +f('62441','62442','62443','62444'); +f('62445','62446','62447','62448'); +f('62449','62450','62451','62452'); +f('62453','62454','62455','62456'); +f('62457','62458','62459','62460'); +f('62461','62462','62463','62464'); +f('62465','62466','62467','62468'); +f('62469','62470','62471','62472'); +f('62473','62474','62475','62476'); +f('62477','62478','62479','62480'); +f('62481','62482','62483','62484'); +f('62485','62486','62487','62488'); +f('62489','62490','62491','62492'); +f('62493','62494','62495','62496'); +f('62497','62498','62499','62500'); +f('62501','62502','62503','62504'); +f('62505','62506','62507','62508'); +f('62509','62510','62511','62512'); +f('62513','62514','62515','62516'); +f('62517','62518','62519','62520'); +f('62521','62522','62523','62524'); +f('62525','62526','62527','62528'); +f('62529','62530','62531','62532'); +f('62533','62534','62535','62536'); +f('62537','62538','62539','62540'); +f('62541','62542','62543','62544'); +f('62545','62546','62547','62548'); +f('62549','62550','62551','62552'); +f('62553','62554','62555','62556'); +f('62557','62558','62559','62560'); +f('62561','62562','62563','62564'); +f('62565','62566','62567','62568'); +f('62569','62570','62571','62572'); +f('62573','62574','62575','62576'); +f('62577','62578','62579','62580'); +f('62581','62582','62583','62584'); +f('62585','62586','62587','62588'); +f('62589','62590','62591','62592'); +f('62593','62594','62595','62596'); +f('62597','62598','62599','62600'); +f('62601','62602','62603','62604'); +f('62605','62606','62607','62608'); +f('62609','62610','62611','62612'); +f('62613','62614','62615','62616'); +f('62617','62618','62619','62620'); +f('62621','62622','62623','62624'); +f('62625','62626','62627','62628'); +f('62629','62630','62631','62632'); +f('62633','62634','62635','62636'); +f('62637','62638','62639','62640'); +f('62641','62642','62643','62644'); +f('62645','62646','62647','62648'); +f('62649','62650','62651','62652'); +f('62653','62654','62655','62656'); +f('62657','62658','62659','62660'); +f('62661','62662','62663','62664'); +f('62665','62666','62667','62668'); +f('62669','62670','62671','62672'); +f('62673','62674','62675','62676'); +f('62677','62678','62679','62680'); +f('62681','62682','62683','62684'); +f('62685','62686','62687','62688'); +f('62689','62690','62691','62692'); +f('62693','62694','62695','62696'); +f('62697','62698','62699','62700'); +f('62701','62702','62703','62704'); +f('62705','62706','62707','62708'); +f('62709','62710','62711','62712'); +f('62713','62714','62715','62716'); +f('62717','62718','62719','62720'); +f('62721','62722','62723','62724'); +f('62725','62726','62727','62728'); +f('62729','62730','62731','62732'); +f('62733','62734','62735','62736'); +f('62737','62738','62739','62740'); +f('62741','62742','62743','62744'); +f('62745','62746','62747','62748'); +f('62749','62750','62751','62752'); +f('62753','62754','62755','62756'); +f('62757','62758','62759','62760'); +f('62761','62762','62763','62764'); +f('62765','62766','62767','62768'); +f('62769','62770','62771','62772'); +f('62773','62774','62775','62776'); +f('62777','62778','62779','62780'); +f('62781','62782','62783','62784'); +f('62785','62786','62787','62788'); +f('62789','62790','62791','62792'); +f('62793','62794','62795','62796'); +f('62797','62798','62799','62800'); +f('62801','62802','62803','62804'); +f('62805','62806','62807','62808'); +f('62809','62810','62811','62812'); +f('62813','62814','62815','62816'); +f('62817','62818','62819','62820'); +f('62821','62822','62823','62824'); +f('62825','62826','62827','62828'); +f('62829','62830','62831','62832'); +f('62833','62834','62835','62836'); +f('62837','62838','62839','62840'); +f('62841','62842','62843','62844'); +f('62845','62846','62847','62848'); +f('62849','62850','62851','62852'); +f('62853','62854','62855','62856'); +f('62857','62858','62859','62860'); +f('62861','62862','62863','62864'); +f('62865','62866','62867','62868'); +f('62869','62870','62871','62872'); +f('62873','62874','62875','62876'); +f('62877','62878','62879','62880'); +f('62881','62882','62883','62884'); +f('62885','62886','62887','62888'); +f('62889','62890','62891','62892'); +f('62893','62894','62895','62896'); +f('62897','62898','62899','62900'); +f('62901','62902','62903','62904'); +f('62905','62906','62907','62908'); +f('62909','62910','62911','62912'); +f('62913','62914','62915','62916'); +f('62917','62918','62919','62920'); +f('62921','62922','62923','62924'); +f('62925','62926','62927','62928'); +f('62929','62930','62931','62932'); +f('62933','62934','62935','62936'); +f('62937','62938','62939','62940'); +f('62941','62942','62943','62944'); +f('62945','62946','62947','62948'); +f('62949','62950','62951','62952'); +f('62953','62954','62955','62956'); +f('62957','62958','62959','62960'); +f('62961','62962','62963','62964'); +f('62965','62966','62967','62968'); +f('62969','62970','62971','62972'); +f('62973','62974','62975','62976'); +f('62977','62978','62979','62980'); +f('62981','62982','62983','62984'); +f('62985','62986','62987','62988'); +f('62989','62990','62991','62992'); +f('62993','62994','62995','62996'); +f('62997','62998','62999','63000'); +f('63001','63002','63003','63004'); +f('63005','63006','63007','63008'); +f('63009','63010','63011','63012'); +f('63013','63014','63015','63016'); +f('63017','63018','63019','63020'); +f('63021','63022','63023','63024'); +f('63025','63026','63027','63028'); +f('63029','63030','63031','63032'); +f('63033','63034','63035','63036'); +f('63037','63038','63039','63040'); +f('63041','63042','63043','63044'); +f('63045','63046','63047','63048'); +f('63049','63050','63051','63052'); +f('63053','63054','63055','63056'); +f('63057','63058','63059','63060'); +f('63061','63062','63063','63064'); +f('63065','63066','63067','63068'); +f('63069','63070','63071','63072'); +f('63073','63074','63075','63076'); +f('63077','63078','63079','63080'); +f('63081','63082','63083','63084'); +f('63085','63086','63087','63088'); +f('63089','63090','63091','63092'); +f('63093','63094','63095','63096'); +f('63097','63098','63099','63100'); +f('63101','63102','63103','63104'); +f('63105','63106','63107','63108'); +f('63109','63110','63111','63112'); +f('63113','63114','63115','63116'); +f('63117','63118','63119','63120'); +f('63121','63122','63123','63124'); +f('63125','63126','63127','63128'); +f('63129','63130','63131','63132'); +f('63133','63134','63135','63136'); +f('63137','63138','63139','63140'); +f('63141','63142','63143','63144'); +f('63145','63146','63147','63148'); +f('63149','63150','63151','63152'); +f('63153','63154','63155','63156'); +f('63157','63158','63159','63160'); +f('63161','63162','63163','63164'); +f('63165','63166','63167','63168'); +f('63169','63170','63171','63172'); +f('63173','63174','63175','63176'); +f('63177','63178','63179','63180'); +f('63181','63182','63183','63184'); +f('63185','63186','63187','63188'); +f('63189','63190','63191','63192'); +f('63193','63194','63195','63196'); +f('63197','63198','63199','63200'); +f('63201','63202','63203','63204'); +f('63205','63206','63207','63208'); +f('63209','63210','63211','63212'); +f('63213','63214','63215','63216'); +f('63217','63218','63219','63220'); +f('63221','63222','63223','63224'); +f('63225','63226','63227','63228'); +f('63229','63230','63231','63232'); +f('63233','63234','63235','63236'); +f('63237','63238','63239','63240'); +f('63241','63242','63243','63244'); +f('63245','63246','63247','63248'); +f('63249','63250','63251','63252'); +f('63253','63254','63255','63256'); +f('63257','63258','63259','63260'); +f('63261','63262','63263','63264'); +f('63265','63266','63267','63268'); +f('63269','63270','63271','63272'); +f('63273','63274','63275','63276'); +f('63277','63278','63279','63280'); +f('63281','63282','63283','63284'); +f('63285','63286','63287','63288'); +f('63289','63290','63291','63292'); +f('63293','63294','63295','63296'); +f('63297','63298','63299','63300'); +f('63301','63302','63303','63304'); +f('63305','63306','63307','63308'); +f('63309','63310','63311','63312'); +f('63313','63314','63315','63316'); +f('63317','63318','63319','63320'); +f('63321','63322','63323','63324'); +f('63325','63326','63327','63328'); +f('63329','63330','63331','63332'); +f('63333','63334','63335','63336'); +f('63337','63338','63339','63340'); +f('63341','63342','63343','63344'); +f('63345','63346','63347','63348'); +f('63349','63350','63351','63352'); +f('63353','63354','63355','63356'); +f('63357','63358','63359','63360'); +f('63361','63362','63363','63364'); +f('63365','63366','63367','63368'); +f('63369','63370','63371','63372'); +f('63373','63374','63375','63376'); +f('63377','63378','63379','63380'); +f('63381','63382','63383','63384'); +f('63385','63386','63387','63388'); +f('63389','63390','63391','63392'); +f('63393','63394','63395','63396'); +f('63397','63398','63399','63400'); +f('63401','63402','63403','63404'); +f('63405','63406','63407','63408'); +f('63409','63410','63411','63412'); +f('63413','63414','63415','63416'); +f('63417','63418','63419','63420'); +f('63421','63422','63423','63424'); +f('63425','63426','63427','63428'); +f('63429','63430','63431','63432'); +f('63433','63434','63435','63436'); +f('63437','63438','63439','63440'); +f('63441','63442','63443','63444'); +f('63445','63446','63447','63448'); +f('63449','63450','63451','63452'); +f('63453','63454','63455','63456'); +f('63457','63458','63459','63460'); +f('63461','63462','63463','63464'); +f('63465','63466','63467','63468'); +f('63469','63470','63471','63472'); +f('63473','63474','63475','63476'); +f('63477','63478','63479','63480'); +f('63481','63482','63483','63484'); +f('63485','63486','63487','63488'); +f('63489','63490','63491','63492'); +f('63493','63494','63495','63496'); +f('63497','63498','63499','63500'); +f('63501','63502','63503','63504'); +f('63505','63506','63507','63508'); +f('63509','63510','63511','63512'); +f('63513','63514','63515','63516'); +f('63517','63518','63519','63520'); +f('63521','63522','63523','63524'); +f('63525','63526','63527','63528'); +f('63529','63530','63531','63532'); +f('63533','63534','63535','63536'); +f('63537','63538','63539','63540'); +f('63541','63542','63543','63544'); +f('63545','63546','63547','63548'); +f('63549','63550','63551','63552'); +f('63553','63554','63555','63556'); +f('63557','63558','63559','63560'); +f('63561','63562','63563','63564'); +f('63565','63566','63567','63568'); +f('63569','63570','63571','63572'); +f('63573','63574','63575','63576'); +f('63577','63578','63579','63580'); +f('63581','63582','63583','63584'); +f('63585','63586','63587','63588'); +f('63589','63590','63591','63592'); +f('63593','63594','63595','63596'); +f('63597','63598','63599','63600'); +f('63601','63602','63603','63604'); +f('63605','63606','63607','63608'); +f('63609','63610','63611','63612'); +f('63613','63614','63615','63616'); +f('63617','63618','63619','63620'); +f('63621','63622','63623','63624'); +f('63625','63626','63627','63628'); +f('63629','63630','63631','63632'); +f('63633','63634','63635','63636'); +f('63637','63638','63639','63640'); +f('63641','63642','63643','63644'); +f('63645','63646','63647','63648'); +f('63649','63650','63651','63652'); +f('63653','63654','63655','63656'); +f('63657','63658','63659','63660'); +f('63661','63662','63663','63664'); +f('63665','63666','63667','63668'); +f('63669','63670','63671','63672'); +f('63673','63674','63675','63676'); +f('63677','63678','63679','63680'); +f('63681','63682','63683','63684'); +f('63685','63686','63687','63688'); +f('63689','63690','63691','63692'); +f('63693','63694','63695','63696'); +f('63697','63698','63699','63700'); +f('63701','63702','63703','63704'); +f('63705','63706','63707','63708'); +f('63709','63710','63711','63712'); +f('63713','63714','63715','63716'); +f('63717','63718','63719','63720'); +f('63721','63722','63723','63724'); +f('63725','63726','63727','63728'); +f('63729','63730','63731','63732'); +f('63733','63734','63735','63736'); +f('63737','63738','63739','63740'); +f('63741','63742','63743','63744'); +f('63745','63746','63747','63748'); +f('63749','63750','63751','63752'); +f('63753','63754','63755','63756'); +f('63757','63758','63759','63760'); +f('63761','63762','63763','63764'); +f('63765','63766','63767','63768'); +f('63769','63770','63771','63772'); +f('63773','63774','63775','63776'); +f('63777','63778','63779','63780'); +f('63781','63782','63783','63784'); +f('63785','63786','63787','63788'); +f('63789','63790','63791','63792'); +f('63793','63794','63795','63796'); +f('63797','63798','63799','63800'); +f('63801','63802','63803','63804'); +f('63805','63806','63807','63808'); +f('63809','63810','63811','63812'); +f('63813','63814','63815','63816'); +f('63817','63818','63819','63820'); +f('63821','63822','63823','63824'); +f('63825','63826','63827','63828'); +f('63829','63830','63831','63832'); +f('63833','63834','63835','63836'); +f('63837','63838','63839','63840'); +f('63841','63842','63843','63844'); +f('63845','63846','63847','63848'); +f('63849','63850','63851','63852'); +f('63853','63854','63855','63856'); +f('63857','63858','63859','63860'); +f('63861','63862','63863','63864'); +f('63865','63866','63867','63868'); +f('63869','63870','63871','63872'); +f('63873','63874','63875','63876'); +f('63877','63878','63879','63880'); +f('63881','63882','63883','63884'); +f('63885','63886','63887','63888'); +f('63889','63890','63891','63892'); +f('63893','63894','63895','63896'); +f('63897','63898','63899','63900'); +f('63901','63902','63903','63904'); +f('63905','63906','63907','63908'); +f('63909','63910','63911','63912'); +f('63913','63914','63915','63916'); +f('63917','63918','63919','63920'); +f('63921','63922','63923','63924'); +f('63925','63926','63927','63928'); +f('63929','63930','63931','63932'); +f('63933','63934','63935','63936'); +f('63937','63938','63939','63940'); +f('63941','63942','63943','63944'); +f('63945','63946','63947','63948'); +f('63949','63950','63951','63952'); +f('63953','63954','63955','63956'); +f('63957','63958','63959','63960'); +f('63961','63962','63963','63964'); +f('63965','63966','63967','63968'); +f('63969','63970','63971','63972'); +f('63973','63974','63975','63976'); +f('63977','63978','63979','63980'); +f('63981','63982','63983','63984'); +f('63985','63986','63987','63988'); +f('63989','63990','63991','63992'); +f('63993','63994','63995','63996'); +f('63997','63998','63999','64000'); +f('64001','64002','64003','64004'); +f('64005','64006','64007','64008'); +f('64009','64010','64011','64012'); +f('64013','64014','64015','64016'); +f('64017','64018','64019','64020'); +f('64021','64022','64023','64024'); +f('64025','64026','64027','64028'); +f('64029','64030','64031','64032'); +f('64033','64034','64035','64036'); +f('64037','64038','64039','64040'); +f('64041','64042','64043','64044'); +f('64045','64046','64047','64048'); +f('64049','64050','64051','64052'); +f('64053','64054','64055','64056'); +f('64057','64058','64059','64060'); +f('64061','64062','64063','64064'); +f('64065','64066','64067','64068'); +f('64069','64070','64071','64072'); +f('64073','64074','64075','64076'); +f('64077','64078','64079','64080'); +f('64081','64082','64083','64084'); +f('64085','64086','64087','64088'); +f('64089','64090','64091','64092'); +f('64093','64094','64095','64096'); +f('64097','64098','64099','64100'); +f('64101','64102','64103','64104'); +f('64105','64106','64107','64108'); +f('64109','64110','64111','64112'); +f('64113','64114','64115','64116'); +f('64117','64118','64119','64120'); +f('64121','64122','64123','64124'); +f('64125','64126','64127','64128'); +f('64129','64130','64131','64132'); +f('64133','64134','64135','64136'); +f('64137','64138','64139','64140'); +f('64141','64142','64143','64144'); +f('64145','64146','64147','64148'); +f('64149','64150','64151','64152'); +f('64153','64154','64155','64156'); +f('64157','64158','64159','64160'); +f('64161','64162','64163','64164'); +f('64165','64166','64167','64168'); +f('64169','64170','64171','64172'); +f('64173','64174','64175','64176'); +f('64177','64178','64179','64180'); +f('64181','64182','64183','64184'); +f('64185','64186','64187','64188'); +f('64189','64190','64191','64192'); +f('64193','64194','64195','64196'); +f('64197','64198','64199','64200'); +f('64201','64202','64203','64204'); +f('64205','64206','64207','64208'); +f('64209','64210','64211','64212'); +f('64213','64214','64215','64216'); +f('64217','64218','64219','64220'); +f('64221','64222','64223','64224'); +f('64225','64226','64227','64228'); +f('64229','64230','64231','64232'); +f('64233','64234','64235','64236'); +f('64237','64238','64239','64240'); +f('64241','64242','64243','64244'); +f('64245','64246','64247','64248'); +f('64249','64250','64251','64252'); +f('64253','64254','64255','64256'); +f('64257','64258','64259','64260'); +f('64261','64262','64263','64264'); +f('64265','64266','64267','64268'); +f('64269','64270','64271','64272'); +f('64273','64274','64275','64276'); +f('64277','64278','64279','64280'); +f('64281','64282','64283','64284'); +f('64285','64286','64287','64288'); +f('64289','64290','64291','64292'); +f('64293','64294','64295','64296'); +f('64297','64298','64299','64300'); +f('64301','64302','64303','64304'); +f('64305','64306','64307','64308'); +f('64309','64310','64311','64312'); +f('64313','64314','64315','64316'); +f('64317','64318','64319','64320'); +f('64321','64322','64323','64324'); +f('64325','64326','64327','64328'); +f('64329','64330','64331','64332'); +f('64333','64334','64335','64336'); +f('64337','64338','64339','64340'); +f('64341','64342','64343','64344'); +f('64345','64346','64347','64348'); +f('64349','64350','64351','64352'); +f('64353','64354','64355','64356'); +f('64357','64358','64359','64360'); +f('64361','64362','64363','64364'); +f('64365','64366','64367','64368'); +f('64369','64370','64371','64372'); +f('64373','64374','64375','64376'); +f('64377','64378','64379','64380'); +f('64381','64382','64383','64384'); +f('64385','64386','64387','64388'); +f('64389','64390','64391','64392'); +f('64393','64394','64395','64396'); +f('64397','64398','64399','64400'); +f('64401','64402','64403','64404'); +f('64405','64406','64407','64408'); +f('64409','64410','64411','64412'); +f('64413','64414','64415','64416'); +f('64417','64418','64419','64420'); +f('64421','64422','64423','64424'); +f('64425','64426','64427','64428'); +f('64429','64430','64431','64432'); +f('64433','64434','64435','64436'); +f('64437','64438','64439','64440'); +f('64441','64442','64443','64444'); +f('64445','64446','64447','64448'); +f('64449','64450','64451','64452'); +f('64453','64454','64455','64456'); +f('64457','64458','64459','64460'); +f('64461','64462','64463','64464'); +f('64465','64466','64467','64468'); +f('64469','64470','64471','64472'); +f('64473','64474','64475','64476'); +f('64477','64478','64479','64480'); +f('64481','64482','64483','64484'); +f('64485','64486','64487','64488'); +f('64489','64490','64491','64492'); +f('64493','64494','64495','64496'); +f('64497','64498','64499','64500'); +f('64501','64502','64503','64504'); +f('64505','64506','64507','64508'); +f('64509','64510','64511','64512'); +f('64513','64514','64515','64516'); +f('64517','64518','64519','64520'); +f('64521','64522','64523','64524'); +f('64525','64526','64527','64528'); +f('64529','64530','64531','64532'); +f('64533','64534','64535','64536'); +f('64537','64538','64539','64540'); +f('64541','64542','64543','64544'); +f('64545','64546','64547','64548'); +f('64549','64550','64551','64552'); +f('64553','64554','64555','64556'); +f('64557','64558','64559','64560'); +f('64561','64562','64563','64564'); +f('64565','64566','64567','64568'); +f('64569','64570','64571','64572'); +f('64573','64574','64575','64576'); +f('64577','64578','64579','64580'); +f('64581','64582','64583','64584'); +f('64585','64586','64587','64588'); +f('64589','64590','64591','64592'); +f('64593','64594','64595','64596'); +f('64597','64598','64599','64600'); +f('64601','64602','64603','64604'); +f('64605','64606','64607','64608'); +f('64609','64610','64611','64612'); +f('64613','64614','64615','64616'); +f('64617','64618','64619','64620'); +f('64621','64622','64623','64624'); +f('64625','64626','64627','64628'); +f('64629','64630','64631','64632'); +f('64633','64634','64635','64636'); +f('64637','64638','64639','64640'); +f('64641','64642','64643','64644'); +f('64645','64646','64647','64648'); +f('64649','64650','64651','64652'); +f('64653','64654','64655','64656'); +f('64657','64658','64659','64660'); +f('64661','64662','64663','64664'); +f('64665','64666','64667','64668'); +f('64669','64670','64671','64672'); +f('64673','64674','64675','64676'); +f('64677','64678','64679','64680'); +f('64681','64682','64683','64684'); +f('64685','64686','64687','64688'); +f('64689','64690','64691','64692'); +f('64693','64694','64695','64696'); +f('64697','64698','64699','64700'); +f('64701','64702','64703','64704'); +f('64705','64706','64707','64708'); +f('64709','64710','64711','64712'); +f('64713','64714','64715','64716'); +f('64717','64718','64719','64720'); +f('64721','64722','64723','64724'); +f('64725','64726','64727','64728'); +f('64729','64730','64731','64732'); +f('64733','64734','64735','64736'); +f('64737','64738','64739','64740'); +f('64741','64742','64743','64744'); +f('64745','64746','64747','64748'); +f('64749','64750','64751','64752'); +f('64753','64754','64755','64756'); +f('64757','64758','64759','64760'); +f('64761','64762','64763','64764'); +f('64765','64766','64767','64768'); +f('64769','64770','64771','64772'); +f('64773','64774','64775','64776'); +f('64777','64778','64779','64780'); +f('64781','64782','64783','64784'); +f('64785','64786','64787','64788'); +f('64789','64790','64791','64792'); +f('64793','64794','64795','64796'); +f('64797','64798','64799','64800'); +f('64801','64802','64803','64804'); +f('64805','64806','64807','64808'); +f('64809','64810','64811','64812'); +f('64813','64814','64815','64816'); +f('64817','64818','64819','64820'); +f('64821','64822','64823','64824'); +f('64825','64826','64827','64828'); +f('64829','64830','64831','64832'); +f('64833','64834','64835','64836'); +f('64837','64838','64839','64840'); +f('64841','64842','64843','64844'); +f('64845','64846','64847','64848'); +f('64849','64850','64851','64852'); +f('64853','64854','64855','64856'); +f('64857','64858','64859','64860'); +f('64861','64862','64863','64864'); +f('64865','64866','64867','64868'); +f('64869','64870','64871','64872'); +f('64873','64874','64875','64876'); +f('64877','64878','64879','64880'); +f('64881','64882','64883','64884'); +f('64885','64886','64887','64888'); +f('64889','64890','64891','64892'); +f('64893','64894','64895','64896'); +f('64897','64898','64899','64900'); +f('64901','64902','64903','64904'); +f('64905','64906','64907','64908'); +f('64909','64910','64911','64912'); +f('64913','64914','64915','64916'); +f('64917','64918','64919','64920'); +f('64921','64922','64923','64924'); +f('64925','64926','64927','64928'); +f('64929','64930','64931','64932'); +f('64933','64934','64935','64936'); +f('64937','64938','64939','64940'); +f('64941','64942','64943','64944'); +f('64945','64946','64947','64948'); +f('64949','64950','64951','64952'); +f('64953','64954','64955','64956'); +f('64957','64958','64959','64960'); +f('64961','64962','64963','64964'); +f('64965','64966','64967','64968'); +f('64969','64970','64971','64972'); +f('64973','64974','64975','64976'); +f('64977','64978','64979','64980'); +f('64981','64982','64983','64984'); +f('64985','64986','64987','64988'); +f('64989','64990','64991','64992'); +f('64993','64994','64995','64996'); +f('64997','64998','64999','65000'); +f('65001','65002','65003','65004'); +f('65005','65006','65007','65008'); +f('65009','65010','65011','65012'); +f('65013','65014','65015','65016'); +f('65017','65018','65019','65020'); +f('65021','65022','65023','65024'); +f('65025','65026','65027','65028'); +f('65029','65030','65031','65032'); +f('65033','65034','65035','65036'); +f('65037','65038','65039','65040'); +f('65041','65042','65043','65044'); +f('65045','65046','65047','65048'); +f('65049','65050','65051','65052'); +f('65053','65054','65055','65056'); +f('65057','65058','65059','65060'); +f('65061','65062','65063','65064'); +f('65065','65066','65067','65068'); +f('65069','65070','65071','65072'); +f('65073','65074','65075','65076'); +f('65077','65078','65079','65080'); +f('65081','65082','65083','65084'); +f('65085','65086','65087','65088'); +f('65089','65090','65091','65092'); +f('65093','65094','65095','65096'); +f('65097','65098','65099','65100'); +f('65101','65102','65103','65104'); +f('65105','65106','65107','65108'); +f('65109','65110','65111','65112'); +f('65113','65114','65115','65116'); +f('65117','65118','65119','65120'); +f('65121','65122','65123','65124'); +f('65125','65126','65127','65128'); +f('65129','65130','65131','65132'); +f('65133','65134','65135','65136'); +f('65137','65138','65139','65140'); +f('65141','65142','65143','65144'); +f('65145','65146','65147','65148'); +f('65149','65150','65151','65152'); +f('65153','65154','65155','65156'); +f('65157','65158','65159','65160'); +f('65161','65162','65163','65164'); +f('65165','65166','65167','65168'); +f('65169','65170','65171','65172'); +f('65173','65174','65175','65176'); +f('65177','65178','65179','65180'); +f('65181','65182','65183','65184'); +f('65185','65186','65187','65188'); +f('65189','65190','65191','65192'); +f('65193','65194','65195','65196'); +f('65197','65198','65199','65200'); +f('65201','65202','65203','65204'); +f('65205','65206','65207','65208'); +f('65209','65210','65211','65212'); +f('65213','65214','65215','65216'); +f('65217','65218','65219','65220'); +f('65221','65222','65223','65224'); +f('65225','65226','65227','65228'); +f('65229','65230','65231','65232'); +f('65233','65234','65235','65236'); +f('65237','65238','65239','65240'); +f('65241','65242','65243','65244'); +f('65245','65246','65247','65248'); +f('65249','65250','65251','65252'); +f('65253','65254','65255','65256'); +f('65257','65258','65259','65260'); +f('65261','65262','65263','65264'); +f('65265','65266','65267','65268'); +f('65269','65270','65271','65272'); +f('65273','65274','65275','65276'); +f('65277','65278','65279','65280'); +f('65281','65282','65283','65284'); +f('65285','65286','65287','65288'); +f('65289','65290','65291','65292'); +f('65293','65294','65295','65296'); +f('65297','65298','65299','65300'); +f('65301','65302','65303','65304'); +f('65305','65306','65307','65308'); +f('65309','65310','65311','65312'); +f('65313','65314','65315','65316'); +f('65317','65318','65319','65320'); +f('65321','65322','65323','65324'); +f('65325','65326','65327','65328'); +f('65329','65330','65331','65332'); +f('65333','65334','65335','65336'); +f('65337','65338','65339','65340'); +f('65341','65342','65343','65344'); +f('65345','65346','65347','65348'); +f('65349','65350','65351','65352'); +f('65353','65354','65355','65356'); +f('65357','65358','65359','65360'); +f('65361','65362','65363','65364'); +f('65365','65366','65367','65368'); +f('65369','65370','65371','65372'); +f('65373','65374','65375','65376'); +f('65377','65378','65379','65380'); +f('65381','65382','65383','65384'); +f('65385','65386','65387','65388'); +f('65389','65390','65391','65392'); +f('65393','65394','65395','65396'); +f('65397','65398','65399','65400'); +f('65401','65402','65403','65404'); +f('65405','65406','65407','65408'); +f('65409','65410','65411','65412'); +f('65413','65414','65415','65416'); +f('65417','65418','65419','65420'); +f('65421','65422','65423','65424'); +f('65425','65426','65427','65428'); +f('65429','65430','65431','65432'); +f('65433','65434','65435','65436'); +f('65437','65438','65439','65440'); +f('65441','65442','65443','65444'); +f('65445','65446','65447','65448'); +f('65449','65450','65451','65452'); +f('65453','65454','65455','65456'); +f('65457','65458','65459','65460'); +f('65461','65462','65463','65464'); +f('65465','65466','65467','65468'); +f('65469','65470','65471','65472'); +f('65473','65474','65475','65476'); +f('65477','65478','65479','65480'); +f('65481','65482','65483','65484'); +f('65485','65486','65487','65488'); +f('65489','65490','65491','65492'); +f('65493','65494','65495','65496'); +f('65497','65498','65499','65500'); +f('65501','65502','65503','65504'); +f('65505','65506','65507','65508'); +f('65509','65510','65511','65512'); +f('65513','65514','65515','65516'); +f('65517','65518','65519','65520'); +f('65521','65522','65523','65524'); +f('65525','65526','65527','65528'); +f('65529','65530','65531','65532'); +f('65533','65534','65535','65536'); +f('65537','65538','65539','65540'); +f('65541','65542','65543','65544'); +f('65545','65546','65547','65548'); +f('65549','65550','65551','65552'); +f('65553','65554','65555','65556'); +f('65557','65558','65559','65560'); +f('65561','65562','65563','65564'); +f('65565','65566','65567','65568'); +f('65569','65570','65571','65572'); +f('65573','65574','65575','65576'); +f('65577','65578','65579','65580'); +f('65581','65582','65583','65584'); +f('65585','65586','65587','65588'); +f('65589','65590','65591','65592'); +f('65593','65594','65595','65596'); +f('65597','65598','65599','65600'); +f('65601','65602','65603','65604'); +f('65605','65606','65607','65608'); +f('65609','65610','65611','65612'); +f('65613','65614','65615','65616'); +f('65617','65618','65619','65620'); +f('65621','65622','65623','65624'); +f('65625','65626','65627','65628'); +f('65629','65630','65631','65632'); +f('65633','65634','65635','65636'); +f('65637','65638','65639','65640'); +f('65641','65642','65643','65644'); +f('65645','65646','65647','65648'); +f('65649','65650','65651','65652'); +f('65653','65654','65655','65656'); +f('65657','65658','65659','65660'); +f('65661','65662','65663','65664'); +f('65665','65666','65667','65668'); +f('65669','65670','65671','65672'); +f('65673','65674','65675','65676'); +f('65677','65678','65679','65680'); +f('65681','65682','65683','65684'); +f('65685','65686','65687','65688'); +f('65689','65690','65691','65692'); +f('65693','65694','65695','65696'); +f('65697','65698','65699','65700'); +f('65701','65702','65703','65704'); +f('65705','65706','65707','65708'); +f('65709','65710','65711','65712'); +f('65713','65714','65715','65716'); +f('65717','65718','65719','65720'); +f('65721','65722','65723','65724'); +f('65725','65726','65727','65728'); +f('65729','65730','65731','65732'); +f('65733','65734','65735','65736'); +f('65737','65738','65739','65740'); +f('65741','65742','65743','65744'); +f('65745','65746','65747','65748'); +f('65749','65750','65751','65752'); +f('65753','65754','65755','65756'); +f('65757','65758','65759','65760'); +f('65761','65762','65763','65764'); +f('65765','65766','65767','65768'); +f('65769','65770','65771','65772'); +f('65773','65774','65775','65776'); +f('65777','65778','65779','65780'); +f('65781','65782','65783','65784'); +f('65785','65786','65787','65788'); +f('65789','65790','65791','65792'); +f('65793','65794','65795','65796'); +f('65797','65798','65799','65800'); +f('65801','65802','65803','65804'); +f('65805','65806','65807','65808'); +f('65809','65810','65811','65812'); +f('65813','65814','65815','65816'); +f('65817','65818','65819','65820'); +f('65821','65822','65823','65824'); +f('65825','65826','65827','65828'); +f('65829','65830','65831','65832'); +f('65833','65834','65835','65836'); +f('65837','65838','65839','65840'); +f('65841','65842','65843','65844'); +f('65845','65846','65847','65848'); +f('65849','65850','65851','65852'); +f('65853','65854','65855','65856'); +f('65857','65858','65859','65860'); +f('65861','65862','65863','65864'); +f('65865','65866','65867','65868'); +f('65869','65870','65871','65872'); +f('65873','65874','65875','65876'); +f('65877','65878','65879','65880'); +f('65881','65882','65883','65884'); +f('65885','65886','65887','65888'); +f('65889','65890','65891','65892'); +f('65893','65894','65895','65896'); +f('65897','65898','65899','65900'); +f('65901','65902','65903','65904'); +f('65905','65906','65907','65908'); +f('65909','65910','65911','65912'); +f('65913','65914','65915','65916'); +f('65917','65918','65919','65920'); +f('65921','65922','65923','65924'); +f('65925','65926','65927','65928'); +f('65929','65930','65931','65932'); +f('65933','65934','65935','65936'); +f('65937','65938','65939','65940'); +f('65941','65942','65943','65944'); +f('65945','65946','65947','65948'); +f('65949','65950','65951','65952'); +f('65953','65954','65955','65956'); +f('65957','65958','65959','65960'); +f('65961','65962','65963','65964'); +f('65965','65966','65967','65968'); +f('65969','65970','65971','65972'); +f('65973','65974','65975','65976'); +f('65977','65978','65979','65980'); +f('65981','65982','65983','65984'); +f('65985','65986','65987','65988'); +f('65989','65990','65991','65992'); +f('65993','65994','65995','65996'); +f('65997','65998','65999','66000'); +f('66001','66002','66003','66004'); +f('66005','66006','66007','66008'); +f('66009','66010','66011','66012'); +f('66013','66014','66015','66016'); +f('66017','66018','66019','66020'); +f('66021','66022','66023','66024'); +f('66025','66026','66027','66028'); +f('66029','66030','66031','66032'); +f('66033','66034','66035','66036'); +f('66037','66038','66039','66040'); +f('66041','66042','66043','66044'); +f('66045','66046','66047','66048'); +f('66049','66050','66051','66052'); +f('66053','66054','66055','66056'); +f('66057','66058','66059','66060'); +f('66061','66062','66063','66064'); +f('66065','66066','66067','66068'); +f('66069','66070','66071','66072'); +f('66073','66074','66075','66076'); +f('66077','66078','66079','66080'); +f('66081','66082','66083','66084'); +f('66085','66086','66087','66088'); +f('66089','66090','66091','66092'); +f('66093','66094','66095','66096'); +f('66097','66098','66099','66100'); +f('66101','66102','66103','66104'); +f('66105','66106','66107','66108'); +f('66109','66110','66111','66112'); +f('66113','66114','66115','66116'); +f('66117','66118','66119','66120'); +f('66121','66122','66123','66124'); +f('66125','66126','66127','66128'); +f('66129','66130','66131','66132'); +f('66133','66134','66135','66136'); +f('66137','66138','66139','66140'); +f('66141','66142','66143','66144'); +f('66145','66146','66147','66148'); +f('66149','66150','66151','66152'); +f('66153','66154','66155','66156'); +f('66157','66158','66159','66160'); +f('66161','66162','66163','66164'); +f('66165','66166','66167','66168'); +f('66169','66170','66171','66172'); +f('66173','66174','66175','66176'); +f('66177','66178','66179','66180'); +f('66181','66182','66183','66184'); +f('66185','66186','66187','66188'); +f('66189','66190','66191','66192'); +f('66193','66194','66195','66196'); +f('66197','66198','66199','66200'); +f('66201','66202','66203','66204'); +f('66205','66206','66207','66208'); +f('66209','66210','66211','66212'); +f('66213','66214','66215','66216'); +f('66217','66218','66219','66220'); +f('66221','66222','66223','66224'); +f('66225','66226','66227','66228'); +f('66229','66230','66231','66232'); +f('66233','66234','66235','66236'); +f('66237','66238','66239','66240'); +f('66241','66242','66243','66244'); +f('66245','66246','66247','66248'); +f('66249','66250','66251','66252'); +f('66253','66254','66255','66256'); +f('66257','66258','66259','66260'); +f('66261','66262','66263','66264'); +f('66265','66266','66267','66268'); +f('66269','66270','66271','66272'); +f('66273','66274','66275','66276'); +f('66277','66278','66279','66280'); +f('66281','66282','66283','66284'); +f('66285','66286','66287','66288'); +f('66289','66290','66291','66292'); +f('66293','66294','66295','66296'); +f('66297','66298','66299','66300'); +f('66301','66302','66303','66304'); +f('66305','66306','66307','66308'); +f('66309','66310','66311','66312'); +f('66313','66314','66315','66316'); +f('66317','66318','66319','66320'); +f('66321','66322','66323','66324'); +f('66325','66326','66327','66328'); +f('66329','66330','66331','66332'); +f('66333','66334','66335','66336'); +f('66337','66338','66339','66340'); +f('66341','66342','66343','66344'); +f('66345','66346','66347','66348'); +f('66349','66350','66351','66352'); +f('66353','66354','66355','66356'); +f('66357','66358','66359','66360'); +f('66361','66362','66363','66364'); +f('66365','66366','66367','66368'); +f('66369','66370','66371','66372'); +f('66373','66374','66375','66376'); +f('66377','66378','66379','66380'); +f('66381','66382','66383','66384'); +f('66385','66386','66387','66388'); +f('66389','66390','66391','66392'); +f('66393','66394','66395','66396'); +f('66397','66398','66399','66400'); +f('66401','66402','66403','66404'); +f('66405','66406','66407','66408'); +f('66409','66410','66411','66412'); +f('66413','66414','66415','66416'); +f('66417','66418','66419','66420'); +f('66421','66422','66423','66424'); +f('66425','66426','66427','66428'); +f('66429','66430','66431','66432'); +f('66433','66434','66435','66436'); +f('66437','66438','66439','66440'); +f('66441','66442','66443','66444'); +f('66445','66446','66447','66448'); +f('66449','66450','66451','66452'); +f('66453','66454','66455','66456'); +f('66457','66458','66459','66460'); +f('66461','66462','66463','66464'); +f('66465','66466','66467','66468'); +f('66469','66470','66471','66472'); +f('66473','66474','66475','66476'); +f('66477','66478','66479','66480'); +f('66481','66482','66483','66484'); +f('66485','66486','66487','66488'); +f('66489','66490','66491','66492'); +f('66493','66494','66495','66496'); +f('66497','66498','66499','66500'); +f('66501','66502','66503','66504'); +f('66505','66506','66507','66508'); +f('66509','66510','66511','66512'); +f('66513','66514','66515','66516'); +f('66517','66518','66519','66520'); +f('66521','66522','66523','66524'); +f('66525','66526','66527','66528'); +f('66529','66530','66531','66532'); +f('66533','66534','66535','66536'); +f('66537','66538','66539','66540'); +f('66541','66542','66543','66544'); +f('66545','66546','66547','66548'); +f('66549','66550','66551','66552'); +f('66553','66554','66555','66556'); +f('66557','66558','66559','66560'); +f('66561','66562','66563','66564'); +f('66565','66566','66567','66568'); +f('66569','66570','66571','66572'); +f('66573','66574','66575','66576'); +f('66577','66578','66579','66580'); +f('66581','66582','66583','66584'); +f('66585','66586','66587','66588'); +f('66589','66590','66591','66592'); +f('66593','66594','66595','66596'); +f('66597','66598','66599','66600'); +f('66601','66602','66603','66604'); +f('66605','66606','66607','66608'); +f('66609','66610','66611','66612'); +f('66613','66614','66615','66616'); +f('66617','66618','66619','66620'); +f('66621','66622','66623','66624'); +f('66625','66626','66627','66628'); +f('66629','66630','66631','66632'); +f('66633','66634','66635','66636'); +f('66637','66638','66639','66640'); +f('66641','66642','66643','66644'); +f('66645','66646','66647','66648'); +f('66649','66650','66651','66652'); +f('66653','66654','66655','66656'); +f('66657','66658','66659','66660'); +f('66661','66662','66663','66664'); +f('66665','66666','66667','66668'); +f('66669','66670','66671','66672'); +f('66673','66674','66675','66676'); +f('66677','66678','66679','66680'); +f('66681','66682','66683','66684'); +f('66685','66686','66687','66688'); +f('66689','66690','66691','66692'); +f('66693','66694','66695','66696'); +f('66697','66698','66699','66700'); +f('66701','66702','66703','66704'); +f('66705','66706','66707','66708'); +f('66709','66710','66711','66712'); +f('66713','66714','66715','66716'); +f('66717','66718','66719','66720'); +f('66721','66722','66723','66724'); +f('66725','66726','66727','66728'); +f('66729','66730','66731','66732'); +f('66733','66734','66735','66736'); +f('66737','66738','66739','66740'); +f('66741','66742','66743','66744'); +f('66745','66746','66747','66748'); +f('66749','66750','66751','66752'); +f('66753','66754','66755','66756'); +f('66757','66758','66759','66760'); +f('66761','66762','66763','66764'); +f('66765','66766','66767','66768'); +f('66769','66770','66771','66772'); +f('66773','66774','66775','66776'); +f('66777','66778','66779','66780'); +f('66781','66782','66783','66784'); +f('66785','66786','66787','66788'); +f('66789','66790','66791','66792'); +f('66793','66794','66795','66796'); +f('66797','66798','66799','66800'); +f('66801','66802','66803','66804'); +f('66805','66806','66807','66808'); +f('66809','66810','66811','66812'); +f('66813','66814','66815','66816'); +f('66817','66818','66819','66820'); +f('66821','66822','66823','66824'); +f('66825','66826','66827','66828'); +f('66829','66830','66831','66832'); +f('66833','66834','66835','66836'); +f('66837','66838','66839','66840'); +f('66841','66842','66843','66844'); +f('66845','66846','66847','66848'); +f('66849','66850','66851','66852'); +f('66853','66854','66855','66856'); +f('66857','66858','66859','66860'); +f('66861','66862','66863','66864'); +f('66865','66866','66867','66868'); +f('66869','66870','66871','66872'); +f('66873','66874','66875','66876'); +f('66877','66878','66879','66880'); +f('66881','66882','66883','66884'); +f('66885','66886','66887','66888'); +f('66889','66890','66891','66892'); +f('66893','66894','66895','66896'); +f('66897','66898','66899','66900'); +f('66901','66902','66903','66904'); +f('66905','66906','66907','66908'); +f('66909','66910','66911','66912'); +f('66913','66914','66915','66916'); +f('66917','66918','66919','66920'); +f('66921','66922','66923','66924'); +f('66925','66926','66927','66928'); +f('66929','66930','66931','66932'); +f('66933','66934','66935','66936'); +f('66937','66938','66939','66940'); +f('66941','66942','66943','66944'); +f('66945','66946','66947','66948'); +f('66949','66950','66951','66952'); +f('66953','66954','66955','66956'); +f('66957','66958','66959','66960'); +f('66961','66962','66963','66964'); +f('66965','66966','66967','66968'); +f('66969','66970','66971','66972'); +f('66973','66974','66975','66976'); +f('66977','66978','66979','66980'); +f('66981','66982','66983','66984'); +f('66985','66986','66987','66988'); +f('66989','66990','66991','66992'); +f('66993','66994','66995','66996'); +f('66997','66998','66999','67000'); +f('67001','67002','67003','67004'); +f('67005','67006','67007','67008'); +f('67009','67010','67011','67012'); +f('67013','67014','67015','67016'); +f('67017','67018','67019','67020'); +f('67021','67022','67023','67024'); +f('67025','67026','67027','67028'); +f('67029','67030','67031','67032'); +f('67033','67034','67035','67036'); +f('67037','67038','67039','67040'); +f('67041','67042','67043','67044'); +f('67045','67046','67047','67048'); +f('67049','67050','67051','67052'); +f('67053','67054','67055','67056'); +f('67057','67058','67059','67060'); +f('67061','67062','67063','67064'); +f('67065','67066','67067','67068'); +f('67069','67070','67071','67072'); +f('67073','67074','67075','67076'); +f('67077','67078','67079','67080'); +f('67081','67082','67083','67084'); +f('67085','67086','67087','67088'); +f('67089','67090','67091','67092'); +f('67093','67094','67095','67096'); +f('67097','67098','67099','67100'); +f('67101','67102','67103','67104'); +f('67105','67106','67107','67108'); +f('67109','67110','67111','67112'); +f('67113','67114','67115','67116'); +f('67117','67118','67119','67120'); +f('67121','67122','67123','67124'); +f('67125','67126','67127','67128'); +f('67129','67130','67131','67132'); +f('67133','67134','67135','67136'); +f('67137','67138','67139','67140'); +f('67141','67142','67143','67144'); +f('67145','67146','67147','67148'); +f('67149','67150','67151','67152'); +f('67153','67154','67155','67156'); +f('67157','67158','67159','67160'); +f('67161','67162','67163','67164'); +f('67165','67166','67167','67168'); +f('67169','67170','67171','67172'); +f('67173','67174','67175','67176'); +f('67177','67178','67179','67180'); +f('67181','67182','67183','67184'); +f('67185','67186','67187','67188'); +f('67189','67190','67191','67192'); +f('67193','67194','67195','67196'); +f('67197','67198','67199','67200'); +f('67201','67202','67203','67204'); +f('67205','67206','67207','67208'); +f('67209','67210','67211','67212'); +f('67213','67214','67215','67216'); +f('67217','67218','67219','67220'); +f('67221','67222','67223','67224'); +f('67225','67226','67227','67228'); +f('67229','67230','67231','67232'); +f('67233','67234','67235','67236'); +f('67237','67238','67239','67240'); +f('67241','67242','67243','67244'); +f('67245','67246','67247','67248'); +f('67249','67250','67251','67252'); +f('67253','67254','67255','67256'); +f('67257','67258','67259','67260'); +f('67261','67262','67263','67264'); +f('67265','67266','67267','67268'); +f('67269','67270','67271','67272'); +f('67273','67274','67275','67276'); +f('67277','67278','67279','67280'); +f('67281','67282','67283','67284'); +f('67285','67286','67287','67288'); +f('67289','67290','67291','67292'); +f('67293','67294','67295','67296'); +f('67297','67298','67299','67300'); +f('67301','67302','67303','67304'); +f('67305','67306','67307','67308'); +f('67309','67310','67311','67312'); +f('67313','67314','67315','67316'); +f('67317','67318','67319','67320'); +f('67321','67322','67323','67324'); +f('67325','67326','67327','67328'); +f('67329','67330','67331','67332'); +f('67333','67334','67335','67336'); +f('67337','67338','67339','67340'); +f('67341','67342','67343','67344'); +f('67345','67346','67347','67348'); +f('67349','67350','67351','67352'); +f('67353','67354','67355','67356'); +f('67357','67358','67359','67360'); +f('67361','67362','67363','67364'); +f('67365','67366','67367','67368'); +f('67369','67370','67371','67372'); +f('67373','67374','67375','67376'); +f('67377','67378','67379','67380'); +f('67381','67382','67383','67384'); +f('67385','67386','67387','67388'); +f('67389','67390','67391','67392'); +f('67393','67394','67395','67396'); +f('67397','67398','67399','67400'); +f('67401','67402','67403','67404'); +f('67405','67406','67407','67408'); +f('67409','67410','67411','67412'); +f('67413','67414','67415','67416'); +f('67417','67418','67419','67420'); +f('67421','67422','67423','67424'); +f('67425','67426','67427','67428'); +f('67429','67430','67431','67432'); +f('67433','67434','67435','67436'); +f('67437','67438','67439','67440'); +f('67441','67442','67443','67444'); +f('67445','67446','67447','67448'); +f('67449','67450','67451','67452'); +f('67453','67454','67455','67456'); +f('67457','67458','67459','67460'); +f('67461','67462','67463','67464'); +f('67465','67466','67467','67468'); +f('67469','67470','67471','67472'); +f('67473','67474','67475','67476'); +f('67477','67478','67479','67480'); +f('67481','67482','67483','67484'); +f('67485','67486','67487','67488'); +f('67489','67490','67491','67492'); +f('67493','67494','67495','67496'); +f('67497','67498','67499','67500'); +f('67501','67502','67503','67504'); +f('67505','67506','67507','67508'); +f('67509','67510','67511','67512'); +f('67513','67514','67515','67516'); +f('67517','67518','67519','67520'); +f('67521','67522','67523','67524'); +f('67525','67526','67527','67528'); +f('67529','67530','67531','67532'); +f('67533','67534','67535','67536'); +f('67537','67538','67539','67540'); +f('67541','67542','67543','67544'); +f('67545','67546','67547','67548'); +f('67549','67550','67551','67552'); +f('67553','67554','67555','67556'); +f('67557','67558','67559','67560'); +f('67561','67562','67563','67564'); +f('67565','67566','67567','67568'); +f('67569','67570','67571','67572'); +f('67573','67574','67575','67576'); +f('67577','67578','67579','67580'); +f('67581','67582','67583','67584'); +f('67585','67586','67587','67588'); +f('67589','67590','67591','67592'); +f('67593','67594','67595','67596'); +f('67597','67598','67599','67600'); +f('67601','67602','67603','67604'); +f('67605','67606','67607','67608'); +f('67609','67610','67611','67612'); +f('67613','67614','67615','67616'); +f('67617','67618','67619','67620'); +f('67621','67622','67623','67624'); +f('67625','67626','67627','67628'); +f('67629','67630','67631','67632'); +f('67633','67634','67635','67636'); +f('67637','67638','67639','67640'); +f('67641','67642','67643','67644'); +f('67645','67646','67647','67648'); +f('67649','67650','67651','67652'); +f('67653','67654','67655','67656'); +f('67657','67658','67659','67660'); +f('67661','67662','67663','67664'); +f('67665','67666','67667','67668'); +f('67669','67670','67671','67672'); +f('67673','67674','67675','67676'); +f('67677','67678','67679','67680'); +f('67681','67682','67683','67684'); +f('67685','67686','67687','67688'); +f('67689','67690','67691','67692'); +f('67693','67694','67695','67696'); +f('67697','67698','67699','67700'); +f('67701','67702','67703','67704'); +f('67705','67706','67707','67708'); +f('67709','67710','67711','67712'); +f('67713','67714','67715','67716'); +f('67717','67718','67719','67720'); +f('67721','67722','67723','67724'); +f('67725','67726','67727','67728'); +f('67729','67730','67731','67732'); +f('67733','67734','67735','67736'); +f('67737','67738','67739','67740'); +f('67741','67742','67743','67744'); +f('67745','67746','67747','67748'); +f('67749','67750','67751','67752'); +f('67753','67754','67755','67756'); +f('67757','67758','67759','67760'); +f('67761','67762','67763','67764'); +f('67765','67766','67767','67768'); +f('67769','67770','67771','67772'); +f('67773','67774','67775','67776'); +f('67777','67778','67779','67780'); +f('67781','67782','67783','67784'); +f('67785','67786','67787','67788'); +f('67789','67790','67791','67792'); +f('67793','67794','67795','67796'); +f('67797','67798','67799','67800'); +f('67801','67802','67803','67804'); +f('67805','67806','67807','67808'); +f('67809','67810','67811','67812'); +f('67813','67814','67815','67816'); +f('67817','67818','67819','67820'); +f('67821','67822','67823','67824'); +f('67825','67826','67827','67828'); +f('67829','67830','67831','67832'); +f('67833','67834','67835','67836'); +f('67837','67838','67839','67840'); +f('67841','67842','67843','67844'); +f('67845','67846','67847','67848'); +f('67849','67850','67851','67852'); +f('67853','67854','67855','67856'); +f('67857','67858','67859','67860'); +f('67861','67862','67863','67864'); +f('67865','67866','67867','67868'); +f('67869','67870','67871','67872'); +f('67873','67874','67875','67876'); +f('67877','67878','67879','67880'); +f('67881','67882','67883','67884'); +f('67885','67886','67887','67888'); +f('67889','67890','67891','67892'); +f('67893','67894','67895','67896'); +f('67897','67898','67899','67900'); +f('67901','67902','67903','67904'); +f('67905','67906','67907','67908'); +f('67909','67910','67911','67912'); +f('67913','67914','67915','67916'); +f('67917','67918','67919','67920'); +f('67921','67922','67923','67924'); +f('67925','67926','67927','67928'); +f('67929','67930','67931','67932'); +f('67933','67934','67935','67936'); +f('67937','67938','67939','67940'); +f('67941','67942','67943','67944'); +f('67945','67946','67947','67948'); +f('67949','67950','67951','67952'); +f('67953','67954','67955','67956'); +f('67957','67958','67959','67960'); +f('67961','67962','67963','67964'); +f('67965','67966','67967','67968'); +f('67969','67970','67971','67972'); +f('67973','67974','67975','67976'); +f('67977','67978','67979','67980'); +f('67981','67982','67983','67984'); +f('67985','67986','67987','67988'); +f('67989','67990','67991','67992'); +f('67993','67994','67995','67996'); +f('67997','67998','67999','68000'); +f('68001','68002','68003','68004'); +f('68005','68006','68007','68008'); +f('68009','68010','68011','68012'); +f('68013','68014','68015','68016'); +f('68017','68018','68019','68020'); +f('68021','68022','68023','68024'); +f('68025','68026','68027','68028'); +f('68029','68030','68031','68032'); +f('68033','68034','68035','68036'); +f('68037','68038','68039','68040'); +f('68041','68042','68043','68044'); +f('68045','68046','68047','68048'); +f('68049','68050','68051','68052'); +f('68053','68054','68055','68056'); +f('68057','68058','68059','68060'); +f('68061','68062','68063','68064'); +f('68065','68066','68067','68068'); +f('68069','68070','68071','68072'); +f('68073','68074','68075','68076'); +f('68077','68078','68079','68080'); +f('68081','68082','68083','68084'); +f('68085','68086','68087','68088'); +f('68089','68090','68091','68092'); +f('68093','68094','68095','68096'); +f('68097','68098','68099','68100'); +f('68101','68102','68103','68104'); +f('68105','68106','68107','68108'); +f('68109','68110','68111','68112'); +f('68113','68114','68115','68116'); +f('68117','68118','68119','68120'); +f('68121','68122','68123','68124'); +f('68125','68126','68127','68128'); +f('68129','68130','68131','68132'); +f('68133','68134','68135','68136'); +f('68137','68138','68139','68140'); +f('68141','68142','68143','68144'); +f('68145','68146','68147','68148'); +f('68149','68150','68151','68152'); +f('68153','68154','68155','68156'); +f('68157','68158','68159','68160'); +f('68161','68162','68163','68164'); +f('68165','68166','68167','68168'); +f('68169','68170','68171','68172'); +f('68173','68174','68175','68176'); +f('68177','68178','68179','68180'); +f('68181','68182','68183','68184'); +f('68185','68186','68187','68188'); +f('68189','68190','68191','68192'); +f('68193','68194','68195','68196'); +f('68197','68198','68199','68200'); +f('68201','68202','68203','68204'); +f('68205','68206','68207','68208'); +f('68209','68210','68211','68212'); +f('68213','68214','68215','68216'); +f('68217','68218','68219','68220'); +f('68221','68222','68223','68224'); +f('68225','68226','68227','68228'); +f('68229','68230','68231','68232'); +f('68233','68234','68235','68236'); +f('68237','68238','68239','68240'); +f('68241','68242','68243','68244'); +f('68245','68246','68247','68248'); +f('68249','68250','68251','68252'); +f('68253','68254','68255','68256'); +f('68257','68258','68259','68260'); +f('68261','68262','68263','68264'); +f('68265','68266','68267','68268'); +f('68269','68270','68271','68272'); +f('68273','68274','68275','68276'); +f('68277','68278','68279','68280'); +f('68281','68282','68283','68284'); +f('68285','68286','68287','68288'); +f('68289','68290','68291','68292'); +f('68293','68294','68295','68296'); +f('68297','68298','68299','68300'); +f('68301','68302','68303','68304'); +f('68305','68306','68307','68308'); +f('68309','68310','68311','68312'); +f('68313','68314','68315','68316'); +f('68317','68318','68319','68320'); +f('68321','68322','68323','68324'); +f('68325','68326','68327','68328'); +f('68329','68330','68331','68332'); +f('68333','68334','68335','68336'); +f('68337','68338','68339','68340'); +f('68341','68342','68343','68344'); +f('68345','68346','68347','68348'); +f('68349','68350','68351','68352'); +f('68353','68354','68355','68356'); +f('68357','68358','68359','68360'); +f('68361','68362','68363','68364'); +f('68365','68366','68367','68368'); +f('68369','68370','68371','68372'); +f('68373','68374','68375','68376'); +f('68377','68378','68379','68380'); +f('68381','68382','68383','68384'); +f('68385','68386','68387','68388'); +f('68389','68390','68391','68392'); +f('68393','68394','68395','68396'); +f('68397','68398','68399','68400'); +f('68401','68402','68403','68404'); +f('68405','68406','68407','68408'); +f('68409','68410','68411','68412'); +f('68413','68414','68415','68416'); +f('68417','68418','68419','68420'); +f('68421','68422','68423','68424'); +f('68425','68426','68427','68428'); +f('68429','68430','68431','68432'); +f('68433','68434','68435','68436'); +f('68437','68438','68439','68440'); +f('68441','68442','68443','68444'); +f('68445','68446','68447','68448'); +f('68449','68450','68451','68452'); +f('68453','68454','68455','68456'); +f('68457','68458','68459','68460'); +f('68461','68462','68463','68464'); +f('68465','68466','68467','68468'); +f('68469','68470','68471','68472'); +f('68473','68474','68475','68476'); +f('68477','68478','68479','68480'); +f('68481','68482','68483','68484'); +f('68485','68486','68487','68488'); +f('68489','68490','68491','68492'); +f('68493','68494','68495','68496'); +f('68497','68498','68499','68500'); +f('68501','68502','68503','68504'); +f('68505','68506','68507','68508'); +f('68509','68510','68511','68512'); +f('68513','68514','68515','68516'); +f('68517','68518','68519','68520'); +f('68521','68522','68523','68524'); +f('68525','68526','68527','68528'); +f('68529','68530','68531','68532'); +f('68533','68534','68535','68536'); +f('68537','68538','68539','68540'); +f('68541','68542','68543','68544'); +f('68545','68546','68547','68548'); +f('68549','68550','68551','68552'); +f('68553','68554','68555','68556'); +f('68557','68558','68559','68560'); +f('68561','68562','68563','68564'); +f('68565','68566','68567','68568'); +f('68569','68570','68571','68572'); +f('68573','68574','68575','68576'); +f('68577','68578','68579','68580'); +f('68581','68582','68583','68584'); +f('68585','68586','68587','68588'); +f('68589','68590','68591','68592'); +f('68593','68594','68595','68596'); +f('68597','68598','68599','68600'); +f('68601','68602','68603','68604'); +f('68605','68606','68607','68608'); +f('68609','68610','68611','68612'); +f('68613','68614','68615','68616'); +f('68617','68618','68619','68620'); +f('68621','68622','68623','68624'); +f('68625','68626','68627','68628'); +f('68629','68630','68631','68632'); +f('68633','68634','68635','68636'); +f('68637','68638','68639','68640'); +f('68641','68642','68643','68644'); +f('68645','68646','68647','68648'); +f('68649','68650','68651','68652'); +f('68653','68654','68655','68656'); +f('68657','68658','68659','68660'); +f('68661','68662','68663','68664'); +f('68665','68666','68667','68668'); +f('68669','68670','68671','68672'); +f('68673','68674','68675','68676'); +f('68677','68678','68679','68680'); +f('68681','68682','68683','68684'); +f('68685','68686','68687','68688'); +f('68689','68690','68691','68692'); +f('68693','68694','68695','68696'); +f('68697','68698','68699','68700'); +f('68701','68702','68703','68704'); +f('68705','68706','68707','68708'); +f('68709','68710','68711','68712'); +f('68713','68714','68715','68716'); +f('68717','68718','68719','68720'); +f('68721','68722','68723','68724'); +f('68725','68726','68727','68728'); +f('68729','68730','68731','68732'); +f('68733','68734','68735','68736'); +f('68737','68738','68739','68740'); +f('68741','68742','68743','68744'); +f('68745','68746','68747','68748'); +f('68749','68750','68751','68752'); +f('68753','68754','68755','68756'); +f('68757','68758','68759','68760'); +f('68761','68762','68763','68764'); +f('68765','68766','68767','68768'); +f('68769','68770','68771','68772'); +f('68773','68774','68775','68776'); +f('68777','68778','68779','68780'); +f('68781','68782','68783','68784'); +f('68785','68786','68787','68788'); +f('68789','68790','68791','68792'); +f('68793','68794','68795','68796'); +f('68797','68798','68799','68800'); +f('68801','68802','68803','68804'); +f('68805','68806','68807','68808'); +f('68809','68810','68811','68812'); +f('68813','68814','68815','68816'); +f('68817','68818','68819','68820'); +f('68821','68822','68823','68824'); +f('68825','68826','68827','68828'); +f('68829','68830','68831','68832'); +f('68833','68834','68835','68836'); +f('68837','68838','68839','68840'); +f('68841','68842','68843','68844'); +f('68845','68846','68847','68848'); +f('68849','68850','68851','68852'); +f('68853','68854','68855','68856'); +f('68857','68858','68859','68860'); +f('68861','68862','68863','68864'); +f('68865','68866','68867','68868'); +f('68869','68870','68871','68872'); +f('68873','68874','68875','68876'); +f('68877','68878','68879','68880'); +f('68881','68882','68883','68884'); +f('68885','68886','68887','68888'); +f('68889','68890','68891','68892'); +f('68893','68894','68895','68896'); +f('68897','68898','68899','68900'); +f('68901','68902','68903','68904'); +f('68905','68906','68907','68908'); +f('68909','68910','68911','68912'); +f('68913','68914','68915','68916'); +f('68917','68918','68919','68920'); +f('68921','68922','68923','68924'); +f('68925','68926','68927','68928'); +f('68929','68930','68931','68932'); +f('68933','68934','68935','68936'); +f('68937','68938','68939','68940'); +f('68941','68942','68943','68944'); +f('68945','68946','68947','68948'); +f('68949','68950','68951','68952'); +f('68953','68954','68955','68956'); +f('68957','68958','68959','68960'); +f('68961','68962','68963','68964'); +f('68965','68966','68967','68968'); +f('68969','68970','68971','68972'); +f('68973','68974','68975','68976'); +f('68977','68978','68979','68980'); +f('68981','68982','68983','68984'); +f('68985','68986','68987','68988'); +f('68989','68990','68991','68992'); +f('68993','68994','68995','68996'); +f('68997','68998','68999','69000'); +f('69001','69002','69003','69004'); +f('69005','69006','69007','69008'); +f('69009','69010','69011','69012'); +f('69013','69014','69015','69016'); +f('69017','69018','69019','69020'); +f('69021','69022','69023','69024'); +f('69025','69026','69027','69028'); +f('69029','69030','69031','69032'); +f('69033','69034','69035','69036'); +f('69037','69038','69039','69040'); +f('69041','69042','69043','69044'); +f('69045','69046','69047','69048'); +f('69049','69050','69051','69052'); +f('69053','69054','69055','69056'); +f('69057','69058','69059','69060'); +f('69061','69062','69063','69064'); +f('69065','69066','69067','69068'); +f('69069','69070','69071','69072'); +f('69073','69074','69075','69076'); +f('69077','69078','69079','69080'); +f('69081','69082','69083','69084'); +f('69085','69086','69087','69088'); +f('69089','69090','69091','69092'); +f('69093','69094','69095','69096'); +f('69097','69098','69099','69100'); +f('69101','69102','69103','69104'); +f('69105','69106','69107','69108'); +f('69109','69110','69111','69112'); +f('69113','69114','69115','69116'); +f('69117','69118','69119','69120'); +f('69121','69122','69123','69124'); +f('69125','69126','69127','69128'); +f('69129','69130','69131','69132'); +f('69133','69134','69135','69136'); +f('69137','69138','69139','69140'); +f('69141','69142','69143','69144'); +f('69145','69146','69147','69148'); +f('69149','69150','69151','69152'); +f('69153','69154','69155','69156'); +f('69157','69158','69159','69160'); +f('69161','69162','69163','69164'); +f('69165','69166','69167','69168'); +f('69169','69170','69171','69172'); +f('69173','69174','69175','69176'); +f('69177','69178','69179','69180'); +f('69181','69182','69183','69184'); +f('69185','69186','69187','69188'); +f('69189','69190','69191','69192'); +f('69193','69194','69195','69196'); +f('69197','69198','69199','69200'); +f('69201','69202','69203','69204'); +f('69205','69206','69207','69208'); +f('69209','69210','69211','69212'); +f('69213','69214','69215','69216'); +f('69217','69218','69219','69220'); +f('69221','69222','69223','69224'); +f('69225','69226','69227','69228'); +f('69229','69230','69231','69232'); +f('69233','69234','69235','69236'); +f('69237','69238','69239','69240'); +f('69241','69242','69243','69244'); +f('69245','69246','69247','69248'); +f('69249','69250','69251','69252'); +f('69253','69254','69255','69256'); +f('69257','69258','69259','69260'); +f('69261','69262','69263','69264'); +f('69265','69266','69267','69268'); +f('69269','69270','69271','69272'); +f('69273','69274','69275','69276'); +f('69277','69278','69279','69280'); +f('69281','69282','69283','69284'); +f('69285','69286','69287','69288'); +f('69289','69290','69291','69292'); +f('69293','69294','69295','69296'); +f('69297','69298','69299','69300'); +f('69301','69302','69303','69304'); +f('69305','69306','69307','69308'); +f('69309','69310','69311','69312'); +f('69313','69314','69315','69316'); +f('69317','69318','69319','69320'); +f('69321','69322','69323','69324'); +f('69325','69326','69327','69328'); +f('69329','69330','69331','69332'); +f('69333','69334','69335','69336'); +f('69337','69338','69339','69340'); +f('69341','69342','69343','69344'); +f('69345','69346','69347','69348'); +f('69349','69350','69351','69352'); +f('69353','69354','69355','69356'); +f('69357','69358','69359','69360'); +f('69361','69362','69363','69364'); +f('69365','69366','69367','69368'); +f('69369','69370','69371','69372'); +f('69373','69374','69375','69376'); +f('69377','69378','69379','69380'); +f('69381','69382','69383','69384'); +f('69385','69386','69387','69388'); +f('69389','69390','69391','69392'); +f('69393','69394','69395','69396'); +f('69397','69398','69399','69400'); +f('69401','69402','69403','69404'); +f('69405','69406','69407','69408'); +f('69409','69410','69411','69412'); +f('69413','69414','69415','69416'); +f('69417','69418','69419','69420'); +f('69421','69422','69423','69424'); +f('69425','69426','69427','69428'); +f('69429','69430','69431','69432'); +f('69433','69434','69435','69436'); +f('69437','69438','69439','69440'); +f('69441','69442','69443','69444'); +f('69445','69446','69447','69448'); +f('69449','69450','69451','69452'); +f('69453','69454','69455','69456'); +f('69457','69458','69459','69460'); +f('69461','69462','69463','69464'); +f('69465','69466','69467','69468'); +f('69469','69470','69471','69472'); +f('69473','69474','69475','69476'); +f('69477','69478','69479','69480'); +f('69481','69482','69483','69484'); +f('69485','69486','69487','69488'); +f('69489','69490','69491','69492'); +f('69493','69494','69495','69496'); +f('69497','69498','69499','69500'); +f('69501','69502','69503','69504'); +f('69505','69506','69507','69508'); +f('69509','69510','69511','69512'); +f('69513','69514','69515','69516'); +f('69517','69518','69519','69520'); +f('69521','69522','69523','69524'); +f('69525','69526','69527','69528'); +f('69529','69530','69531','69532'); +f('69533','69534','69535','69536'); +f('69537','69538','69539','69540'); +f('69541','69542','69543','69544'); +f('69545','69546','69547','69548'); +f('69549','69550','69551','69552'); +f('69553','69554','69555','69556'); +f('69557','69558','69559','69560'); +f('69561','69562','69563','69564'); +f('69565','69566','69567','69568'); +f('69569','69570','69571','69572'); +f('69573','69574','69575','69576'); +f('69577','69578','69579','69580'); +f('69581','69582','69583','69584'); +f('69585','69586','69587','69588'); +f('69589','69590','69591','69592'); +f('69593','69594','69595','69596'); +f('69597','69598','69599','69600'); +f('69601','69602','69603','69604'); +f('69605','69606','69607','69608'); +f('69609','69610','69611','69612'); +f('69613','69614','69615','69616'); +f('69617','69618','69619','69620'); +f('69621','69622','69623','69624'); +f('69625','69626','69627','69628'); +f('69629','69630','69631','69632'); +f('69633','69634','69635','69636'); +f('69637','69638','69639','69640'); +f('69641','69642','69643','69644'); +f('69645','69646','69647','69648'); +f('69649','69650','69651','69652'); +f('69653','69654','69655','69656'); +f('69657','69658','69659','69660'); +f('69661','69662','69663','69664'); +f('69665','69666','69667','69668'); +f('69669','69670','69671','69672'); +f('69673','69674','69675','69676'); +f('69677','69678','69679','69680'); +f('69681','69682','69683','69684'); +f('69685','69686','69687','69688'); +f('69689','69690','69691','69692'); +f('69693','69694','69695','69696'); +f('69697','69698','69699','69700'); +f('69701','69702','69703','69704'); +f('69705','69706','69707','69708'); +f('69709','69710','69711','69712'); +f('69713','69714','69715','69716'); +f('69717','69718','69719','69720'); +f('69721','69722','69723','69724'); +f('69725','69726','69727','69728'); +f('69729','69730','69731','69732'); +f('69733','69734','69735','69736'); +f('69737','69738','69739','69740'); +f('69741','69742','69743','69744'); +f('69745','69746','69747','69748'); +f('69749','69750','69751','69752'); +f('69753','69754','69755','69756'); +f('69757','69758','69759','69760'); +f('69761','69762','69763','69764'); +f('69765','69766','69767','69768'); +f('69769','69770','69771','69772'); +f('69773','69774','69775','69776'); +f('69777','69778','69779','69780'); +f('69781','69782','69783','69784'); +f('69785','69786','69787','69788'); +f('69789','69790','69791','69792'); +f('69793','69794','69795','69796'); +f('69797','69798','69799','69800'); +f('69801','69802','69803','69804'); +f('69805','69806','69807','69808'); +f('69809','69810','69811','69812'); +f('69813','69814','69815','69816'); +f('69817','69818','69819','69820'); +f('69821','69822','69823','69824'); +f('69825','69826','69827','69828'); +f('69829','69830','69831','69832'); +f('69833','69834','69835','69836'); +f('69837','69838','69839','69840'); +f('69841','69842','69843','69844'); +f('69845','69846','69847','69848'); +f('69849','69850','69851','69852'); +f('69853','69854','69855','69856'); +f('69857','69858','69859','69860'); +f('69861','69862','69863','69864'); +f('69865','69866','69867','69868'); +f('69869','69870','69871','69872'); +f('69873','69874','69875','69876'); +f('69877','69878','69879','69880'); +f('69881','69882','69883','69884'); +f('69885','69886','69887','69888'); +f('69889','69890','69891','69892'); +f('69893','69894','69895','69896'); +f('69897','69898','69899','69900'); +f('69901','69902','69903','69904'); +f('69905','69906','69907','69908'); +f('69909','69910','69911','69912'); +f('69913','69914','69915','69916'); +f('69917','69918','69919','69920'); +f('69921','69922','69923','69924'); +f('69925','69926','69927','69928'); +f('69929','69930','69931','69932'); +f('69933','69934','69935','69936'); +f('69937','69938','69939','69940'); +f('69941','69942','69943','69944'); +f('69945','69946','69947','69948'); +f('69949','69950','69951','69952'); +f('69953','69954','69955','69956'); +f('69957','69958','69959','69960'); +f('69961','69962','69963','69964'); +f('69965','69966','69967','69968'); +f('69969','69970','69971','69972'); +f('69973','69974','69975','69976'); +f('69977','69978','69979','69980'); +f('69981','69982','69983','69984'); +f('69985','69986','69987','69988'); +f('69989','69990','69991','69992'); +f('69993','69994','69995','69996'); +f('69997','69998','69999','70000'); + +actual = 'No Crash, No Error'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-155081.js b/js/src/tests/js1_5/Regress/regress-155081.js new file mode 100644 index 000000000..9c52cf8de --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-155081.js @@ -0,0 +1,17527 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 155081; +var summary = 'Limit of 64k literals'; +var actual = 'No Crash'; +var expect = 'No Crash, No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f(A,B,C,D) {} + +try +{ + f('1','2','3','4'); + f('5','6','7','8'); + f('9','10','11','12'); + f('13','14','15','16'); + f('17','18','19','20'); + f('21','22','23','24'); + f('25','26','27','28'); + f('29','30','31','32'); + f('33','34','35','36'); + f('37','38','39','40'); + f('41','42','43','44'); + f('45','46','47','48'); + f('49','50','51','52'); + f('53','54','55','56'); + f('57','58','59','60'); + f('61','62','63','64'); + f('65','66','67','68'); + f('69','70','71','72'); + f('73','74','75','76'); + f('77','78','79','80'); + f('81','82','83','84'); + f('85','86','87','88'); + f('89','90','91','92'); + f('93','94','95','96'); + f('97','98','99','100'); + f('101','102','103','104'); + f('105','106','107','108'); + f('109','110','111','112'); + f('113','114','115','116'); + f('117','118','119','120'); + f('121','122','123','124'); + f('125','126','127','128'); + f('129','130','131','132'); + f('133','134','135','136'); + f('137','138','139','140'); + f('141','142','143','144'); + f('145','146','147','148'); + f('149','150','151','152'); + f('153','154','155','156'); + f('157','158','159','160'); + f('161','162','163','164'); + f('165','166','167','168'); + f('169','170','171','172'); + f('173','174','175','176'); + f('177','178','179','180'); + f('181','182','183','184'); + f('185','186','187','188'); + f('189','190','191','192'); + f('193','194','195','196'); + f('197','198','199','200'); + f('201','202','203','204'); + f('205','206','207','208'); + f('209','210','211','212'); + f('213','214','215','216'); + f('217','218','219','220'); + f('221','222','223','224'); + f('225','226','227','228'); + f('229','230','231','232'); + f('233','234','235','236'); + f('237','238','239','240'); + f('241','242','243','244'); + f('245','246','247','248'); + f('249','250','251','252'); + f('253','254','255','256'); + f('257','258','259','260'); + f('261','262','263','264'); + f('265','266','267','268'); + f('269','270','271','272'); + f('273','274','275','276'); + f('277','278','279','280'); + f('281','282','283','284'); + f('285','286','287','288'); + f('289','290','291','292'); + f('293','294','295','296'); + f('297','298','299','300'); + f('301','302','303','304'); + f('305','306','307','308'); + f('309','310','311','312'); + f('313','314','315','316'); + f('317','318','319','320'); + f('321','322','323','324'); + f('325','326','327','328'); + f('329','330','331','332'); + f('333','334','335','336'); + f('337','338','339','340'); + f('341','342','343','344'); + f('345','346','347','348'); + f('349','350','351','352'); + f('353','354','355','356'); + f('357','358','359','360'); + f('361','362','363','364'); + f('365','366','367','368'); + f('369','370','371','372'); + f('373','374','375','376'); + f('377','378','379','380'); + f('381','382','383','384'); + f('385','386','387','388'); + f('389','390','391','392'); + f('393','394','395','396'); + f('397','398','399','400'); + f('401','402','403','404'); + f('405','406','407','408'); + f('409','410','411','412'); + f('413','414','415','416'); + f('417','418','419','420'); + f('421','422','423','424'); + f('425','426','427','428'); + f('429','430','431','432'); + f('433','434','435','436'); + f('437','438','439','440'); + f('441','442','443','444'); + f('445','446','447','448'); + f('449','450','451','452'); + f('453','454','455','456'); + f('457','458','459','460'); + f('461','462','463','464'); + f('465','466','467','468'); + f('469','470','471','472'); + f('473','474','475','476'); + f('477','478','479','480'); + f('481','482','483','484'); + f('485','486','487','488'); + f('489','490','491','492'); + f('493','494','495','496'); + f('497','498','499','500'); + f('501','502','503','504'); + f('505','506','507','508'); + f('509','510','511','512'); + f('513','514','515','516'); + f('517','518','519','520'); + f('521','522','523','524'); + f('525','526','527','528'); + f('529','530','531','532'); + f('533','534','535','536'); + f('537','538','539','540'); + f('541','542','543','544'); + f('545','546','547','548'); + f('549','550','551','552'); + f('553','554','555','556'); + f('557','558','559','560'); + f('561','562','563','564'); + f('565','566','567','568'); + f('569','570','571','572'); + f('573','574','575','576'); + f('577','578','579','580'); + f('581','582','583','584'); + f('585','586','587','588'); + f('589','590','591','592'); + f('593','594','595','596'); + f('597','598','599','600'); + f('601','602','603','604'); + f('605','606','607','608'); + f('609','610','611','612'); + f('613','614','615','616'); + f('617','618','619','620'); + f('621','622','623','624'); + f('625','626','627','628'); + f('629','630','631','632'); + f('633','634','635','636'); + f('637','638','639','640'); + f('641','642','643','644'); + f('645','646','647','648'); + f('649','650','651','652'); + f('653','654','655','656'); + f('657','658','659','660'); + f('661','662','663','664'); + f('665','666','667','668'); + f('669','670','671','672'); + f('673','674','675','676'); + f('677','678','679','680'); + f('681','682','683','684'); + f('685','686','687','688'); + f('689','690','691','692'); + f('693','694','695','696'); + f('697','698','699','700'); + f('701','702','703','704'); + f('705','706','707','708'); + f('709','710','711','712'); + f('713','714','715','716'); + f('717','718','719','720'); + f('721','722','723','724'); + f('725','726','727','728'); + f('729','730','731','732'); + f('733','734','735','736'); + f('737','738','739','740'); + f('741','742','743','744'); + f('745','746','747','748'); + f('749','750','751','752'); + f('753','754','755','756'); + f('757','758','759','760'); + f('761','762','763','764'); + f('765','766','767','768'); + f('769','770','771','772'); + f('773','774','775','776'); + f('777','778','779','780'); + f('781','782','783','784'); + f('785','786','787','788'); + f('789','790','791','792'); + f('793','794','795','796'); + f('797','798','799','800'); + f('801','802','803','804'); + f('805','806','807','808'); + f('809','810','811','812'); + f('813','814','815','816'); + f('817','818','819','820'); + f('821','822','823','824'); + f('825','826','827','828'); + f('829','830','831','832'); + f('833','834','835','836'); + f('837','838','839','840'); + f('841','842','843','844'); + f('845','846','847','848'); + f('849','850','851','852'); + f('853','854','855','856'); + f('857','858','859','860'); + f('861','862','863','864'); + f('865','866','867','868'); + f('869','870','871','872'); + f('873','874','875','876'); + f('877','878','879','880'); + f('881','882','883','884'); + f('885','886','887','888'); + f('889','890','891','892'); + f('893','894','895','896'); + f('897','898','899','900'); + f('901','902','903','904'); + f('905','906','907','908'); + f('909','910','911','912'); + f('913','914','915','916'); + f('917','918','919','920'); + f('921','922','923','924'); + f('925','926','927','928'); + f('929','930','931','932'); + f('933','934','935','936'); + f('937','938','939','940'); + f('941','942','943','944'); + f('945','946','947','948'); + f('949','950','951','952'); + f('953','954','955','956'); + f('957','958','959','960'); + f('961','962','963','964'); + f('965','966','967','968'); + f('969','970','971','972'); + f('973','974','975','976'); + f('977','978','979','980'); + f('981','982','983','984'); + f('985','986','987','988'); + f('989','990','991','992'); + f('993','994','995','996'); + f('997','998','999','1000'); + f('1001','1002','1003','1004'); + f('1005','1006','1007','1008'); + f('1009','1010','1011','1012'); + f('1013','1014','1015','1016'); + f('1017','1018','1019','1020'); + f('1021','1022','1023','1024'); + f('1025','1026','1027','1028'); + f('1029','1030','1031','1032'); + f('1033','1034','1035','1036'); + f('1037','1038','1039','1040'); + f('1041','1042','1043','1044'); + f('1045','1046','1047','1048'); + f('1049','1050','1051','1052'); + f('1053','1054','1055','1056'); + f('1057','1058','1059','1060'); + f('1061','1062','1063','1064'); + f('1065','1066','1067','1068'); + f('1069','1070','1071','1072'); + f('1073','1074','1075','1076'); + f('1077','1078','1079','1080'); + f('1081','1082','1083','1084'); + f('1085','1086','1087','1088'); + f('1089','1090','1091','1092'); + f('1093','1094','1095','1096'); + f('1097','1098','1099','1100'); + f('1101','1102','1103','1104'); + f('1105','1106','1107','1108'); + f('1109','1110','1111','1112'); + f('1113','1114','1115','1116'); + f('1117','1118','1119','1120'); + f('1121','1122','1123','1124'); + f('1125','1126','1127','1128'); + f('1129','1130','1131','1132'); + f('1133','1134','1135','1136'); + f('1137','1138','1139','1140'); + f('1141','1142','1143','1144'); + f('1145','1146','1147','1148'); + f('1149','1150','1151','1152'); + f('1153','1154','1155','1156'); + f('1157','1158','1159','1160'); + f('1161','1162','1163','1164'); + f('1165','1166','1167','1168'); + f('1169','1170','1171','1172'); + f('1173','1174','1175','1176'); + f('1177','1178','1179','1180'); + f('1181','1182','1183','1184'); + f('1185','1186','1187','1188'); + f('1189','1190','1191','1192'); + f('1193','1194','1195','1196'); + f('1197','1198','1199','1200'); + f('1201','1202','1203','1204'); + f('1205','1206','1207','1208'); + f('1209','1210','1211','1212'); + f('1213','1214','1215','1216'); + f('1217','1218','1219','1220'); + f('1221','1222','1223','1224'); + f('1225','1226','1227','1228'); + f('1229','1230','1231','1232'); + f('1233','1234','1235','1236'); + f('1237','1238','1239','1240'); + f('1241','1242','1243','1244'); + f('1245','1246','1247','1248'); + f('1249','1250','1251','1252'); + f('1253','1254','1255','1256'); + f('1257','1258','1259','1260'); + f('1261','1262','1263','1264'); + f('1265','1266','1267','1268'); + f('1269','1270','1271','1272'); + f('1273','1274','1275','1276'); + f('1277','1278','1279','1280'); + f('1281','1282','1283','1284'); + f('1285','1286','1287','1288'); + f('1289','1290','1291','1292'); + f('1293','1294','1295','1296'); + f('1297','1298','1299','1300'); + f('1301','1302','1303','1304'); + f('1305','1306','1307','1308'); + f('1309','1310','1311','1312'); + f('1313','1314','1315','1316'); + f('1317','1318','1319','1320'); + f('1321','1322','1323','1324'); + f('1325','1326','1327','1328'); + f('1329','1330','1331','1332'); + f('1333','1334','1335','1336'); + f('1337','1338','1339','1340'); + f('1341','1342','1343','1344'); + f('1345','1346','1347','1348'); + f('1349','1350','1351','1352'); + f('1353','1354','1355','1356'); + f('1357','1358','1359','1360'); + f('1361','1362','1363','1364'); + f('1365','1366','1367','1368'); + f('1369','1370','1371','1372'); + f('1373','1374','1375','1376'); + f('1377','1378','1379','1380'); + f('1381','1382','1383','1384'); + f('1385','1386','1387','1388'); + f('1389','1390','1391','1392'); + f('1393','1394','1395','1396'); + f('1397','1398','1399','1400'); + f('1401','1402','1403','1404'); + f('1405','1406','1407','1408'); + f('1409','1410','1411','1412'); + f('1413','1414','1415','1416'); + f('1417','1418','1419','1420'); + f('1421','1422','1423','1424'); + f('1425','1426','1427','1428'); + f('1429','1430','1431','1432'); + f('1433','1434','1435','1436'); + f('1437','1438','1439','1440'); + f('1441','1442','1443','1444'); + f('1445','1446','1447','1448'); + f('1449','1450','1451','1452'); + f('1453','1454','1455','1456'); + f('1457','1458','1459','1460'); + f('1461','1462','1463','1464'); + f('1465','1466','1467','1468'); + f('1469','1470','1471','1472'); + f('1473','1474','1475','1476'); + f('1477','1478','1479','1480'); + f('1481','1482','1483','1484'); + f('1485','1486','1487','1488'); + f('1489','1490','1491','1492'); + f('1493','1494','1495','1496'); + f('1497','1498','1499','1500'); + f('1501','1502','1503','1504'); + f('1505','1506','1507','1508'); + f('1509','1510','1511','1512'); + f('1513','1514','1515','1516'); + f('1517','1518','1519','1520'); + f('1521','1522','1523','1524'); + f('1525','1526','1527','1528'); + f('1529','1530','1531','1532'); + f('1533','1534','1535','1536'); + f('1537','1538','1539','1540'); + f('1541','1542','1543','1544'); + f('1545','1546','1547','1548'); + f('1549','1550','1551','1552'); + f('1553','1554','1555','1556'); + f('1557','1558','1559','1560'); + f('1561','1562','1563','1564'); + f('1565','1566','1567','1568'); + f('1569','1570','1571','1572'); + f('1573','1574','1575','1576'); + f('1577','1578','1579','1580'); + f('1581','1582','1583','1584'); + f('1585','1586','1587','1588'); + f('1589','1590','1591','1592'); + f('1593','1594','1595','1596'); + f('1597','1598','1599','1600'); + f('1601','1602','1603','1604'); + f('1605','1606','1607','1608'); + f('1609','1610','1611','1612'); + f('1613','1614','1615','1616'); + f('1617','1618','1619','1620'); + f('1621','1622','1623','1624'); + f('1625','1626','1627','1628'); + f('1629','1630','1631','1632'); + f('1633','1634','1635','1636'); + f('1637','1638','1639','1640'); + f('1641','1642','1643','1644'); + f('1645','1646','1647','1648'); + f('1649','1650','1651','1652'); + f('1653','1654','1655','1656'); + f('1657','1658','1659','1660'); + f('1661','1662','1663','1664'); + f('1665','1666','1667','1668'); + f('1669','1670','1671','1672'); + f('1673','1674','1675','1676'); + f('1677','1678','1679','1680'); + f('1681','1682','1683','1684'); + f('1685','1686','1687','1688'); + f('1689','1690','1691','1692'); + f('1693','1694','1695','1696'); + f('1697','1698','1699','1700'); + f('1701','1702','1703','1704'); + f('1705','1706','1707','1708'); + f('1709','1710','1711','1712'); + f('1713','1714','1715','1716'); + f('1717','1718','1719','1720'); + f('1721','1722','1723','1724'); + f('1725','1726','1727','1728'); + f('1729','1730','1731','1732'); + f('1733','1734','1735','1736'); + f('1737','1738','1739','1740'); + f('1741','1742','1743','1744'); + f('1745','1746','1747','1748'); + f('1749','1750','1751','1752'); + f('1753','1754','1755','1756'); + f('1757','1758','1759','1760'); + f('1761','1762','1763','1764'); + f('1765','1766','1767','1768'); + f('1769','1770','1771','1772'); + f('1773','1774','1775','1776'); + f('1777','1778','1779','1780'); + f('1781','1782','1783','1784'); + f('1785','1786','1787','1788'); + f('1789','1790','1791','1792'); + f('1793','1794','1795','1796'); + f('1797','1798','1799','1800'); + f('1801','1802','1803','1804'); + f('1805','1806','1807','1808'); + f('1809','1810','1811','1812'); + f('1813','1814','1815','1816'); + f('1817','1818','1819','1820'); + f('1821','1822','1823','1824'); + f('1825','1826','1827','1828'); + f('1829','1830','1831','1832'); + f('1833','1834','1835','1836'); + f('1837','1838','1839','1840'); + f('1841','1842','1843','1844'); + f('1845','1846','1847','1848'); + f('1849','1850','1851','1852'); + f('1853','1854','1855','1856'); + f('1857','1858','1859','1860'); + f('1861','1862','1863','1864'); + f('1865','1866','1867','1868'); + f('1869','1870','1871','1872'); + f('1873','1874','1875','1876'); + f('1877','1878','1879','1880'); + f('1881','1882','1883','1884'); + f('1885','1886','1887','1888'); + f('1889','1890','1891','1892'); + f('1893','1894','1895','1896'); + f('1897','1898','1899','1900'); + f('1901','1902','1903','1904'); + f('1905','1906','1907','1908'); + f('1909','1910','1911','1912'); + f('1913','1914','1915','1916'); + f('1917','1918','1919','1920'); + f('1921','1922','1923','1924'); + f('1925','1926','1927','1928'); + f('1929','1930','1931','1932'); + f('1933','1934','1935','1936'); + f('1937','1938','1939','1940'); + f('1941','1942','1943','1944'); + f('1945','1946','1947','1948'); + f('1949','1950','1951','1952'); + f('1953','1954','1955','1956'); + f('1957','1958','1959','1960'); + f('1961','1962','1963','1964'); + f('1965','1966','1967','1968'); + f('1969','1970','1971','1972'); + f('1973','1974','1975','1976'); + f('1977','1978','1979','1980'); + f('1981','1982','1983','1984'); + f('1985','1986','1987','1988'); + f('1989','1990','1991','1992'); + f('1993','1994','1995','1996'); + f('1997','1998','1999','2000'); + f('2001','2002','2003','2004'); + f('2005','2006','2007','2008'); + f('2009','2010','2011','2012'); + f('2013','2014','2015','2016'); + f('2017','2018','2019','2020'); + f('2021','2022','2023','2024'); + f('2025','2026','2027','2028'); + f('2029','2030','2031','2032'); + f('2033','2034','2035','2036'); + f('2037','2038','2039','2040'); + f('2041','2042','2043','2044'); + f('2045','2046','2047','2048'); + f('2049','2050','2051','2052'); + f('2053','2054','2055','2056'); + f('2057','2058','2059','2060'); + f('2061','2062','2063','2064'); + f('2065','2066','2067','2068'); + f('2069','2070','2071','2072'); + f('2073','2074','2075','2076'); + f('2077','2078','2079','2080'); + f('2081','2082','2083','2084'); + f('2085','2086','2087','2088'); + f('2089','2090','2091','2092'); + f('2093','2094','2095','2096'); + f('2097','2098','2099','2100'); + f('2101','2102','2103','2104'); + f('2105','2106','2107','2108'); + f('2109','2110','2111','2112'); + f('2113','2114','2115','2116'); + f('2117','2118','2119','2120'); + f('2121','2122','2123','2124'); + f('2125','2126','2127','2128'); + f('2129','2130','2131','2132'); + f('2133','2134','2135','2136'); + f('2137','2138','2139','2140'); + f('2141','2142','2143','2144'); + f('2145','2146','2147','2148'); + f('2149','2150','2151','2152'); + f('2153','2154','2155','2156'); + f('2157','2158','2159','2160'); + f('2161','2162','2163','2164'); + f('2165','2166','2167','2168'); + f('2169','2170','2171','2172'); + f('2173','2174','2175','2176'); + f('2177','2178','2179','2180'); + f('2181','2182','2183','2184'); + f('2185','2186','2187','2188'); + f('2189','2190','2191','2192'); + f('2193','2194','2195','2196'); + f('2197','2198','2199','2200'); + f('2201','2202','2203','2204'); + f('2205','2206','2207','2208'); + f('2209','2210','2211','2212'); + f('2213','2214','2215','2216'); + f('2217','2218','2219','2220'); + f('2221','2222','2223','2224'); + f('2225','2226','2227','2228'); + f('2229','2230','2231','2232'); + f('2233','2234','2235','2236'); + f('2237','2238','2239','2240'); + f('2241','2242','2243','2244'); + f('2245','2246','2247','2248'); + f('2249','2250','2251','2252'); + f('2253','2254','2255','2256'); + f('2257','2258','2259','2260'); + f('2261','2262','2263','2264'); + f('2265','2266','2267','2268'); + f('2269','2270','2271','2272'); + f('2273','2274','2275','2276'); + f('2277','2278','2279','2280'); + f('2281','2282','2283','2284'); + f('2285','2286','2287','2288'); + f('2289','2290','2291','2292'); + f('2293','2294','2295','2296'); + f('2297','2298','2299','2300'); + f('2301','2302','2303','2304'); + f('2305','2306','2307','2308'); + f('2309','2310','2311','2312'); + f('2313','2314','2315','2316'); + f('2317','2318','2319','2320'); + f('2321','2322','2323','2324'); + f('2325','2326','2327','2328'); + f('2329','2330','2331','2332'); + f('2333','2334','2335','2336'); + f('2337','2338','2339','2340'); + f('2341','2342','2343','2344'); + f('2345','2346','2347','2348'); + f('2349','2350','2351','2352'); + f('2353','2354','2355','2356'); + f('2357','2358','2359','2360'); + f('2361','2362','2363','2364'); + f('2365','2366','2367','2368'); + f('2369','2370','2371','2372'); + f('2373','2374','2375','2376'); + f('2377','2378','2379','2380'); + f('2381','2382','2383','2384'); + f('2385','2386','2387','2388'); + f('2389','2390','2391','2392'); + f('2393','2394','2395','2396'); + f('2397','2398','2399','2400'); + f('2401','2402','2403','2404'); + f('2405','2406','2407','2408'); + f('2409','2410','2411','2412'); + f('2413','2414','2415','2416'); + f('2417','2418','2419','2420'); + f('2421','2422','2423','2424'); + f('2425','2426','2427','2428'); + f('2429','2430','2431','2432'); + f('2433','2434','2435','2436'); + f('2437','2438','2439','2440'); + f('2441','2442','2443','2444'); + f('2445','2446','2447','2448'); + f('2449','2450','2451','2452'); + f('2453','2454','2455','2456'); + f('2457','2458','2459','2460'); + f('2461','2462','2463','2464'); + f('2465','2466','2467','2468'); + f('2469','2470','2471','2472'); + f('2473','2474','2475','2476'); + f('2477','2478','2479','2480'); + f('2481','2482','2483','2484'); + f('2485','2486','2487','2488'); + f('2489','2490','2491','2492'); + f('2493','2494','2495','2496'); + f('2497','2498','2499','2500'); + f('2501','2502','2503','2504'); + f('2505','2506','2507','2508'); + f('2509','2510','2511','2512'); + f('2513','2514','2515','2516'); + f('2517','2518','2519','2520'); + f('2521','2522','2523','2524'); + f('2525','2526','2527','2528'); + f('2529','2530','2531','2532'); + f('2533','2534','2535','2536'); + f('2537','2538','2539','2540'); + f('2541','2542','2543','2544'); + f('2545','2546','2547','2548'); + f('2549','2550','2551','2552'); + f('2553','2554','2555','2556'); + f('2557','2558','2559','2560'); + f('2561','2562','2563','2564'); + f('2565','2566','2567','2568'); + f('2569','2570','2571','2572'); + f('2573','2574','2575','2576'); + f('2577','2578','2579','2580'); + f('2581','2582','2583','2584'); + f('2585','2586','2587','2588'); + f('2589','2590','2591','2592'); + f('2593','2594','2595','2596'); + f('2597','2598','2599','2600'); + f('2601','2602','2603','2604'); + f('2605','2606','2607','2608'); + f('2609','2610','2611','2612'); + f('2613','2614','2615','2616'); + f('2617','2618','2619','2620'); + f('2621','2622','2623','2624'); + f('2625','2626','2627','2628'); + f('2629','2630','2631','2632'); + f('2633','2634','2635','2636'); + f('2637','2638','2639','2640'); + f('2641','2642','2643','2644'); + f('2645','2646','2647','2648'); + f('2649','2650','2651','2652'); + f('2653','2654','2655','2656'); + f('2657','2658','2659','2660'); + f('2661','2662','2663','2664'); + f('2665','2666','2667','2668'); + f('2669','2670','2671','2672'); + f('2673','2674','2675','2676'); + f('2677','2678','2679','2680'); + f('2681','2682','2683','2684'); + f('2685','2686','2687','2688'); + f('2689','2690','2691','2692'); + f('2693','2694','2695','2696'); + f('2697','2698','2699','2700'); + f('2701','2702','2703','2704'); + f('2705','2706','2707','2708'); + f('2709','2710','2711','2712'); + f('2713','2714','2715','2716'); + f('2717','2718','2719','2720'); + f('2721','2722','2723','2724'); + f('2725','2726','2727','2728'); + f('2729','2730','2731','2732'); + f('2733','2734','2735','2736'); + f('2737','2738','2739','2740'); + f('2741','2742','2743','2744'); + f('2745','2746','2747','2748'); + f('2749','2750','2751','2752'); + f('2753','2754','2755','2756'); + f('2757','2758','2759','2760'); + f('2761','2762','2763','2764'); + f('2765','2766','2767','2768'); + f('2769','2770','2771','2772'); + f('2773','2774','2775','2776'); + f('2777','2778','2779','2780'); + f('2781','2782','2783','2784'); + f('2785','2786','2787','2788'); + f('2789','2790','2791','2792'); + f('2793','2794','2795','2796'); + f('2797','2798','2799','2800'); + f('2801','2802','2803','2804'); + f('2805','2806','2807','2808'); + f('2809','2810','2811','2812'); + f('2813','2814','2815','2816'); + f('2817','2818','2819','2820'); + f('2821','2822','2823','2824'); + f('2825','2826','2827','2828'); + f('2829','2830','2831','2832'); + f('2833','2834','2835','2836'); + f('2837','2838','2839','2840'); + f('2841','2842','2843','2844'); + f('2845','2846','2847','2848'); + f('2849','2850','2851','2852'); + f('2853','2854','2855','2856'); + f('2857','2858','2859','2860'); + f('2861','2862','2863','2864'); + f('2865','2866','2867','2868'); + f('2869','2870','2871','2872'); + f('2873','2874','2875','2876'); + f('2877','2878','2879','2880'); + f('2881','2882','2883','2884'); + f('2885','2886','2887','2888'); + f('2889','2890','2891','2892'); + f('2893','2894','2895','2896'); + f('2897','2898','2899','2900'); + f('2901','2902','2903','2904'); + f('2905','2906','2907','2908'); + f('2909','2910','2911','2912'); + f('2913','2914','2915','2916'); + f('2917','2918','2919','2920'); + f('2921','2922','2923','2924'); + f('2925','2926','2927','2928'); + f('2929','2930','2931','2932'); + f('2933','2934','2935','2936'); + f('2937','2938','2939','2940'); + f('2941','2942','2943','2944'); + f('2945','2946','2947','2948'); + f('2949','2950','2951','2952'); + f('2953','2954','2955','2956'); + f('2957','2958','2959','2960'); + f('2961','2962','2963','2964'); + f('2965','2966','2967','2968'); + f('2969','2970','2971','2972'); + f('2973','2974','2975','2976'); + f('2977','2978','2979','2980'); + f('2981','2982','2983','2984'); + f('2985','2986','2987','2988'); + f('2989','2990','2991','2992'); + f('2993','2994','2995','2996'); + f('2997','2998','2999','3000'); + f('3001','3002','3003','3004'); + f('3005','3006','3007','3008'); + f('3009','3010','3011','3012'); + f('3013','3014','3015','3016'); + f('3017','3018','3019','3020'); + f('3021','3022','3023','3024'); + f('3025','3026','3027','3028'); + f('3029','3030','3031','3032'); + f('3033','3034','3035','3036'); + f('3037','3038','3039','3040'); + f('3041','3042','3043','3044'); + f('3045','3046','3047','3048'); + f('3049','3050','3051','3052'); + f('3053','3054','3055','3056'); + f('3057','3058','3059','3060'); + f('3061','3062','3063','3064'); + f('3065','3066','3067','3068'); + f('3069','3070','3071','3072'); + f('3073','3074','3075','3076'); + f('3077','3078','3079','3080'); + f('3081','3082','3083','3084'); + f('3085','3086','3087','3088'); + f('3089','3090','3091','3092'); + f('3093','3094','3095','3096'); + f('3097','3098','3099','3100'); + f('3101','3102','3103','3104'); + f('3105','3106','3107','3108'); + f('3109','3110','3111','3112'); + f('3113','3114','3115','3116'); + f('3117','3118','3119','3120'); + f('3121','3122','3123','3124'); + f('3125','3126','3127','3128'); + f('3129','3130','3131','3132'); + f('3133','3134','3135','3136'); + f('3137','3138','3139','3140'); + f('3141','3142','3143','3144'); + f('3145','3146','3147','3148'); + f('3149','3150','3151','3152'); + f('3153','3154','3155','3156'); + f('3157','3158','3159','3160'); + f('3161','3162','3163','3164'); + f('3165','3166','3167','3168'); + f('3169','3170','3171','3172'); + f('3173','3174','3175','3176'); + f('3177','3178','3179','3180'); + f('3181','3182','3183','3184'); + f('3185','3186','3187','3188'); + f('3189','3190','3191','3192'); + f('3193','3194','3195','3196'); + f('3197','3198','3199','3200'); + f('3201','3202','3203','3204'); + f('3205','3206','3207','3208'); + f('3209','3210','3211','3212'); + f('3213','3214','3215','3216'); + f('3217','3218','3219','3220'); + f('3221','3222','3223','3224'); + f('3225','3226','3227','3228'); + f('3229','3230','3231','3232'); + f('3233','3234','3235','3236'); + f('3237','3238','3239','3240'); + f('3241','3242','3243','3244'); + f('3245','3246','3247','3248'); + f('3249','3250','3251','3252'); + f('3253','3254','3255','3256'); + f('3257','3258','3259','3260'); + f('3261','3262','3263','3264'); + f('3265','3266','3267','3268'); + f('3269','3270','3271','3272'); + f('3273','3274','3275','3276'); + f('3277','3278','3279','3280'); + f('3281','3282','3283','3284'); + f('3285','3286','3287','3288'); + f('3289','3290','3291','3292'); + f('3293','3294','3295','3296'); + f('3297','3298','3299','3300'); + f('3301','3302','3303','3304'); + f('3305','3306','3307','3308'); + f('3309','3310','3311','3312'); + f('3313','3314','3315','3316'); + f('3317','3318','3319','3320'); + f('3321','3322','3323','3324'); + f('3325','3326','3327','3328'); + f('3329','3330','3331','3332'); + f('3333','3334','3335','3336'); + f('3337','3338','3339','3340'); + f('3341','3342','3343','3344'); + f('3345','3346','3347','3348'); + f('3349','3350','3351','3352'); + f('3353','3354','3355','3356'); + f('3357','3358','3359','3360'); + f('3361','3362','3363','3364'); + f('3365','3366','3367','3368'); + f('3369','3370','3371','3372'); + f('3373','3374','3375','3376'); + f('3377','3378','3379','3380'); + f('3381','3382','3383','3384'); + f('3385','3386','3387','3388'); + f('3389','3390','3391','3392'); + f('3393','3394','3395','3396'); + f('3397','3398','3399','3400'); + f('3401','3402','3403','3404'); + f('3405','3406','3407','3408'); + f('3409','3410','3411','3412'); + f('3413','3414','3415','3416'); + f('3417','3418','3419','3420'); + f('3421','3422','3423','3424'); + f('3425','3426','3427','3428'); + f('3429','3430','3431','3432'); + f('3433','3434','3435','3436'); + f('3437','3438','3439','3440'); + f('3441','3442','3443','3444'); + f('3445','3446','3447','3448'); + f('3449','3450','3451','3452'); + f('3453','3454','3455','3456'); + f('3457','3458','3459','3460'); + f('3461','3462','3463','3464'); + f('3465','3466','3467','3468'); + f('3469','3470','3471','3472'); + f('3473','3474','3475','3476'); + f('3477','3478','3479','3480'); + f('3481','3482','3483','3484'); + f('3485','3486','3487','3488'); + f('3489','3490','3491','3492'); + f('3493','3494','3495','3496'); + f('3497','3498','3499','3500'); + f('3501','3502','3503','3504'); + f('3505','3506','3507','3508'); + f('3509','3510','3511','3512'); + f('3513','3514','3515','3516'); + f('3517','3518','3519','3520'); + f('3521','3522','3523','3524'); + f('3525','3526','3527','3528'); + f('3529','3530','3531','3532'); + f('3533','3534','3535','3536'); + f('3537','3538','3539','3540'); + f('3541','3542','3543','3544'); + f('3545','3546','3547','3548'); + f('3549','3550','3551','3552'); + f('3553','3554','3555','3556'); + f('3557','3558','3559','3560'); + f('3561','3562','3563','3564'); + f('3565','3566','3567','3568'); + f('3569','3570','3571','3572'); + f('3573','3574','3575','3576'); + f('3577','3578','3579','3580'); + f('3581','3582','3583','3584'); + f('3585','3586','3587','3588'); + f('3589','3590','3591','3592'); + f('3593','3594','3595','3596'); + f('3597','3598','3599','3600'); + f('3601','3602','3603','3604'); + f('3605','3606','3607','3608'); + f('3609','3610','3611','3612'); + f('3613','3614','3615','3616'); + f('3617','3618','3619','3620'); + f('3621','3622','3623','3624'); + f('3625','3626','3627','3628'); + f('3629','3630','3631','3632'); + f('3633','3634','3635','3636'); + f('3637','3638','3639','3640'); + f('3641','3642','3643','3644'); + f('3645','3646','3647','3648'); + f('3649','3650','3651','3652'); + f('3653','3654','3655','3656'); + f('3657','3658','3659','3660'); + f('3661','3662','3663','3664'); + f('3665','3666','3667','3668'); + f('3669','3670','3671','3672'); + f('3673','3674','3675','3676'); + f('3677','3678','3679','3680'); + f('3681','3682','3683','3684'); + f('3685','3686','3687','3688'); + f('3689','3690','3691','3692'); + f('3693','3694','3695','3696'); + f('3697','3698','3699','3700'); + f('3701','3702','3703','3704'); + f('3705','3706','3707','3708'); + f('3709','3710','3711','3712'); + f('3713','3714','3715','3716'); + f('3717','3718','3719','3720'); + f('3721','3722','3723','3724'); + f('3725','3726','3727','3728'); + f('3729','3730','3731','3732'); + f('3733','3734','3735','3736'); + f('3737','3738','3739','3740'); + f('3741','3742','3743','3744'); + f('3745','3746','3747','3748'); + f('3749','3750','3751','3752'); + f('3753','3754','3755','3756'); + f('3757','3758','3759','3760'); + f('3761','3762','3763','3764'); + f('3765','3766','3767','3768'); + f('3769','3770','3771','3772'); + f('3773','3774','3775','3776'); + f('3777','3778','3779','3780'); + f('3781','3782','3783','3784'); + f('3785','3786','3787','3788'); + f('3789','3790','3791','3792'); + f('3793','3794','3795','3796'); + f('3797','3798','3799','3800'); + f('3801','3802','3803','3804'); + f('3805','3806','3807','3808'); + f('3809','3810','3811','3812'); + f('3813','3814','3815','3816'); + f('3817','3818','3819','3820'); + f('3821','3822','3823','3824'); + f('3825','3826','3827','3828'); + f('3829','3830','3831','3832'); + f('3833','3834','3835','3836'); + f('3837','3838','3839','3840'); + f('3841','3842','3843','3844'); + f('3845','3846','3847','3848'); + f('3849','3850','3851','3852'); + f('3853','3854','3855','3856'); + f('3857','3858','3859','3860'); + f('3861','3862','3863','3864'); + f('3865','3866','3867','3868'); + f('3869','3870','3871','3872'); + f('3873','3874','3875','3876'); + f('3877','3878','3879','3880'); + f('3881','3882','3883','3884'); + f('3885','3886','3887','3888'); + f('3889','3890','3891','3892'); + f('3893','3894','3895','3896'); + f('3897','3898','3899','3900'); + f('3901','3902','3903','3904'); + f('3905','3906','3907','3908'); + f('3909','3910','3911','3912'); + f('3913','3914','3915','3916'); + f('3917','3918','3919','3920'); + f('3921','3922','3923','3924'); + f('3925','3926','3927','3928'); + f('3929','3930','3931','3932'); + f('3933','3934','3935','3936'); + f('3937','3938','3939','3940'); + f('3941','3942','3943','3944'); + f('3945','3946','3947','3948'); + f('3949','3950','3951','3952'); + f('3953','3954','3955','3956'); + f('3957','3958','3959','3960'); + f('3961','3962','3963','3964'); + f('3965','3966','3967','3968'); + f('3969','3970','3971','3972'); + f('3973','3974','3975','3976'); + f('3977','3978','3979','3980'); + f('3981','3982','3983','3984'); + f('3985','3986','3987','3988'); + f('3989','3990','3991','3992'); + f('3993','3994','3995','3996'); + f('3997','3998','3999','4000'); + f('4001','4002','4003','4004'); + f('4005','4006','4007','4008'); + f('4009','4010','4011','4012'); + f('4013','4014','4015','4016'); + f('4017','4018','4019','4020'); + f('4021','4022','4023','4024'); + f('4025','4026','4027','4028'); + f('4029','4030','4031','4032'); + f('4033','4034','4035','4036'); + f('4037','4038','4039','4040'); + f('4041','4042','4043','4044'); + f('4045','4046','4047','4048'); + f('4049','4050','4051','4052'); + f('4053','4054','4055','4056'); + f('4057','4058','4059','4060'); + f('4061','4062','4063','4064'); + f('4065','4066','4067','4068'); + f('4069','4070','4071','4072'); + f('4073','4074','4075','4076'); + f('4077','4078','4079','4080'); + f('4081','4082','4083','4084'); + f('4085','4086','4087','4088'); + f('4089','4090','4091','4092'); + f('4093','4094','4095','4096'); + f('4097','4098','4099','4100'); + f('4101','4102','4103','4104'); + f('4105','4106','4107','4108'); + f('4109','4110','4111','4112'); + f('4113','4114','4115','4116'); + f('4117','4118','4119','4120'); + f('4121','4122','4123','4124'); + f('4125','4126','4127','4128'); + f('4129','4130','4131','4132'); + f('4133','4134','4135','4136'); + f('4137','4138','4139','4140'); + f('4141','4142','4143','4144'); + f('4145','4146','4147','4148'); + f('4149','4150','4151','4152'); + f('4153','4154','4155','4156'); + f('4157','4158','4159','4160'); + f('4161','4162','4163','4164'); + f('4165','4166','4167','4168'); + f('4169','4170','4171','4172'); + f('4173','4174','4175','4176'); + f('4177','4178','4179','4180'); + f('4181','4182','4183','4184'); + f('4185','4186','4187','4188'); + f('4189','4190','4191','4192'); + f('4193','4194','4195','4196'); + f('4197','4198','4199','4200'); + f('4201','4202','4203','4204'); + f('4205','4206','4207','4208'); + f('4209','4210','4211','4212'); + f('4213','4214','4215','4216'); + f('4217','4218','4219','4220'); + f('4221','4222','4223','4224'); + f('4225','4226','4227','4228'); + f('4229','4230','4231','4232'); + f('4233','4234','4235','4236'); + f('4237','4238','4239','4240'); + f('4241','4242','4243','4244'); + f('4245','4246','4247','4248'); + f('4249','4250','4251','4252'); + f('4253','4254','4255','4256'); + f('4257','4258','4259','4260'); + f('4261','4262','4263','4264'); + f('4265','4266','4267','4268'); + f('4269','4270','4271','4272'); + f('4273','4274','4275','4276'); + f('4277','4278','4279','4280'); + f('4281','4282','4283','4284'); + f('4285','4286','4287','4288'); + f('4289','4290','4291','4292'); + f('4293','4294','4295','4296'); + f('4297','4298','4299','4300'); + f('4301','4302','4303','4304'); + f('4305','4306','4307','4308'); + f('4309','4310','4311','4312'); + f('4313','4314','4315','4316'); + f('4317','4318','4319','4320'); + f('4321','4322','4323','4324'); + f('4325','4326','4327','4328'); + f('4329','4330','4331','4332'); + f('4333','4334','4335','4336'); + f('4337','4338','4339','4340'); + f('4341','4342','4343','4344'); + f('4345','4346','4347','4348'); + f('4349','4350','4351','4352'); + f('4353','4354','4355','4356'); + f('4357','4358','4359','4360'); + f('4361','4362','4363','4364'); + f('4365','4366','4367','4368'); + f('4369','4370','4371','4372'); + f('4373','4374','4375','4376'); + f('4377','4378','4379','4380'); + f('4381','4382','4383','4384'); + f('4385','4386','4387','4388'); + f('4389','4390','4391','4392'); + f('4393','4394','4395','4396'); + f('4397','4398','4399','4400'); + f('4401','4402','4403','4404'); + f('4405','4406','4407','4408'); + f('4409','4410','4411','4412'); + f('4413','4414','4415','4416'); + f('4417','4418','4419','4420'); + f('4421','4422','4423','4424'); + f('4425','4426','4427','4428'); + f('4429','4430','4431','4432'); + f('4433','4434','4435','4436'); + f('4437','4438','4439','4440'); + f('4441','4442','4443','4444'); + f('4445','4446','4447','4448'); + f('4449','4450','4451','4452'); + f('4453','4454','4455','4456'); + f('4457','4458','4459','4460'); + f('4461','4462','4463','4464'); + f('4465','4466','4467','4468'); + f('4469','4470','4471','4472'); + f('4473','4474','4475','4476'); + f('4477','4478','4479','4480'); + f('4481','4482','4483','4484'); + f('4485','4486','4487','4488'); + f('4489','4490','4491','4492'); + f('4493','4494','4495','4496'); + f('4497','4498','4499','4500'); + f('4501','4502','4503','4504'); + f('4505','4506','4507','4508'); + f('4509','4510','4511','4512'); + f('4513','4514','4515','4516'); + f('4517','4518','4519','4520'); + f('4521','4522','4523','4524'); + f('4525','4526','4527','4528'); + f('4529','4530','4531','4532'); + f('4533','4534','4535','4536'); + f('4537','4538','4539','4540'); + f('4541','4542','4543','4544'); + f('4545','4546','4547','4548'); + f('4549','4550','4551','4552'); + f('4553','4554','4555','4556'); + f('4557','4558','4559','4560'); + f('4561','4562','4563','4564'); + f('4565','4566','4567','4568'); + f('4569','4570','4571','4572'); + f('4573','4574','4575','4576'); + f('4577','4578','4579','4580'); + f('4581','4582','4583','4584'); + f('4585','4586','4587','4588'); + f('4589','4590','4591','4592'); + f('4593','4594','4595','4596'); + f('4597','4598','4599','4600'); + f('4601','4602','4603','4604'); + f('4605','4606','4607','4608'); + f('4609','4610','4611','4612'); + f('4613','4614','4615','4616'); + f('4617','4618','4619','4620'); + f('4621','4622','4623','4624'); + f('4625','4626','4627','4628'); + f('4629','4630','4631','4632'); + f('4633','4634','4635','4636'); + f('4637','4638','4639','4640'); + f('4641','4642','4643','4644'); + f('4645','4646','4647','4648'); + f('4649','4650','4651','4652'); + f('4653','4654','4655','4656'); + f('4657','4658','4659','4660'); + f('4661','4662','4663','4664'); + f('4665','4666','4667','4668'); + f('4669','4670','4671','4672'); + f('4673','4674','4675','4676'); + f('4677','4678','4679','4680'); + f('4681','4682','4683','4684'); + f('4685','4686','4687','4688'); + f('4689','4690','4691','4692'); + f('4693','4694','4695','4696'); + f('4697','4698','4699','4700'); + f('4701','4702','4703','4704'); + f('4705','4706','4707','4708'); + f('4709','4710','4711','4712'); + f('4713','4714','4715','4716'); + f('4717','4718','4719','4720'); + f('4721','4722','4723','4724'); + f('4725','4726','4727','4728'); + f('4729','4730','4731','4732'); + f('4733','4734','4735','4736'); + f('4737','4738','4739','4740'); + f('4741','4742','4743','4744'); + f('4745','4746','4747','4748'); + f('4749','4750','4751','4752'); + f('4753','4754','4755','4756'); + f('4757','4758','4759','4760'); + f('4761','4762','4763','4764'); + f('4765','4766','4767','4768'); + f('4769','4770','4771','4772'); + f('4773','4774','4775','4776'); + f('4777','4778','4779','4780'); + f('4781','4782','4783','4784'); + f('4785','4786','4787','4788'); + f('4789','4790','4791','4792'); + f('4793','4794','4795','4796'); + f('4797','4798','4799','4800'); + f('4801','4802','4803','4804'); + f('4805','4806','4807','4808'); + f('4809','4810','4811','4812'); + f('4813','4814','4815','4816'); + f('4817','4818','4819','4820'); + f('4821','4822','4823','4824'); + f('4825','4826','4827','4828'); + f('4829','4830','4831','4832'); + f('4833','4834','4835','4836'); + f('4837','4838','4839','4840'); + f('4841','4842','4843','4844'); + f('4845','4846','4847','4848'); + f('4849','4850','4851','4852'); + f('4853','4854','4855','4856'); + f('4857','4858','4859','4860'); + f('4861','4862','4863','4864'); + f('4865','4866','4867','4868'); + f('4869','4870','4871','4872'); + f('4873','4874','4875','4876'); + f('4877','4878','4879','4880'); + f('4881','4882','4883','4884'); + f('4885','4886','4887','4888'); + f('4889','4890','4891','4892'); + f('4893','4894','4895','4896'); + f('4897','4898','4899','4900'); + f('4901','4902','4903','4904'); + f('4905','4906','4907','4908'); + f('4909','4910','4911','4912'); + f('4913','4914','4915','4916'); + f('4917','4918','4919','4920'); + f('4921','4922','4923','4924'); + f('4925','4926','4927','4928'); + f('4929','4930','4931','4932'); + f('4933','4934','4935','4936'); + f('4937','4938','4939','4940'); + f('4941','4942','4943','4944'); + f('4945','4946','4947','4948'); + f('4949','4950','4951','4952'); + f('4953','4954','4955','4956'); + f('4957','4958','4959','4960'); + f('4961','4962','4963','4964'); + f('4965','4966','4967','4968'); + f('4969','4970','4971','4972'); + f('4973','4974','4975','4976'); + f('4977','4978','4979','4980'); + f('4981','4982','4983','4984'); + f('4985','4986','4987','4988'); + f('4989','4990','4991','4992'); + f('4993','4994','4995','4996'); + f('4997','4998','4999','5000'); + f('5001','5002','5003','5004'); + f('5005','5006','5007','5008'); + f('5009','5010','5011','5012'); + f('5013','5014','5015','5016'); + f('5017','5018','5019','5020'); + f('5021','5022','5023','5024'); + f('5025','5026','5027','5028'); + f('5029','5030','5031','5032'); + f('5033','5034','5035','5036'); + f('5037','5038','5039','5040'); + f('5041','5042','5043','5044'); + f('5045','5046','5047','5048'); + f('5049','5050','5051','5052'); + f('5053','5054','5055','5056'); + f('5057','5058','5059','5060'); + f('5061','5062','5063','5064'); + f('5065','5066','5067','5068'); + f('5069','5070','5071','5072'); + f('5073','5074','5075','5076'); + f('5077','5078','5079','5080'); + f('5081','5082','5083','5084'); + f('5085','5086','5087','5088'); + f('5089','5090','5091','5092'); + f('5093','5094','5095','5096'); + f('5097','5098','5099','5100'); + f('5101','5102','5103','5104'); + f('5105','5106','5107','5108'); + f('5109','5110','5111','5112'); + f('5113','5114','5115','5116'); + f('5117','5118','5119','5120'); + f('5121','5122','5123','5124'); + f('5125','5126','5127','5128'); + f('5129','5130','5131','5132'); + f('5133','5134','5135','5136'); + f('5137','5138','5139','5140'); + f('5141','5142','5143','5144'); + f('5145','5146','5147','5148'); + f('5149','5150','5151','5152'); + f('5153','5154','5155','5156'); + f('5157','5158','5159','5160'); + f('5161','5162','5163','5164'); + f('5165','5166','5167','5168'); + f('5169','5170','5171','5172'); + f('5173','5174','5175','5176'); + f('5177','5178','5179','5180'); + f('5181','5182','5183','5184'); + f('5185','5186','5187','5188'); + f('5189','5190','5191','5192'); + f('5193','5194','5195','5196'); + f('5197','5198','5199','5200'); + f('5201','5202','5203','5204'); + f('5205','5206','5207','5208'); + f('5209','5210','5211','5212'); + f('5213','5214','5215','5216'); + f('5217','5218','5219','5220'); + f('5221','5222','5223','5224'); + f('5225','5226','5227','5228'); + f('5229','5230','5231','5232'); + f('5233','5234','5235','5236'); + f('5237','5238','5239','5240'); + f('5241','5242','5243','5244'); + f('5245','5246','5247','5248'); + f('5249','5250','5251','5252'); + f('5253','5254','5255','5256'); + f('5257','5258','5259','5260'); + f('5261','5262','5263','5264'); + f('5265','5266','5267','5268'); + f('5269','5270','5271','5272'); + f('5273','5274','5275','5276'); + f('5277','5278','5279','5280'); + f('5281','5282','5283','5284'); + f('5285','5286','5287','5288'); + f('5289','5290','5291','5292'); + f('5293','5294','5295','5296'); + f('5297','5298','5299','5300'); + f('5301','5302','5303','5304'); + f('5305','5306','5307','5308'); + f('5309','5310','5311','5312'); + f('5313','5314','5315','5316'); + f('5317','5318','5319','5320'); + f('5321','5322','5323','5324'); + f('5325','5326','5327','5328'); + f('5329','5330','5331','5332'); + f('5333','5334','5335','5336'); + f('5337','5338','5339','5340'); + f('5341','5342','5343','5344'); + f('5345','5346','5347','5348'); + f('5349','5350','5351','5352'); + f('5353','5354','5355','5356'); + f('5357','5358','5359','5360'); + f('5361','5362','5363','5364'); + f('5365','5366','5367','5368'); + f('5369','5370','5371','5372'); + f('5373','5374','5375','5376'); + f('5377','5378','5379','5380'); + f('5381','5382','5383','5384'); + f('5385','5386','5387','5388'); + f('5389','5390','5391','5392'); + f('5393','5394','5395','5396'); + f('5397','5398','5399','5400'); + f('5401','5402','5403','5404'); + f('5405','5406','5407','5408'); + f('5409','5410','5411','5412'); + f('5413','5414','5415','5416'); + f('5417','5418','5419','5420'); + f('5421','5422','5423','5424'); + f('5425','5426','5427','5428'); + f('5429','5430','5431','5432'); + f('5433','5434','5435','5436'); + f('5437','5438','5439','5440'); + f('5441','5442','5443','5444'); + f('5445','5446','5447','5448'); + f('5449','5450','5451','5452'); + f('5453','5454','5455','5456'); + f('5457','5458','5459','5460'); + f('5461','5462','5463','5464'); + f('5465','5466','5467','5468'); + f('5469','5470','5471','5472'); + f('5473','5474','5475','5476'); + f('5477','5478','5479','5480'); + f('5481','5482','5483','5484'); + f('5485','5486','5487','5488'); + f('5489','5490','5491','5492'); + f('5493','5494','5495','5496'); + f('5497','5498','5499','5500'); + f('5501','5502','5503','5504'); + f('5505','5506','5507','5508'); + f('5509','5510','5511','5512'); + f('5513','5514','5515','5516'); + f('5517','5518','5519','5520'); + f('5521','5522','5523','5524'); + f('5525','5526','5527','5528'); + f('5529','5530','5531','5532'); + f('5533','5534','5535','5536'); + f('5537','5538','5539','5540'); + f('5541','5542','5543','5544'); + f('5545','5546','5547','5548'); + f('5549','5550','5551','5552'); + f('5553','5554','5555','5556'); + f('5557','5558','5559','5560'); + f('5561','5562','5563','5564'); + f('5565','5566','5567','5568'); + f('5569','5570','5571','5572'); + f('5573','5574','5575','5576'); + f('5577','5578','5579','5580'); + f('5581','5582','5583','5584'); + f('5585','5586','5587','5588'); + f('5589','5590','5591','5592'); + f('5593','5594','5595','5596'); + f('5597','5598','5599','5600'); + f('5601','5602','5603','5604'); + f('5605','5606','5607','5608'); + f('5609','5610','5611','5612'); + f('5613','5614','5615','5616'); + f('5617','5618','5619','5620'); + f('5621','5622','5623','5624'); + f('5625','5626','5627','5628'); + f('5629','5630','5631','5632'); + f('5633','5634','5635','5636'); + f('5637','5638','5639','5640'); + f('5641','5642','5643','5644'); + f('5645','5646','5647','5648'); + f('5649','5650','5651','5652'); + f('5653','5654','5655','5656'); + f('5657','5658','5659','5660'); + f('5661','5662','5663','5664'); + f('5665','5666','5667','5668'); + f('5669','5670','5671','5672'); + f('5673','5674','5675','5676'); + f('5677','5678','5679','5680'); + f('5681','5682','5683','5684'); + f('5685','5686','5687','5688'); + f('5689','5690','5691','5692'); + f('5693','5694','5695','5696'); + f('5697','5698','5699','5700'); + f('5701','5702','5703','5704'); + f('5705','5706','5707','5708'); + f('5709','5710','5711','5712'); + f('5713','5714','5715','5716'); + f('5717','5718','5719','5720'); + f('5721','5722','5723','5724'); + f('5725','5726','5727','5728'); + f('5729','5730','5731','5732'); + f('5733','5734','5735','5736'); + f('5737','5738','5739','5740'); + f('5741','5742','5743','5744'); + f('5745','5746','5747','5748'); + f('5749','5750','5751','5752'); + f('5753','5754','5755','5756'); + f('5757','5758','5759','5760'); + f('5761','5762','5763','5764'); + f('5765','5766','5767','5768'); + f('5769','5770','5771','5772'); + f('5773','5774','5775','5776'); + f('5777','5778','5779','5780'); + f('5781','5782','5783','5784'); + f('5785','5786','5787','5788'); + f('5789','5790','5791','5792'); + f('5793','5794','5795','5796'); + f('5797','5798','5799','5800'); + f('5801','5802','5803','5804'); + f('5805','5806','5807','5808'); + f('5809','5810','5811','5812'); + f('5813','5814','5815','5816'); + f('5817','5818','5819','5820'); + f('5821','5822','5823','5824'); + f('5825','5826','5827','5828'); + f('5829','5830','5831','5832'); + f('5833','5834','5835','5836'); + f('5837','5838','5839','5840'); + f('5841','5842','5843','5844'); + f('5845','5846','5847','5848'); + f('5849','5850','5851','5852'); + f('5853','5854','5855','5856'); + f('5857','5858','5859','5860'); + f('5861','5862','5863','5864'); + f('5865','5866','5867','5868'); + f('5869','5870','5871','5872'); + f('5873','5874','5875','5876'); + f('5877','5878','5879','5880'); + f('5881','5882','5883','5884'); + f('5885','5886','5887','5888'); + f('5889','5890','5891','5892'); + f('5893','5894','5895','5896'); + f('5897','5898','5899','5900'); + f('5901','5902','5903','5904'); + f('5905','5906','5907','5908'); + f('5909','5910','5911','5912'); + f('5913','5914','5915','5916'); + f('5917','5918','5919','5920'); + f('5921','5922','5923','5924'); + f('5925','5926','5927','5928'); + f('5929','5930','5931','5932'); + f('5933','5934','5935','5936'); + f('5937','5938','5939','5940'); + f('5941','5942','5943','5944'); + f('5945','5946','5947','5948'); + f('5949','5950','5951','5952'); + f('5953','5954','5955','5956'); + f('5957','5958','5959','5960'); + f('5961','5962','5963','5964'); + f('5965','5966','5967','5968'); + f('5969','5970','5971','5972'); + f('5973','5974','5975','5976'); + f('5977','5978','5979','5980'); + f('5981','5982','5983','5984'); + f('5985','5986','5987','5988'); + f('5989','5990','5991','5992'); + f('5993','5994','5995','5996'); + f('5997','5998','5999','6000'); + f('6001','6002','6003','6004'); + f('6005','6006','6007','6008'); + f('6009','6010','6011','6012'); + f('6013','6014','6015','6016'); + f('6017','6018','6019','6020'); + f('6021','6022','6023','6024'); + f('6025','6026','6027','6028'); + f('6029','6030','6031','6032'); + f('6033','6034','6035','6036'); + f('6037','6038','6039','6040'); + f('6041','6042','6043','6044'); + f('6045','6046','6047','6048'); + f('6049','6050','6051','6052'); + f('6053','6054','6055','6056'); + f('6057','6058','6059','6060'); + f('6061','6062','6063','6064'); + f('6065','6066','6067','6068'); + f('6069','6070','6071','6072'); + f('6073','6074','6075','6076'); + f('6077','6078','6079','6080'); + f('6081','6082','6083','6084'); + f('6085','6086','6087','6088'); + f('6089','6090','6091','6092'); + f('6093','6094','6095','6096'); + f('6097','6098','6099','6100'); + f('6101','6102','6103','6104'); + f('6105','6106','6107','6108'); + f('6109','6110','6111','6112'); + f('6113','6114','6115','6116'); + f('6117','6118','6119','6120'); + f('6121','6122','6123','6124'); + f('6125','6126','6127','6128'); + f('6129','6130','6131','6132'); + f('6133','6134','6135','6136'); + f('6137','6138','6139','6140'); + f('6141','6142','6143','6144'); + f('6145','6146','6147','6148'); + f('6149','6150','6151','6152'); + f('6153','6154','6155','6156'); + f('6157','6158','6159','6160'); + f('6161','6162','6163','6164'); + f('6165','6166','6167','6168'); + f('6169','6170','6171','6172'); + f('6173','6174','6175','6176'); + f('6177','6178','6179','6180'); + f('6181','6182','6183','6184'); + f('6185','6186','6187','6188'); + f('6189','6190','6191','6192'); + f('6193','6194','6195','6196'); + f('6197','6198','6199','6200'); + f('6201','6202','6203','6204'); + f('6205','6206','6207','6208'); + f('6209','6210','6211','6212'); + f('6213','6214','6215','6216'); + f('6217','6218','6219','6220'); + f('6221','6222','6223','6224'); + f('6225','6226','6227','6228'); + f('6229','6230','6231','6232'); + f('6233','6234','6235','6236'); + f('6237','6238','6239','6240'); + f('6241','6242','6243','6244'); + f('6245','6246','6247','6248'); + f('6249','6250','6251','6252'); + f('6253','6254','6255','6256'); + f('6257','6258','6259','6260'); + f('6261','6262','6263','6264'); + f('6265','6266','6267','6268'); + f('6269','6270','6271','6272'); + f('6273','6274','6275','6276'); + f('6277','6278','6279','6280'); + f('6281','6282','6283','6284'); + f('6285','6286','6287','6288'); + f('6289','6290','6291','6292'); + f('6293','6294','6295','6296'); + f('6297','6298','6299','6300'); + f('6301','6302','6303','6304'); + f('6305','6306','6307','6308'); + f('6309','6310','6311','6312'); + f('6313','6314','6315','6316'); + f('6317','6318','6319','6320'); + f('6321','6322','6323','6324'); + f('6325','6326','6327','6328'); + f('6329','6330','6331','6332'); + f('6333','6334','6335','6336'); + f('6337','6338','6339','6340'); + f('6341','6342','6343','6344'); + f('6345','6346','6347','6348'); + f('6349','6350','6351','6352'); + f('6353','6354','6355','6356'); + f('6357','6358','6359','6360'); + f('6361','6362','6363','6364'); + f('6365','6366','6367','6368'); + f('6369','6370','6371','6372'); + f('6373','6374','6375','6376'); + f('6377','6378','6379','6380'); + f('6381','6382','6383','6384'); + f('6385','6386','6387','6388'); + f('6389','6390','6391','6392'); + f('6393','6394','6395','6396'); + f('6397','6398','6399','6400'); + f('6401','6402','6403','6404'); + f('6405','6406','6407','6408'); + f('6409','6410','6411','6412'); + f('6413','6414','6415','6416'); + f('6417','6418','6419','6420'); + f('6421','6422','6423','6424'); + f('6425','6426','6427','6428'); + f('6429','6430','6431','6432'); + f('6433','6434','6435','6436'); + f('6437','6438','6439','6440'); + f('6441','6442','6443','6444'); + f('6445','6446','6447','6448'); + f('6449','6450','6451','6452'); + f('6453','6454','6455','6456'); + f('6457','6458','6459','6460'); + f('6461','6462','6463','6464'); + f('6465','6466','6467','6468'); + f('6469','6470','6471','6472'); + f('6473','6474','6475','6476'); + f('6477','6478','6479','6480'); + f('6481','6482','6483','6484'); + f('6485','6486','6487','6488'); + f('6489','6490','6491','6492'); + f('6493','6494','6495','6496'); + f('6497','6498','6499','6500'); + f('6501','6502','6503','6504'); + f('6505','6506','6507','6508'); + f('6509','6510','6511','6512'); + f('6513','6514','6515','6516'); + f('6517','6518','6519','6520'); + f('6521','6522','6523','6524'); + f('6525','6526','6527','6528'); + f('6529','6530','6531','6532'); + f('6533','6534','6535','6536'); + f('6537','6538','6539','6540'); + f('6541','6542','6543','6544'); + f('6545','6546','6547','6548'); + f('6549','6550','6551','6552'); + f('6553','6554','6555','6556'); + f('6557','6558','6559','6560'); + f('6561','6562','6563','6564'); + f('6565','6566','6567','6568'); + f('6569','6570','6571','6572'); + f('6573','6574','6575','6576'); + f('6577','6578','6579','6580'); + f('6581','6582','6583','6584'); + f('6585','6586','6587','6588'); + f('6589','6590','6591','6592'); + f('6593','6594','6595','6596'); + f('6597','6598','6599','6600'); + f('6601','6602','6603','6604'); + f('6605','6606','6607','6608'); + f('6609','6610','6611','6612'); + f('6613','6614','6615','6616'); + f('6617','6618','6619','6620'); + f('6621','6622','6623','6624'); + f('6625','6626','6627','6628'); + f('6629','6630','6631','6632'); + f('6633','6634','6635','6636'); + f('6637','6638','6639','6640'); + f('6641','6642','6643','6644'); + f('6645','6646','6647','6648'); + f('6649','6650','6651','6652'); + f('6653','6654','6655','6656'); + f('6657','6658','6659','6660'); + f('6661','6662','6663','6664'); + f('6665','6666','6667','6668'); + f('6669','6670','6671','6672'); + f('6673','6674','6675','6676'); + f('6677','6678','6679','6680'); + f('6681','6682','6683','6684'); + f('6685','6686','6687','6688'); + f('6689','6690','6691','6692'); + f('6693','6694','6695','6696'); + f('6697','6698','6699','6700'); + f('6701','6702','6703','6704'); + f('6705','6706','6707','6708'); + f('6709','6710','6711','6712'); + f('6713','6714','6715','6716'); + f('6717','6718','6719','6720'); + f('6721','6722','6723','6724'); + f('6725','6726','6727','6728'); + f('6729','6730','6731','6732'); + f('6733','6734','6735','6736'); + f('6737','6738','6739','6740'); + f('6741','6742','6743','6744'); + f('6745','6746','6747','6748'); + f('6749','6750','6751','6752'); + f('6753','6754','6755','6756'); + f('6757','6758','6759','6760'); + f('6761','6762','6763','6764'); + f('6765','6766','6767','6768'); + f('6769','6770','6771','6772'); + f('6773','6774','6775','6776'); + f('6777','6778','6779','6780'); + f('6781','6782','6783','6784'); + f('6785','6786','6787','6788'); + f('6789','6790','6791','6792'); + f('6793','6794','6795','6796'); + f('6797','6798','6799','6800'); + f('6801','6802','6803','6804'); + f('6805','6806','6807','6808'); + f('6809','6810','6811','6812'); + f('6813','6814','6815','6816'); + f('6817','6818','6819','6820'); + f('6821','6822','6823','6824'); + f('6825','6826','6827','6828'); + f('6829','6830','6831','6832'); + f('6833','6834','6835','6836'); + f('6837','6838','6839','6840'); + f('6841','6842','6843','6844'); + f('6845','6846','6847','6848'); + f('6849','6850','6851','6852'); + f('6853','6854','6855','6856'); + f('6857','6858','6859','6860'); + f('6861','6862','6863','6864'); + f('6865','6866','6867','6868'); + f('6869','6870','6871','6872'); + f('6873','6874','6875','6876'); + f('6877','6878','6879','6880'); + f('6881','6882','6883','6884'); + f('6885','6886','6887','6888'); + f('6889','6890','6891','6892'); + f('6893','6894','6895','6896'); + f('6897','6898','6899','6900'); + f('6901','6902','6903','6904'); + f('6905','6906','6907','6908'); + f('6909','6910','6911','6912'); + f('6913','6914','6915','6916'); + f('6917','6918','6919','6920'); + f('6921','6922','6923','6924'); + f('6925','6926','6927','6928'); + f('6929','6930','6931','6932'); + f('6933','6934','6935','6936'); + f('6937','6938','6939','6940'); + f('6941','6942','6943','6944'); + f('6945','6946','6947','6948'); + f('6949','6950','6951','6952'); + f('6953','6954','6955','6956'); + f('6957','6958','6959','6960'); + f('6961','6962','6963','6964'); + f('6965','6966','6967','6968'); + f('6969','6970','6971','6972'); + f('6973','6974','6975','6976'); + f('6977','6978','6979','6980'); + f('6981','6982','6983','6984'); + f('6985','6986','6987','6988'); + f('6989','6990','6991','6992'); + f('6993','6994','6995','6996'); + f('6997','6998','6999','7000'); + f('7001','7002','7003','7004'); + f('7005','7006','7007','7008'); + f('7009','7010','7011','7012'); + f('7013','7014','7015','7016'); + f('7017','7018','7019','7020'); + f('7021','7022','7023','7024'); + f('7025','7026','7027','7028'); + f('7029','7030','7031','7032'); + f('7033','7034','7035','7036'); + f('7037','7038','7039','7040'); + f('7041','7042','7043','7044'); + f('7045','7046','7047','7048'); + f('7049','7050','7051','7052'); + f('7053','7054','7055','7056'); + f('7057','7058','7059','7060'); + f('7061','7062','7063','7064'); + f('7065','7066','7067','7068'); + f('7069','7070','7071','7072'); + f('7073','7074','7075','7076'); + f('7077','7078','7079','7080'); + f('7081','7082','7083','7084'); + f('7085','7086','7087','7088'); + f('7089','7090','7091','7092'); + f('7093','7094','7095','7096'); + f('7097','7098','7099','7100'); + f('7101','7102','7103','7104'); + f('7105','7106','7107','7108'); + f('7109','7110','7111','7112'); + f('7113','7114','7115','7116'); + f('7117','7118','7119','7120'); + f('7121','7122','7123','7124'); + f('7125','7126','7127','7128'); + f('7129','7130','7131','7132'); + f('7133','7134','7135','7136'); + f('7137','7138','7139','7140'); + f('7141','7142','7143','7144'); + f('7145','7146','7147','7148'); + f('7149','7150','7151','7152'); + f('7153','7154','7155','7156'); + f('7157','7158','7159','7160'); + f('7161','7162','7163','7164'); + f('7165','7166','7167','7168'); + f('7169','7170','7171','7172'); + f('7173','7174','7175','7176'); + f('7177','7178','7179','7180'); + f('7181','7182','7183','7184'); + f('7185','7186','7187','7188'); + f('7189','7190','7191','7192'); + f('7193','7194','7195','7196'); + f('7197','7198','7199','7200'); + f('7201','7202','7203','7204'); + f('7205','7206','7207','7208'); + f('7209','7210','7211','7212'); + f('7213','7214','7215','7216'); + f('7217','7218','7219','7220'); + f('7221','7222','7223','7224'); + f('7225','7226','7227','7228'); + f('7229','7230','7231','7232'); + f('7233','7234','7235','7236'); + f('7237','7238','7239','7240'); + f('7241','7242','7243','7244'); + f('7245','7246','7247','7248'); + f('7249','7250','7251','7252'); + f('7253','7254','7255','7256'); + f('7257','7258','7259','7260'); + f('7261','7262','7263','7264'); + f('7265','7266','7267','7268'); + f('7269','7270','7271','7272'); + f('7273','7274','7275','7276'); + f('7277','7278','7279','7280'); + f('7281','7282','7283','7284'); + f('7285','7286','7287','7288'); + f('7289','7290','7291','7292'); + f('7293','7294','7295','7296'); + f('7297','7298','7299','7300'); + f('7301','7302','7303','7304'); + f('7305','7306','7307','7308'); + f('7309','7310','7311','7312'); + f('7313','7314','7315','7316'); + f('7317','7318','7319','7320'); + f('7321','7322','7323','7324'); + f('7325','7326','7327','7328'); + f('7329','7330','7331','7332'); + f('7333','7334','7335','7336'); + f('7337','7338','7339','7340'); + f('7341','7342','7343','7344'); + f('7345','7346','7347','7348'); + f('7349','7350','7351','7352'); + f('7353','7354','7355','7356'); + f('7357','7358','7359','7360'); + f('7361','7362','7363','7364'); + f('7365','7366','7367','7368'); + f('7369','7370','7371','7372'); + f('7373','7374','7375','7376'); + f('7377','7378','7379','7380'); + f('7381','7382','7383','7384'); + f('7385','7386','7387','7388'); + f('7389','7390','7391','7392'); + f('7393','7394','7395','7396'); + f('7397','7398','7399','7400'); + f('7401','7402','7403','7404'); + f('7405','7406','7407','7408'); + f('7409','7410','7411','7412'); + f('7413','7414','7415','7416'); + f('7417','7418','7419','7420'); + f('7421','7422','7423','7424'); + f('7425','7426','7427','7428'); + f('7429','7430','7431','7432'); + f('7433','7434','7435','7436'); + f('7437','7438','7439','7440'); + f('7441','7442','7443','7444'); + f('7445','7446','7447','7448'); + f('7449','7450','7451','7452'); + f('7453','7454','7455','7456'); + f('7457','7458','7459','7460'); + f('7461','7462','7463','7464'); + f('7465','7466','7467','7468'); + f('7469','7470','7471','7472'); + f('7473','7474','7475','7476'); + f('7477','7478','7479','7480'); + f('7481','7482','7483','7484'); + f('7485','7486','7487','7488'); + f('7489','7490','7491','7492'); + f('7493','7494','7495','7496'); + f('7497','7498','7499','7500'); + f('7501','7502','7503','7504'); + f('7505','7506','7507','7508'); + f('7509','7510','7511','7512'); + f('7513','7514','7515','7516'); + f('7517','7518','7519','7520'); + f('7521','7522','7523','7524'); + f('7525','7526','7527','7528'); + f('7529','7530','7531','7532'); + f('7533','7534','7535','7536'); + f('7537','7538','7539','7540'); + f('7541','7542','7543','7544'); + f('7545','7546','7547','7548'); + f('7549','7550','7551','7552'); + f('7553','7554','7555','7556'); + f('7557','7558','7559','7560'); + f('7561','7562','7563','7564'); + f('7565','7566','7567','7568'); + f('7569','7570','7571','7572'); + f('7573','7574','7575','7576'); + f('7577','7578','7579','7580'); + f('7581','7582','7583','7584'); + f('7585','7586','7587','7588'); + f('7589','7590','7591','7592'); + f('7593','7594','7595','7596'); + f('7597','7598','7599','7600'); + f('7601','7602','7603','7604'); + f('7605','7606','7607','7608'); + f('7609','7610','7611','7612'); + f('7613','7614','7615','7616'); + f('7617','7618','7619','7620'); + f('7621','7622','7623','7624'); + f('7625','7626','7627','7628'); + f('7629','7630','7631','7632'); + f('7633','7634','7635','7636'); + f('7637','7638','7639','7640'); + f('7641','7642','7643','7644'); + f('7645','7646','7647','7648'); + f('7649','7650','7651','7652'); + f('7653','7654','7655','7656'); + f('7657','7658','7659','7660'); + f('7661','7662','7663','7664'); + f('7665','7666','7667','7668'); + f('7669','7670','7671','7672'); + f('7673','7674','7675','7676'); + f('7677','7678','7679','7680'); + f('7681','7682','7683','7684'); + f('7685','7686','7687','7688'); + f('7689','7690','7691','7692'); + f('7693','7694','7695','7696'); + f('7697','7698','7699','7700'); + f('7701','7702','7703','7704'); + f('7705','7706','7707','7708'); + f('7709','7710','7711','7712'); + f('7713','7714','7715','7716'); + f('7717','7718','7719','7720'); + f('7721','7722','7723','7724'); + f('7725','7726','7727','7728'); + f('7729','7730','7731','7732'); + f('7733','7734','7735','7736'); + f('7737','7738','7739','7740'); + f('7741','7742','7743','7744'); + f('7745','7746','7747','7748'); + f('7749','7750','7751','7752'); + f('7753','7754','7755','7756'); + f('7757','7758','7759','7760'); + f('7761','7762','7763','7764'); + f('7765','7766','7767','7768'); + f('7769','7770','7771','7772'); + f('7773','7774','7775','7776'); + f('7777','7778','7779','7780'); + f('7781','7782','7783','7784'); + f('7785','7786','7787','7788'); + f('7789','7790','7791','7792'); + f('7793','7794','7795','7796'); + f('7797','7798','7799','7800'); + f('7801','7802','7803','7804'); + f('7805','7806','7807','7808'); + f('7809','7810','7811','7812'); + f('7813','7814','7815','7816'); + f('7817','7818','7819','7820'); + f('7821','7822','7823','7824'); + f('7825','7826','7827','7828'); + f('7829','7830','7831','7832'); + f('7833','7834','7835','7836'); + f('7837','7838','7839','7840'); + f('7841','7842','7843','7844'); + f('7845','7846','7847','7848'); + f('7849','7850','7851','7852'); + f('7853','7854','7855','7856'); + f('7857','7858','7859','7860'); + f('7861','7862','7863','7864'); + f('7865','7866','7867','7868'); + f('7869','7870','7871','7872'); + f('7873','7874','7875','7876'); + f('7877','7878','7879','7880'); + f('7881','7882','7883','7884'); + f('7885','7886','7887','7888'); + f('7889','7890','7891','7892'); + f('7893','7894','7895','7896'); + f('7897','7898','7899','7900'); + f('7901','7902','7903','7904'); + f('7905','7906','7907','7908'); + f('7909','7910','7911','7912'); + f('7913','7914','7915','7916'); + f('7917','7918','7919','7920'); + f('7921','7922','7923','7924'); + f('7925','7926','7927','7928'); + f('7929','7930','7931','7932'); + f('7933','7934','7935','7936'); + f('7937','7938','7939','7940'); + f('7941','7942','7943','7944'); + f('7945','7946','7947','7948'); + f('7949','7950','7951','7952'); + f('7953','7954','7955','7956'); + f('7957','7958','7959','7960'); + f('7961','7962','7963','7964'); + f('7965','7966','7967','7968'); + f('7969','7970','7971','7972'); + f('7973','7974','7975','7976'); + f('7977','7978','7979','7980'); + f('7981','7982','7983','7984'); + f('7985','7986','7987','7988'); + f('7989','7990','7991','7992'); + f('7993','7994','7995','7996'); + f('7997','7998','7999','8000'); + f('8001','8002','8003','8004'); + f('8005','8006','8007','8008'); + f('8009','8010','8011','8012'); + f('8013','8014','8015','8016'); + f('8017','8018','8019','8020'); + f('8021','8022','8023','8024'); + f('8025','8026','8027','8028'); + f('8029','8030','8031','8032'); + f('8033','8034','8035','8036'); + f('8037','8038','8039','8040'); + f('8041','8042','8043','8044'); + f('8045','8046','8047','8048'); + f('8049','8050','8051','8052'); + f('8053','8054','8055','8056'); + f('8057','8058','8059','8060'); + f('8061','8062','8063','8064'); + f('8065','8066','8067','8068'); + f('8069','8070','8071','8072'); + f('8073','8074','8075','8076'); + f('8077','8078','8079','8080'); + f('8081','8082','8083','8084'); + f('8085','8086','8087','8088'); + f('8089','8090','8091','8092'); + f('8093','8094','8095','8096'); + f('8097','8098','8099','8100'); + f('8101','8102','8103','8104'); + f('8105','8106','8107','8108'); + f('8109','8110','8111','8112'); + f('8113','8114','8115','8116'); + f('8117','8118','8119','8120'); + f('8121','8122','8123','8124'); + f('8125','8126','8127','8128'); + f('8129','8130','8131','8132'); + f('8133','8134','8135','8136'); + f('8137','8138','8139','8140'); + f('8141','8142','8143','8144'); + f('8145','8146','8147','8148'); + f('8149','8150','8151','8152'); + f('8153','8154','8155','8156'); + f('8157','8158','8159','8160'); + f('8161','8162','8163','8164'); + f('8165','8166','8167','8168'); + f('8169','8170','8171','8172'); + f('8173','8174','8175','8176'); + f('8177','8178','8179','8180'); + f('8181','8182','8183','8184'); + f('8185','8186','8187','8188'); + f('8189','8190','8191','8192'); + f('8193','8194','8195','8196'); + f('8197','8198','8199','8200'); + f('8201','8202','8203','8204'); + f('8205','8206','8207','8208'); + f('8209','8210','8211','8212'); + f('8213','8214','8215','8216'); + f('8217','8218','8219','8220'); + f('8221','8222','8223','8224'); + f('8225','8226','8227','8228'); + f('8229','8230','8231','8232'); + f('8233','8234','8235','8236'); + f('8237','8238','8239','8240'); + f('8241','8242','8243','8244'); + f('8245','8246','8247','8248'); + f('8249','8250','8251','8252'); + f('8253','8254','8255','8256'); + f('8257','8258','8259','8260'); + f('8261','8262','8263','8264'); + f('8265','8266','8267','8268'); + f('8269','8270','8271','8272'); + f('8273','8274','8275','8276'); + f('8277','8278','8279','8280'); + f('8281','8282','8283','8284'); + f('8285','8286','8287','8288'); + f('8289','8290','8291','8292'); + f('8293','8294','8295','8296'); + f('8297','8298','8299','8300'); + f('8301','8302','8303','8304'); + f('8305','8306','8307','8308'); + f('8309','8310','8311','8312'); + f('8313','8314','8315','8316'); + f('8317','8318','8319','8320'); + f('8321','8322','8323','8324'); + f('8325','8326','8327','8328'); + f('8329','8330','8331','8332'); + f('8333','8334','8335','8336'); + f('8337','8338','8339','8340'); + f('8341','8342','8343','8344'); + f('8345','8346','8347','8348'); + f('8349','8350','8351','8352'); + f('8353','8354','8355','8356'); + f('8357','8358','8359','8360'); + f('8361','8362','8363','8364'); + f('8365','8366','8367','8368'); + f('8369','8370','8371','8372'); + f('8373','8374','8375','8376'); + f('8377','8378','8379','8380'); + f('8381','8382','8383','8384'); + f('8385','8386','8387','8388'); + f('8389','8390','8391','8392'); + f('8393','8394','8395','8396'); + f('8397','8398','8399','8400'); + f('8401','8402','8403','8404'); + f('8405','8406','8407','8408'); + f('8409','8410','8411','8412'); + f('8413','8414','8415','8416'); + f('8417','8418','8419','8420'); + f('8421','8422','8423','8424'); + f('8425','8426','8427','8428'); + f('8429','8430','8431','8432'); + f('8433','8434','8435','8436'); + f('8437','8438','8439','8440'); + f('8441','8442','8443','8444'); + f('8445','8446','8447','8448'); + f('8449','8450','8451','8452'); + f('8453','8454','8455','8456'); + f('8457','8458','8459','8460'); + f('8461','8462','8463','8464'); + f('8465','8466','8467','8468'); + f('8469','8470','8471','8472'); + f('8473','8474','8475','8476'); + f('8477','8478','8479','8480'); + f('8481','8482','8483','8484'); + f('8485','8486','8487','8488'); + f('8489','8490','8491','8492'); + f('8493','8494','8495','8496'); + f('8497','8498','8499','8500'); + f('8501','8502','8503','8504'); + f('8505','8506','8507','8508'); + f('8509','8510','8511','8512'); + f('8513','8514','8515','8516'); + f('8517','8518','8519','8520'); + f('8521','8522','8523','8524'); + f('8525','8526','8527','8528'); + f('8529','8530','8531','8532'); + f('8533','8534','8535','8536'); + f('8537','8538','8539','8540'); + f('8541','8542','8543','8544'); + f('8545','8546','8547','8548'); + f('8549','8550','8551','8552'); + f('8553','8554','8555','8556'); + f('8557','8558','8559','8560'); + f('8561','8562','8563','8564'); + f('8565','8566','8567','8568'); + f('8569','8570','8571','8572'); + f('8573','8574','8575','8576'); + f('8577','8578','8579','8580'); + f('8581','8582','8583','8584'); + f('8585','8586','8587','8588'); + f('8589','8590','8591','8592'); + f('8593','8594','8595','8596'); + f('8597','8598','8599','8600'); + f('8601','8602','8603','8604'); + f('8605','8606','8607','8608'); + f('8609','8610','8611','8612'); + f('8613','8614','8615','8616'); + f('8617','8618','8619','8620'); + f('8621','8622','8623','8624'); + f('8625','8626','8627','8628'); + f('8629','8630','8631','8632'); + f('8633','8634','8635','8636'); + f('8637','8638','8639','8640'); + f('8641','8642','8643','8644'); + f('8645','8646','8647','8648'); + f('8649','8650','8651','8652'); + f('8653','8654','8655','8656'); + f('8657','8658','8659','8660'); + f('8661','8662','8663','8664'); + f('8665','8666','8667','8668'); + f('8669','8670','8671','8672'); + f('8673','8674','8675','8676'); + f('8677','8678','8679','8680'); + f('8681','8682','8683','8684'); + f('8685','8686','8687','8688'); + f('8689','8690','8691','8692'); + f('8693','8694','8695','8696'); + f('8697','8698','8699','8700'); + f('8701','8702','8703','8704'); + f('8705','8706','8707','8708'); + f('8709','8710','8711','8712'); + f('8713','8714','8715','8716'); + f('8717','8718','8719','8720'); + f('8721','8722','8723','8724'); + f('8725','8726','8727','8728'); + f('8729','8730','8731','8732'); + f('8733','8734','8735','8736'); + f('8737','8738','8739','8740'); + f('8741','8742','8743','8744'); + f('8745','8746','8747','8748'); + f('8749','8750','8751','8752'); + f('8753','8754','8755','8756'); + f('8757','8758','8759','8760'); + f('8761','8762','8763','8764'); + f('8765','8766','8767','8768'); + f('8769','8770','8771','8772'); + f('8773','8774','8775','8776'); + f('8777','8778','8779','8780'); + f('8781','8782','8783','8784'); + f('8785','8786','8787','8788'); + f('8789','8790','8791','8792'); + f('8793','8794','8795','8796'); + f('8797','8798','8799','8800'); + f('8801','8802','8803','8804'); + f('8805','8806','8807','8808'); + f('8809','8810','8811','8812'); + f('8813','8814','8815','8816'); + f('8817','8818','8819','8820'); + f('8821','8822','8823','8824'); + f('8825','8826','8827','8828'); + f('8829','8830','8831','8832'); + f('8833','8834','8835','8836'); + f('8837','8838','8839','8840'); + f('8841','8842','8843','8844'); + f('8845','8846','8847','8848'); + f('8849','8850','8851','8852'); + f('8853','8854','8855','8856'); + f('8857','8858','8859','8860'); + f('8861','8862','8863','8864'); + f('8865','8866','8867','8868'); + f('8869','8870','8871','8872'); + f('8873','8874','8875','8876'); + f('8877','8878','8879','8880'); + f('8881','8882','8883','8884'); + f('8885','8886','8887','8888'); + f('8889','8890','8891','8892'); + f('8893','8894','8895','8896'); + f('8897','8898','8899','8900'); + f('8901','8902','8903','8904'); + f('8905','8906','8907','8908'); + f('8909','8910','8911','8912'); + f('8913','8914','8915','8916'); + f('8917','8918','8919','8920'); + f('8921','8922','8923','8924'); + f('8925','8926','8927','8928'); + f('8929','8930','8931','8932'); + f('8933','8934','8935','8936'); + f('8937','8938','8939','8940'); + f('8941','8942','8943','8944'); + f('8945','8946','8947','8948'); + f('8949','8950','8951','8952'); + f('8953','8954','8955','8956'); + f('8957','8958','8959','8960'); + f('8961','8962','8963','8964'); + f('8965','8966','8967','8968'); + f('8969','8970','8971','8972'); + f('8973','8974','8975','8976'); + f('8977','8978','8979','8980'); + f('8981','8982','8983','8984'); + f('8985','8986','8987','8988'); + f('8989','8990','8991','8992'); + f('8993','8994','8995','8996'); + f('8997','8998','8999','9000'); + f('9001','9002','9003','9004'); + f('9005','9006','9007','9008'); + f('9009','9010','9011','9012'); + f('9013','9014','9015','9016'); + f('9017','9018','9019','9020'); + f('9021','9022','9023','9024'); + f('9025','9026','9027','9028'); + f('9029','9030','9031','9032'); + f('9033','9034','9035','9036'); + f('9037','9038','9039','9040'); + f('9041','9042','9043','9044'); + f('9045','9046','9047','9048'); + f('9049','9050','9051','9052'); + f('9053','9054','9055','9056'); + f('9057','9058','9059','9060'); + f('9061','9062','9063','9064'); + f('9065','9066','9067','9068'); + f('9069','9070','9071','9072'); + f('9073','9074','9075','9076'); + f('9077','9078','9079','9080'); + f('9081','9082','9083','9084'); + f('9085','9086','9087','9088'); + f('9089','9090','9091','9092'); + f('9093','9094','9095','9096'); + f('9097','9098','9099','9100'); + f('9101','9102','9103','9104'); + f('9105','9106','9107','9108'); + f('9109','9110','9111','9112'); + f('9113','9114','9115','9116'); + f('9117','9118','9119','9120'); + f('9121','9122','9123','9124'); + f('9125','9126','9127','9128'); + f('9129','9130','9131','9132'); + f('9133','9134','9135','9136'); + f('9137','9138','9139','9140'); + f('9141','9142','9143','9144'); + f('9145','9146','9147','9148'); + f('9149','9150','9151','9152'); + f('9153','9154','9155','9156'); + f('9157','9158','9159','9160'); + f('9161','9162','9163','9164'); + f('9165','9166','9167','9168'); + f('9169','9170','9171','9172'); + f('9173','9174','9175','9176'); + f('9177','9178','9179','9180'); + f('9181','9182','9183','9184'); + f('9185','9186','9187','9188'); + f('9189','9190','9191','9192'); + f('9193','9194','9195','9196'); + f('9197','9198','9199','9200'); + f('9201','9202','9203','9204'); + f('9205','9206','9207','9208'); + f('9209','9210','9211','9212'); + f('9213','9214','9215','9216'); + f('9217','9218','9219','9220'); + f('9221','9222','9223','9224'); + f('9225','9226','9227','9228'); + f('9229','9230','9231','9232'); + f('9233','9234','9235','9236'); + f('9237','9238','9239','9240'); + f('9241','9242','9243','9244'); + f('9245','9246','9247','9248'); + f('9249','9250','9251','9252'); + f('9253','9254','9255','9256'); + f('9257','9258','9259','9260'); + f('9261','9262','9263','9264'); + f('9265','9266','9267','9268'); + f('9269','9270','9271','9272'); + f('9273','9274','9275','9276'); + f('9277','9278','9279','9280'); + f('9281','9282','9283','9284'); + f('9285','9286','9287','9288'); + f('9289','9290','9291','9292'); + f('9293','9294','9295','9296'); + f('9297','9298','9299','9300'); + f('9301','9302','9303','9304'); + f('9305','9306','9307','9308'); + f('9309','9310','9311','9312'); + f('9313','9314','9315','9316'); + f('9317','9318','9319','9320'); + f('9321','9322','9323','9324'); + f('9325','9326','9327','9328'); + f('9329','9330','9331','9332'); + f('9333','9334','9335','9336'); + f('9337','9338','9339','9340'); + f('9341','9342','9343','9344'); + f('9345','9346','9347','9348'); + f('9349','9350','9351','9352'); + f('9353','9354','9355','9356'); + f('9357','9358','9359','9360'); + f('9361','9362','9363','9364'); + f('9365','9366','9367','9368'); + f('9369','9370','9371','9372'); + f('9373','9374','9375','9376'); + f('9377','9378','9379','9380'); + f('9381','9382','9383','9384'); + f('9385','9386','9387','9388'); + f('9389','9390','9391','9392'); + f('9393','9394','9395','9396'); + f('9397','9398','9399','9400'); + f('9401','9402','9403','9404'); + f('9405','9406','9407','9408'); + f('9409','9410','9411','9412'); + f('9413','9414','9415','9416'); + f('9417','9418','9419','9420'); + f('9421','9422','9423','9424'); + f('9425','9426','9427','9428'); + f('9429','9430','9431','9432'); + f('9433','9434','9435','9436'); + f('9437','9438','9439','9440'); + f('9441','9442','9443','9444'); + f('9445','9446','9447','9448'); + f('9449','9450','9451','9452'); + f('9453','9454','9455','9456'); + f('9457','9458','9459','9460'); + f('9461','9462','9463','9464'); + f('9465','9466','9467','9468'); + f('9469','9470','9471','9472'); + f('9473','9474','9475','9476'); + f('9477','9478','9479','9480'); + f('9481','9482','9483','9484'); + f('9485','9486','9487','9488'); + f('9489','9490','9491','9492'); + f('9493','9494','9495','9496'); + f('9497','9498','9499','9500'); + f('9501','9502','9503','9504'); + f('9505','9506','9507','9508'); + f('9509','9510','9511','9512'); + f('9513','9514','9515','9516'); + f('9517','9518','9519','9520'); + f('9521','9522','9523','9524'); + f('9525','9526','9527','9528'); + f('9529','9530','9531','9532'); + f('9533','9534','9535','9536'); + f('9537','9538','9539','9540'); + f('9541','9542','9543','9544'); + f('9545','9546','9547','9548'); + f('9549','9550','9551','9552'); + f('9553','9554','9555','9556'); + f('9557','9558','9559','9560'); + f('9561','9562','9563','9564'); + f('9565','9566','9567','9568'); + f('9569','9570','9571','9572'); + f('9573','9574','9575','9576'); + f('9577','9578','9579','9580'); + f('9581','9582','9583','9584'); + f('9585','9586','9587','9588'); + f('9589','9590','9591','9592'); + f('9593','9594','9595','9596'); + f('9597','9598','9599','9600'); + f('9601','9602','9603','9604'); + f('9605','9606','9607','9608'); + f('9609','9610','9611','9612'); + f('9613','9614','9615','9616'); + f('9617','9618','9619','9620'); + f('9621','9622','9623','9624'); + f('9625','9626','9627','9628'); + f('9629','9630','9631','9632'); + f('9633','9634','9635','9636'); + f('9637','9638','9639','9640'); + f('9641','9642','9643','9644'); + f('9645','9646','9647','9648'); + f('9649','9650','9651','9652'); + f('9653','9654','9655','9656'); + f('9657','9658','9659','9660'); + f('9661','9662','9663','9664'); + f('9665','9666','9667','9668'); + f('9669','9670','9671','9672'); + f('9673','9674','9675','9676'); + f('9677','9678','9679','9680'); + f('9681','9682','9683','9684'); + f('9685','9686','9687','9688'); + f('9689','9690','9691','9692'); + f('9693','9694','9695','9696'); + f('9697','9698','9699','9700'); + f('9701','9702','9703','9704'); + f('9705','9706','9707','9708'); + f('9709','9710','9711','9712'); + f('9713','9714','9715','9716'); + f('9717','9718','9719','9720'); + f('9721','9722','9723','9724'); + f('9725','9726','9727','9728'); + f('9729','9730','9731','9732'); + f('9733','9734','9735','9736'); + f('9737','9738','9739','9740'); + f('9741','9742','9743','9744'); + f('9745','9746','9747','9748'); + f('9749','9750','9751','9752'); + f('9753','9754','9755','9756'); + f('9757','9758','9759','9760'); + f('9761','9762','9763','9764'); + f('9765','9766','9767','9768'); + f('9769','9770','9771','9772'); + f('9773','9774','9775','9776'); + f('9777','9778','9779','9780'); + f('9781','9782','9783','9784'); + f('9785','9786','9787','9788'); + f('9789','9790','9791','9792'); + f('9793','9794','9795','9796'); + f('9797','9798','9799','9800'); + f('9801','9802','9803','9804'); + f('9805','9806','9807','9808'); + f('9809','9810','9811','9812'); + f('9813','9814','9815','9816'); + f('9817','9818','9819','9820'); + f('9821','9822','9823','9824'); + f('9825','9826','9827','9828'); + f('9829','9830','9831','9832'); + f('9833','9834','9835','9836'); + f('9837','9838','9839','9840'); + f('9841','9842','9843','9844'); + f('9845','9846','9847','9848'); + f('9849','9850','9851','9852'); + f('9853','9854','9855','9856'); + f('9857','9858','9859','9860'); + f('9861','9862','9863','9864'); + f('9865','9866','9867','9868'); + f('9869','9870','9871','9872'); + f('9873','9874','9875','9876'); + f('9877','9878','9879','9880'); + f('9881','9882','9883','9884'); + f('9885','9886','9887','9888'); + f('9889','9890','9891','9892'); + f('9893','9894','9895','9896'); + f('9897','9898','9899','9900'); + f('9901','9902','9903','9904'); + f('9905','9906','9907','9908'); + f('9909','9910','9911','9912'); + f('9913','9914','9915','9916'); + f('9917','9918','9919','9920'); + f('9921','9922','9923','9924'); + f('9925','9926','9927','9928'); + f('9929','9930','9931','9932'); + f('9933','9934','9935','9936'); + f('9937','9938','9939','9940'); + f('9941','9942','9943','9944'); + f('9945','9946','9947','9948'); + f('9949','9950','9951','9952'); + f('9953','9954','9955','9956'); + f('9957','9958','9959','9960'); + f('9961','9962','9963','9964'); + f('9965','9966','9967','9968'); + f('9969','9970','9971','9972'); + f('9973','9974','9975','9976'); + f('9977','9978','9979','9980'); + f('9981','9982','9983','9984'); + f('9985','9986','9987','9988'); + f('9989','9990','9991','9992'); + f('9993','9994','9995','9996'); + f('9997','9998','9999','10000'); + f('10001','10002','10003','10004'); + f('10005','10006','10007','10008'); + f('10009','10010','10011','10012'); + f('10013','10014','10015','10016'); + f('10017','10018','10019','10020'); + f('10021','10022','10023','10024'); + f('10025','10026','10027','10028'); + f('10029','10030','10031','10032'); + f('10033','10034','10035','10036'); + f('10037','10038','10039','10040'); + f('10041','10042','10043','10044'); + f('10045','10046','10047','10048'); + f('10049','10050','10051','10052'); + f('10053','10054','10055','10056'); + f('10057','10058','10059','10060'); + f('10061','10062','10063','10064'); + f('10065','10066','10067','10068'); + f('10069','10070','10071','10072'); + f('10073','10074','10075','10076'); + f('10077','10078','10079','10080'); + f('10081','10082','10083','10084'); + f('10085','10086','10087','10088'); + f('10089','10090','10091','10092'); + f('10093','10094','10095','10096'); + f('10097','10098','10099','10100'); + f('10101','10102','10103','10104'); + f('10105','10106','10107','10108'); + f('10109','10110','10111','10112'); + f('10113','10114','10115','10116'); + f('10117','10118','10119','10120'); + f('10121','10122','10123','10124'); + f('10125','10126','10127','10128'); + f('10129','10130','10131','10132'); + f('10133','10134','10135','10136'); + f('10137','10138','10139','10140'); + f('10141','10142','10143','10144'); + f('10145','10146','10147','10148'); + f('10149','10150','10151','10152'); + f('10153','10154','10155','10156'); + f('10157','10158','10159','10160'); + f('10161','10162','10163','10164'); + f('10165','10166','10167','10168'); + f('10169','10170','10171','10172'); + f('10173','10174','10175','10176'); + f('10177','10178','10179','10180'); + f('10181','10182','10183','10184'); + f('10185','10186','10187','10188'); + f('10189','10190','10191','10192'); + f('10193','10194','10195','10196'); + f('10197','10198','10199','10200'); + f('10201','10202','10203','10204'); + f('10205','10206','10207','10208'); + f('10209','10210','10211','10212'); + f('10213','10214','10215','10216'); + f('10217','10218','10219','10220'); + f('10221','10222','10223','10224'); + f('10225','10226','10227','10228'); + f('10229','10230','10231','10232'); + f('10233','10234','10235','10236'); + f('10237','10238','10239','10240'); + f('10241','10242','10243','10244'); + f('10245','10246','10247','10248'); + f('10249','10250','10251','10252'); + f('10253','10254','10255','10256'); + f('10257','10258','10259','10260'); + f('10261','10262','10263','10264'); + f('10265','10266','10267','10268'); + f('10269','10270','10271','10272'); + f('10273','10274','10275','10276'); + f('10277','10278','10279','10280'); + f('10281','10282','10283','10284'); + f('10285','10286','10287','10288'); + f('10289','10290','10291','10292'); + f('10293','10294','10295','10296'); + f('10297','10298','10299','10300'); + f('10301','10302','10303','10304'); + f('10305','10306','10307','10308'); + f('10309','10310','10311','10312'); + f('10313','10314','10315','10316'); + f('10317','10318','10319','10320'); + f('10321','10322','10323','10324'); + f('10325','10326','10327','10328'); + f('10329','10330','10331','10332'); + f('10333','10334','10335','10336'); + f('10337','10338','10339','10340'); + f('10341','10342','10343','10344'); + f('10345','10346','10347','10348'); + f('10349','10350','10351','10352'); + f('10353','10354','10355','10356'); + f('10357','10358','10359','10360'); + f('10361','10362','10363','10364'); + f('10365','10366','10367','10368'); + f('10369','10370','10371','10372'); + f('10373','10374','10375','10376'); + f('10377','10378','10379','10380'); + f('10381','10382','10383','10384'); + f('10385','10386','10387','10388'); + f('10389','10390','10391','10392'); + f('10393','10394','10395','10396'); + f('10397','10398','10399','10400'); + f('10401','10402','10403','10404'); + f('10405','10406','10407','10408'); + f('10409','10410','10411','10412'); + f('10413','10414','10415','10416'); + f('10417','10418','10419','10420'); + f('10421','10422','10423','10424'); + f('10425','10426','10427','10428'); + f('10429','10430','10431','10432'); + f('10433','10434','10435','10436'); + f('10437','10438','10439','10440'); + f('10441','10442','10443','10444'); + f('10445','10446','10447','10448'); + f('10449','10450','10451','10452'); + f('10453','10454','10455','10456'); + f('10457','10458','10459','10460'); + f('10461','10462','10463','10464'); + f('10465','10466','10467','10468'); + f('10469','10470','10471','10472'); + f('10473','10474','10475','10476'); + f('10477','10478','10479','10480'); + f('10481','10482','10483','10484'); + f('10485','10486','10487','10488'); + f('10489','10490','10491','10492'); + f('10493','10494','10495','10496'); + f('10497','10498','10499','10500'); + f('10501','10502','10503','10504'); + f('10505','10506','10507','10508'); + f('10509','10510','10511','10512'); + f('10513','10514','10515','10516'); + f('10517','10518','10519','10520'); + f('10521','10522','10523','10524'); + f('10525','10526','10527','10528'); + f('10529','10530','10531','10532'); + f('10533','10534','10535','10536'); + f('10537','10538','10539','10540'); + f('10541','10542','10543','10544'); + f('10545','10546','10547','10548'); + f('10549','10550','10551','10552'); + f('10553','10554','10555','10556'); + f('10557','10558','10559','10560'); + f('10561','10562','10563','10564'); + f('10565','10566','10567','10568'); + f('10569','10570','10571','10572'); + f('10573','10574','10575','10576'); + f('10577','10578','10579','10580'); + f('10581','10582','10583','10584'); + f('10585','10586','10587','10588'); + f('10589','10590','10591','10592'); + f('10593','10594','10595','10596'); + f('10597','10598','10599','10600'); + f('10601','10602','10603','10604'); + f('10605','10606','10607','10608'); + f('10609','10610','10611','10612'); + f('10613','10614','10615','10616'); + f('10617','10618','10619','10620'); + f('10621','10622','10623','10624'); + f('10625','10626','10627','10628'); + f('10629','10630','10631','10632'); + f('10633','10634','10635','10636'); + f('10637','10638','10639','10640'); + f('10641','10642','10643','10644'); + f('10645','10646','10647','10648'); + f('10649','10650','10651','10652'); + f('10653','10654','10655','10656'); + f('10657','10658','10659','10660'); + f('10661','10662','10663','10664'); + f('10665','10666','10667','10668'); + f('10669','10670','10671','10672'); + f('10673','10674','10675','10676'); + f('10677','10678','10679','10680'); + f('10681','10682','10683','10684'); + f('10685','10686','10687','10688'); + f('10689','10690','10691','10692'); + f('10693','10694','10695','10696'); + f('10697','10698','10699','10700'); + f('10701','10702','10703','10704'); + f('10705','10706','10707','10708'); + f('10709','10710','10711','10712'); + f('10713','10714','10715','10716'); + f('10717','10718','10719','10720'); + f('10721','10722','10723','10724'); + f('10725','10726','10727','10728'); + f('10729','10730','10731','10732'); + f('10733','10734','10735','10736'); + f('10737','10738','10739','10740'); + f('10741','10742','10743','10744'); + f('10745','10746','10747','10748'); + f('10749','10750','10751','10752'); + f('10753','10754','10755','10756'); + f('10757','10758','10759','10760'); + f('10761','10762','10763','10764'); + f('10765','10766','10767','10768'); + f('10769','10770','10771','10772'); + f('10773','10774','10775','10776'); + f('10777','10778','10779','10780'); + f('10781','10782','10783','10784'); + f('10785','10786','10787','10788'); + f('10789','10790','10791','10792'); + f('10793','10794','10795','10796'); + f('10797','10798','10799','10800'); + f('10801','10802','10803','10804'); + f('10805','10806','10807','10808'); + f('10809','10810','10811','10812'); + f('10813','10814','10815','10816'); + f('10817','10818','10819','10820'); + f('10821','10822','10823','10824'); + f('10825','10826','10827','10828'); + f('10829','10830','10831','10832'); + f('10833','10834','10835','10836'); + f('10837','10838','10839','10840'); + f('10841','10842','10843','10844'); + f('10845','10846','10847','10848'); + f('10849','10850','10851','10852'); + f('10853','10854','10855','10856'); + f('10857','10858','10859','10860'); + f('10861','10862','10863','10864'); + f('10865','10866','10867','10868'); + f('10869','10870','10871','10872'); + f('10873','10874','10875','10876'); + f('10877','10878','10879','10880'); + f('10881','10882','10883','10884'); + f('10885','10886','10887','10888'); + f('10889','10890','10891','10892'); + f('10893','10894','10895','10896'); + f('10897','10898','10899','10900'); + f('10901','10902','10903','10904'); + f('10905','10906','10907','10908'); + f('10909','10910','10911','10912'); + f('10913','10914','10915','10916'); + f('10917','10918','10919','10920'); + f('10921','10922','10923','10924'); + f('10925','10926','10927','10928'); + f('10929','10930','10931','10932'); + f('10933','10934','10935','10936'); + f('10937','10938','10939','10940'); + f('10941','10942','10943','10944'); + f('10945','10946','10947','10948'); + f('10949','10950','10951','10952'); + f('10953','10954','10955','10956'); + f('10957','10958','10959','10960'); + f('10961','10962','10963','10964'); + f('10965','10966','10967','10968'); + f('10969','10970','10971','10972'); + f('10973','10974','10975','10976'); + f('10977','10978','10979','10980'); + f('10981','10982','10983','10984'); + f('10985','10986','10987','10988'); + f('10989','10990','10991','10992'); + f('10993','10994','10995','10996'); + f('10997','10998','10999','11000'); + f('11001','11002','11003','11004'); + f('11005','11006','11007','11008'); + f('11009','11010','11011','11012'); + f('11013','11014','11015','11016'); + f('11017','11018','11019','11020'); + f('11021','11022','11023','11024'); + f('11025','11026','11027','11028'); + f('11029','11030','11031','11032'); + f('11033','11034','11035','11036'); + f('11037','11038','11039','11040'); + f('11041','11042','11043','11044'); + f('11045','11046','11047','11048'); + f('11049','11050','11051','11052'); + f('11053','11054','11055','11056'); + f('11057','11058','11059','11060'); + f('11061','11062','11063','11064'); + f('11065','11066','11067','11068'); + f('11069','11070','11071','11072'); + f('11073','11074','11075','11076'); + f('11077','11078','11079','11080'); + f('11081','11082','11083','11084'); + f('11085','11086','11087','11088'); + f('11089','11090','11091','11092'); + f('11093','11094','11095','11096'); + f('11097','11098','11099','11100'); + f('11101','11102','11103','11104'); + f('11105','11106','11107','11108'); + f('11109','11110','11111','11112'); + f('11113','11114','11115','11116'); + f('11117','11118','11119','11120'); + f('11121','11122','11123','11124'); + f('11125','11126','11127','11128'); + f('11129','11130','11131','11132'); + f('11133','11134','11135','11136'); + f('11137','11138','11139','11140'); + f('11141','11142','11143','11144'); + f('11145','11146','11147','11148'); + f('11149','11150','11151','11152'); + f('11153','11154','11155','11156'); + f('11157','11158','11159','11160'); + f('11161','11162','11163','11164'); + f('11165','11166','11167','11168'); + f('11169','11170','11171','11172'); + f('11173','11174','11175','11176'); + f('11177','11178','11179','11180'); + f('11181','11182','11183','11184'); + f('11185','11186','11187','11188'); + f('11189','11190','11191','11192'); + f('11193','11194','11195','11196'); + f('11197','11198','11199','11200'); + f('11201','11202','11203','11204'); + f('11205','11206','11207','11208'); + f('11209','11210','11211','11212'); + f('11213','11214','11215','11216'); + f('11217','11218','11219','11220'); + f('11221','11222','11223','11224'); + f('11225','11226','11227','11228'); + f('11229','11230','11231','11232'); + f('11233','11234','11235','11236'); + f('11237','11238','11239','11240'); + f('11241','11242','11243','11244'); + f('11245','11246','11247','11248'); + f('11249','11250','11251','11252'); + f('11253','11254','11255','11256'); + f('11257','11258','11259','11260'); + f('11261','11262','11263','11264'); + f('11265','11266','11267','11268'); + f('11269','11270','11271','11272'); + f('11273','11274','11275','11276'); + f('11277','11278','11279','11280'); + f('11281','11282','11283','11284'); + f('11285','11286','11287','11288'); + f('11289','11290','11291','11292'); + f('11293','11294','11295','11296'); + f('11297','11298','11299','11300'); + f('11301','11302','11303','11304'); + f('11305','11306','11307','11308'); + f('11309','11310','11311','11312'); + f('11313','11314','11315','11316'); + f('11317','11318','11319','11320'); + f('11321','11322','11323','11324'); + f('11325','11326','11327','11328'); + f('11329','11330','11331','11332'); + f('11333','11334','11335','11336'); + f('11337','11338','11339','11340'); + f('11341','11342','11343','11344'); + f('11345','11346','11347','11348'); + f('11349','11350','11351','11352'); + f('11353','11354','11355','11356'); + f('11357','11358','11359','11360'); + f('11361','11362','11363','11364'); + f('11365','11366','11367','11368'); + f('11369','11370','11371','11372'); + f('11373','11374','11375','11376'); + f('11377','11378','11379','11380'); + f('11381','11382','11383','11384'); + f('11385','11386','11387','11388'); + f('11389','11390','11391','11392'); + f('11393','11394','11395','11396'); + f('11397','11398','11399','11400'); + f('11401','11402','11403','11404'); + f('11405','11406','11407','11408'); + f('11409','11410','11411','11412'); + f('11413','11414','11415','11416'); + f('11417','11418','11419','11420'); + f('11421','11422','11423','11424'); + f('11425','11426','11427','11428'); + f('11429','11430','11431','11432'); + f('11433','11434','11435','11436'); + f('11437','11438','11439','11440'); + f('11441','11442','11443','11444'); + f('11445','11446','11447','11448'); + f('11449','11450','11451','11452'); + f('11453','11454','11455','11456'); + f('11457','11458','11459','11460'); + f('11461','11462','11463','11464'); + f('11465','11466','11467','11468'); + f('11469','11470','11471','11472'); + f('11473','11474','11475','11476'); + f('11477','11478','11479','11480'); + f('11481','11482','11483','11484'); + f('11485','11486','11487','11488'); + f('11489','11490','11491','11492'); + f('11493','11494','11495','11496'); + f('11497','11498','11499','11500'); + f('11501','11502','11503','11504'); + f('11505','11506','11507','11508'); + f('11509','11510','11511','11512'); + f('11513','11514','11515','11516'); + f('11517','11518','11519','11520'); + f('11521','11522','11523','11524'); + f('11525','11526','11527','11528'); + f('11529','11530','11531','11532'); + f('11533','11534','11535','11536'); + f('11537','11538','11539','11540'); + f('11541','11542','11543','11544'); + f('11545','11546','11547','11548'); + f('11549','11550','11551','11552'); + f('11553','11554','11555','11556'); + f('11557','11558','11559','11560'); + f('11561','11562','11563','11564'); + f('11565','11566','11567','11568'); + f('11569','11570','11571','11572'); + f('11573','11574','11575','11576'); + f('11577','11578','11579','11580'); + f('11581','11582','11583','11584'); + f('11585','11586','11587','11588'); + f('11589','11590','11591','11592'); + f('11593','11594','11595','11596'); + f('11597','11598','11599','11600'); + f('11601','11602','11603','11604'); + f('11605','11606','11607','11608'); + f('11609','11610','11611','11612'); + f('11613','11614','11615','11616'); + f('11617','11618','11619','11620'); + f('11621','11622','11623','11624'); + f('11625','11626','11627','11628'); + f('11629','11630','11631','11632'); + f('11633','11634','11635','11636'); + f('11637','11638','11639','11640'); + f('11641','11642','11643','11644'); + f('11645','11646','11647','11648'); + f('11649','11650','11651','11652'); + f('11653','11654','11655','11656'); + f('11657','11658','11659','11660'); + f('11661','11662','11663','11664'); + f('11665','11666','11667','11668'); + f('11669','11670','11671','11672'); + f('11673','11674','11675','11676'); + f('11677','11678','11679','11680'); + f('11681','11682','11683','11684'); + f('11685','11686','11687','11688'); + f('11689','11690','11691','11692'); + f('11693','11694','11695','11696'); + f('11697','11698','11699','11700'); + f('11701','11702','11703','11704'); + f('11705','11706','11707','11708'); + f('11709','11710','11711','11712'); + f('11713','11714','11715','11716'); + f('11717','11718','11719','11720'); + f('11721','11722','11723','11724'); + f('11725','11726','11727','11728'); + f('11729','11730','11731','11732'); + f('11733','11734','11735','11736'); + f('11737','11738','11739','11740'); + f('11741','11742','11743','11744'); + f('11745','11746','11747','11748'); + f('11749','11750','11751','11752'); + f('11753','11754','11755','11756'); + f('11757','11758','11759','11760'); + f('11761','11762','11763','11764'); + f('11765','11766','11767','11768'); + f('11769','11770','11771','11772'); + f('11773','11774','11775','11776'); + f('11777','11778','11779','11780'); + f('11781','11782','11783','11784'); + f('11785','11786','11787','11788'); + f('11789','11790','11791','11792'); + f('11793','11794','11795','11796'); + f('11797','11798','11799','11800'); + f('11801','11802','11803','11804'); + f('11805','11806','11807','11808'); + f('11809','11810','11811','11812'); + f('11813','11814','11815','11816'); + f('11817','11818','11819','11820'); + f('11821','11822','11823','11824'); + f('11825','11826','11827','11828'); + f('11829','11830','11831','11832'); + f('11833','11834','11835','11836'); + f('11837','11838','11839','11840'); + f('11841','11842','11843','11844'); + f('11845','11846','11847','11848'); + f('11849','11850','11851','11852'); + f('11853','11854','11855','11856'); + f('11857','11858','11859','11860'); + f('11861','11862','11863','11864'); + f('11865','11866','11867','11868'); + f('11869','11870','11871','11872'); + f('11873','11874','11875','11876'); + f('11877','11878','11879','11880'); + f('11881','11882','11883','11884'); + f('11885','11886','11887','11888'); + f('11889','11890','11891','11892'); + f('11893','11894','11895','11896'); + f('11897','11898','11899','11900'); + f('11901','11902','11903','11904'); + f('11905','11906','11907','11908'); + f('11909','11910','11911','11912'); + f('11913','11914','11915','11916'); + f('11917','11918','11919','11920'); + f('11921','11922','11923','11924'); + f('11925','11926','11927','11928'); + f('11929','11930','11931','11932'); + f('11933','11934','11935','11936'); + f('11937','11938','11939','11940'); + f('11941','11942','11943','11944'); + f('11945','11946','11947','11948'); + f('11949','11950','11951','11952'); + f('11953','11954','11955','11956'); + f('11957','11958','11959','11960'); + f('11961','11962','11963','11964'); + f('11965','11966','11967','11968'); + f('11969','11970','11971','11972'); + f('11973','11974','11975','11976'); + f('11977','11978','11979','11980'); + f('11981','11982','11983','11984'); + f('11985','11986','11987','11988'); + f('11989','11990','11991','11992'); + f('11993','11994','11995','11996'); + f('11997','11998','11999','12000'); + f('12001','12002','12003','12004'); + f('12005','12006','12007','12008'); + f('12009','12010','12011','12012'); + f('12013','12014','12015','12016'); + f('12017','12018','12019','12020'); + f('12021','12022','12023','12024'); + f('12025','12026','12027','12028'); + f('12029','12030','12031','12032'); + f('12033','12034','12035','12036'); + f('12037','12038','12039','12040'); + f('12041','12042','12043','12044'); + f('12045','12046','12047','12048'); + f('12049','12050','12051','12052'); + f('12053','12054','12055','12056'); + f('12057','12058','12059','12060'); + f('12061','12062','12063','12064'); + f('12065','12066','12067','12068'); + f('12069','12070','12071','12072'); + f('12073','12074','12075','12076'); + f('12077','12078','12079','12080'); + f('12081','12082','12083','12084'); + f('12085','12086','12087','12088'); + f('12089','12090','12091','12092'); + f('12093','12094','12095','12096'); + f('12097','12098','12099','12100'); + f('12101','12102','12103','12104'); + f('12105','12106','12107','12108'); + f('12109','12110','12111','12112'); + f('12113','12114','12115','12116'); + f('12117','12118','12119','12120'); + f('12121','12122','12123','12124'); + f('12125','12126','12127','12128'); + f('12129','12130','12131','12132'); + f('12133','12134','12135','12136'); + f('12137','12138','12139','12140'); + f('12141','12142','12143','12144'); + f('12145','12146','12147','12148'); + f('12149','12150','12151','12152'); + f('12153','12154','12155','12156'); + f('12157','12158','12159','12160'); + f('12161','12162','12163','12164'); + f('12165','12166','12167','12168'); + f('12169','12170','12171','12172'); + f('12173','12174','12175','12176'); + f('12177','12178','12179','12180'); + f('12181','12182','12183','12184'); + f('12185','12186','12187','12188'); + f('12189','12190','12191','12192'); + f('12193','12194','12195','12196'); + f('12197','12198','12199','12200'); + f('12201','12202','12203','12204'); + f('12205','12206','12207','12208'); + f('12209','12210','12211','12212'); + f('12213','12214','12215','12216'); + f('12217','12218','12219','12220'); + f('12221','12222','12223','12224'); + f('12225','12226','12227','12228'); + f('12229','12230','12231','12232'); + f('12233','12234','12235','12236'); + f('12237','12238','12239','12240'); + f('12241','12242','12243','12244'); + f('12245','12246','12247','12248'); + f('12249','12250','12251','12252'); + f('12253','12254','12255','12256'); + f('12257','12258','12259','12260'); + f('12261','12262','12263','12264'); + f('12265','12266','12267','12268'); + f('12269','12270','12271','12272'); + f('12273','12274','12275','12276'); + f('12277','12278','12279','12280'); + f('12281','12282','12283','12284'); + f('12285','12286','12287','12288'); + f('12289','12290','12291','12292'); + f('12293','12294','12295','12296'); + f('12297','12298','12299','12300'); + f('12301','12302','12303','12304'); + f('12305','12306','12307','12308'); + f('12309','12310','12311','12312'); + f('12313','12314','12315','12316'); + f('12317','12318','12319','12320'); + f('12321','12322','12323','12324'); + f('12325','12326','12327','12328'); + f('12329','12330','12331','12332'); + f('12333','12334','12335','12336'); + f('12337','12338','12339','12340'); + f('12341','12342','12343','12344'); + f('12345','12346','12347','12348'); + f('12349','12350','12351','12352'); + f('12353','12354','12355','12356'); + f('12357','12358','12359','12360'); + f('12361','12362','12363','12364'); + f('12365','12366','12367','12368'); + f('12369','12370','12371','12372'); + f('12373','12374','12375','12376'); + f('12377','12378','12379','12380'); + f('12381','12382','12383','12384'); + f('12385','12386','12387','12388'); + f('12389','12390','12391','12392'); + f('12393','12394','12395','12396'); + f('12397','12398','12399','12400'); + f('12401','12402','12403','12404'); + f('12405','12406','12407','12408'); + f('12409','12410','12411','12412'); + f('12413','12414','12415','12416'); + f('12417','12418','12419','12420'); + f('12421','12422','12423','12424'); + f('12425','12426','12427','12428'); + f('12429','12430','12431','12432'); + f('12433','12434','12435','12436'); + f('12437','12438','12439','12440'); + f('12441','12442','12443','12444'); + f('12445','12446','12447','12448'); + f('12449','12450','12451','12452'); + f('12453','12454','12455','12456'); + f('12457','12458','12459','12460'); + f('12461','12462','12463','12464'); + f('12465','12466','12467','12468'); + f('12469','12470','12471','12472'); + f('12473','12474','12475','12476'); + f('12477','12478','12479','12480'); + f('12481','12482','12483','12484'); + f('12485','12486','12487','12488'); + f('12489','12490','12491','12492'); + f('12493','12494','12495','12496'); + f('12497','12498','12499','12500'); + f('12501','12502','12503','12504'); + f('12505','12506','12507','12508'); + f('12509','12510','12511','12512'); + f('12513','12514','12515','12516'); + f('12517','12518','12519','12520'); + f('12521','12522','12523','12524'); + f('12525','12526','12527','12528'); + f('12529','12530','12531','12532'); + f('12533','12534','12535','12536'); + f('12537','12538','12539','12540'); + f('12541','12542','12543','12544'); + f('12545','12546','12547','12548'); + f('12549','12550','12551','12552'); + f('12553','12554','12555','12556'); + f('12557','12558','12559','12560'); + f('12561','12562','12563','12564'); + f('12565','12566','12567','12568'); + f('12569','12570','12571','12572'); + f('12573','12574','12575','12576'); + f('12577','12578','12579','12580'); + f('12581','12582','12583','12584'); + f('12585','12586','12587','12588'); + f('12589','12590','12591','12592'); + f('12593','12594','12595','12596'); + f('12597','12598','12599','12600'); + f('12601','12602','12603','12604'); + f('12605','12606','12607','12608'); + f('12609','12610','12611','12612'); + f('12613','12614','12615','12616'); + f('12617','12618','12619','12620'); + f('12621','12622','12623','12624'); + f('12625','12626','12627','12628'); + f('12629','12630','12631','12632'); + f('12633','12634','12635','12636'); + f('12637','12638','12639','12640'); + f('12641','12642','12643','12644'); + f('12645','12646','12647','12648'); + f('12649','12650','12651','12652'); + f('12653','12654','12655','12656'); + f('12657','12658','12659','12660'); + f('12661','12662','12663','12664'); + f('12665','12666','12667','12668'); + f('12669','12670','12671','12672'); + f('12673','12674','12675','12676'); + f('12677','12678','12679','12680'); + f('12681','12682','12683','12684'); + f('12685','12686','12687','12688'); + f('12689','12690','12691','12692'); + f('12693','12694','12695','12696'); + f('12697','12698','12699','12700'); + f('12701','12702','12703','12704'); + f('12705','12706','12707','12708'); + f('12709','12710','12711','12712'); + f('12713','12714','12715','12716'); + f('12717','12718','12719','12720'); + f('12721','12722','12723','12724'); + f('12725','12726','12727','12728'); + f('12729','12730','12731','12732'); + f('12733','12734','12735','12736'); + f('12737','12738','12739','12740'); + f('12741','12742','12743','12744'); + f('12745','12746','12747','12748'); + f('12749','12750','12751','12752'); + f('12753','12754','12755','12756'); + f('12757','12758','12759','12760'); + f('12761','12762','12763','12764'); + f('12765','12766','12767','12768'); + f('12769','12770','12771','12772'); + f('12773','12774','12775','12776'); + f('12777','12778','12779','12780'); + f('12781','12782','12783','12784'); + f('12785','12786','12787','12788'); + f('12789','12790','12791','12792'); + f('12793','12794','12795','12796'); + f('12797','12798','12799','12800'); + f('12801','12802','12803','12804'); + f('12805','12806','12807','12808'); + f('12809','12810','12811','12812'); + f('12813','12814','12815','12816'); + f('12817','12818','12819','12820'); + f('12821','12822','12823','12824'); + f('12825','12826','12827','12828'); + f('12829','12830','12831','12832'); + f('12833','12834','12835','12836'); + f('12837','12838','12839','12840'); + f('12841','12842','12843','12844'); + f('12845','12846','12847','12848'); + f('12849','12850','12851','12852'); + f('12853','12854','12855','12856'); + f('12857','12858','12859','12860'); + f('12861','12862','12863','12864'); + f('12865','12866','12867','12868'); + f('12869','12870','12871','12872'); + f('12873','12874','12875','12876'); + f('12877','12878','12879','12880'); + f('12881','12882','12883','12884'); + f('12885','12886','12887','12888'); + f('12889','12890','12891','12892'); + f('12893','12894','12895','12896'); + f('12897','12898','12899','12900'); + f('12901','12902','12903','12904'); + f('12905','12906','12907','12908'); + f('12909','12910','12911','12912'); + f('12913','12914','12915','12916'); + f('12917','12918','12919','12920'); + f('12921','12922','12923','12924'); + f('12925','12926','12927','12928'); + f('12929','12930','12931','12932'); + f('12933','12934','12935','12936'); + f('12937','12938','12939','12940'); + f('12941','12942','12943','12944'); + f('12945','12946','12947','12948'); + f('12949','12950','12951','12952'); + f('12953','12954','12955','12956'); + f('12957','12958','12959','12960'); + f('12961','12962','12963','12964'); + f('12965','12966','12967','12968'); + f('12969','12970','12971','12972'); + f('12973','12974','12975','12976'); + f('12977','12978','12979','12980'); + f('12981','12982','12983','12984'); + f('12985','12986','12987','12988'); + f('12989','12990','12991','12992'); + f('12993','12994','12995','12996'); + f('12997','12998','12999','13000'); + f('13001','13002','13003','13004'); + f('13005','13006','13007','13008'); + f('13009','13010','13011','13012'); + f('13013','13014','13015','13016'); + f('13017','13018','13019','13020'); + f('13021','13022','13023','13024'); + f('13025','13026','13027','13028'); + f('13029','13030','13031','13032'); + f('13033','13034','13035','13036'); + f('13037','13038','13039','13040'); + f('13041','13042','13043','13044'); + f('13045','13046','13047','13048'); + f('13049','13050','13051','13052'); + f('13053','13054','13055','13056'); + f('13057','13058','13059','13060'); + f('13061','13062','13063','13064'); + f('13065','13066','13067','13068'); + f('13069','13070','13071','13072'); + f('13073','13074','13075','13076'); + f('13077','13078','13079','13080'); + f('13081','13082','13083','13084'); + f('13085','13086','13087','13088'); + f('13089','13090','13091','13092'); + f('13093','13094','13095','13096'); + f('13097','13098','13099','13100'); + f('13101','13102','13103','13104'); + f('13105','13106','13107','13108'); + f('13109','13110','13111','13112'); + f('13113','13114','13115','13116'); + f('13117','13118','13119','13120'); + f('13121','13122','13123','13124'); + f('13125','13126','13127','13128'); + f('13129','13130','13131','13132'); + f('13133','13134','13135','13136'); + f('13137','13138','13139','13140'); + f('13141','13142','13143','13144'); + f('13145','13146','13147','13148'); + f('13149','13150','13151','13152'); + f('13153','13154','13155','13156'); + f('13157','13158','13159','13160'); + f('13161','13162','13163','13164'); + f('13165','13166','13167','13168'); + f('13169','13170','13171','13172'); + f('13173','13174','13175','13176'); + f('13177','13178','13179','13180'); + f('13181','13182','13183','13184'); + f('13185','13186','13187','13188'); + f('13189','13190','13191','13192'); + f('13193','13194','13195','13196'); + f('13197','13198','13199','13200'); + f('13201','13202','13203','13204'); + f('13205','13206','13207','13208'); + f('13209','13210','13211','13212'); + f('13213','13214','13215','13216'); + f('13217','13218','13219','13220'); + f('13221','13222','13223','13224'); + f('13225','13226','13227','13228'); + f('13229','13230','13231','13232'); + f('13233','13234','13235','13236'); + f('13237','13238','13239','13240'); + f('13241','13242','13243','13244'); + f('13245','13246','13247','13248'); + f('13249','13250','13251','13252'); + f('13253','13254','13255','13256'); + f('13257','13258','13259','13260'); + f('13261','13262','13263','13264'); + f('13265','13266','13267','13268'); + f('13269','13270','13271','13272'); + f('13273','13274','13275','13276'); + f('13277','13278','13279','13280'); + f('13281','13282','13283','13284'); + f('13285','13286','13287','13288'); + f('13289','13290','13291','13292'); + f('13293','13294','13295','13296'); + f('13297','13298','13299','13300'); + f('13301','13302','13303','13304'); + f('13305','13306','13307','13308'); + f('13309','13310','13311','13312'); + f('13313','13314','13315','13316'); + f('13317','13318','13319','13320'); + f('13321','13322','13323','13324'); + f('13325','13326','13327','13328'); + f('13329','13330','13331','13332'); + f('13333','13334','13335','13336'); + f('13337','13338','13339','13340'); + f('13341','13342','13343','13344'); + f('13345','13346','13347','13348'); + f('13349','13350','13351','13352'); + f('13353','13354','13355','13356'); + f('13357','13358','13359','13360'); + f('13361','13362','13363','13364'); + f('13365','13366','13367','13368'); + f('13369','13370','13371','13372'); + f('13373','13374','13375','13376'); + f('13377','13378','13379','13380'); + f('13381','13382','13383','13384'); + f('13385','13386','13387','13388'); + f('13389','13390','13391','13392'); + f('13393','13394','13395','13396'); + f('13397','13398','13399','13400'); + f('13401','13402','13403','13404'); + f('13405','13406','13407','13408'); + f('13409','13410','13411','13412'); + f('13413','13414','13415','13416'); + f('13417','13418','13419','13420'); + f('13421','13422','13423','13424'); + f('13425','13426','13427','13428'); + f('13429','13430','13431','13432'); + f('13433','13434','13435','13436'); + f('13437','13438','13439','13440'); + f('13441','13442','13443','13444'); + f('13445','13446','13447','13448'); + f('13449','13450','13451','13452'); + f('13453','13454','13455','13456'); + f('13457','13458','13459','13460'); + f('13461','13462','13463','13464'); + f('13465','13466','13467','13468'); + f('13469','13470','13471','13472'); + f('13473','13474','13475','13476'); + f('13477','13478','13479','13480'); + f('13481','13482','13483','13484'); + f('13485','13486','13487','13488'); + f('13489','13490','13491','13492'); + f('13493','13494','13495','13496'); + f('13497','13498','13499','13500'); + f('13501','13502','13503','13504'); + f('13505','13506','13507','13508'); + f('13509','13510','13511','13512'); + f('13513','13514','13515','13516'); + f('13517','13518','13519','13520'); + f('13521','13522','13523','13524'); + f('13525','13526','13527','13528'); + f('13529','13530','13531','13532'); + f('13533','13534','13535','13536'); + f('13537','13538','13539','13540'); + f('13541','13542','13543','13544'); + f('13545','13546','13547','13548'); + f('13549','13550','13551','13552'); + f('13553','13554','13555','13556'); + f('13557','13558','13559','13560'); + f('13561','13562','13563','13564'); + f('13565','13566','13567','13568'); + f('13569','13570','13571','13572'); + f('13573','13574','13575','13576'); + f('13577','13578','13579','13580'); + f('13581','13582','13583','13584'); + f('13585','13586','13587','13588'); + f('13589','13590','13591','13592'); + f('13593','13594','13595','13596'); + f('13597','13598','13599','13600'); + f('13601','13602','13603','13604'); + f('13605','13606','13607','13608'); + f('13609','13610','13611','13612'); + f('13613','13614','13615','13616'); + f('13617','13618','13619','13620'); + f('13621','13622','13623','13624'); + f('13625','13626','13627','13628'); + f('13629','13630','13631','13632'); + f('13633','13634','13635','13636'); + f('13637','13638','13639','13640'); + f('13641','13642','13643','13644'); + f('13645','13646','13647','13648'); + f('13649','13650','13651','13652'); + f('13653','13654','13655','13656'); + f('13657','13658','13659','13660'); + f('13661','13662','13663','13664'); + f('13665','13666','13667','13668'); + f('13669','13670','13671','13672'); + f('13673','13674','13675','13676'); + f('13677','13678','13679','13680'); + f('13681','13682','13683','13684'); + f('13685','13686','13687','13688'); + f('13689','13690','13691','13692'); + f('13693','13694','13695','13696'); + f('13697','13698','13699','13700'); + f('13701','13702','13703','13704'); + f('13705','13706','13707','13708'); + f('13709','13710','13711','13712'); + f('13713','13714','13715','13716'); + f('13717','13718','13719','13720'); + f('13721','13722','13723','13724'); + f('13725','13726','13727','13728'); + f('13729','13730','13731','13732'); + f('13733','13734','13735','13736'); + f('13737','13738','13739','13740'); + f('13741','13742','13743','13744'); + f('13745','13746','13747','13748'); + f('13749','13750','13751','13752'); + f('13753','13754','13755','13756'); + f('13757','13758','13759','13760'); + f('13761','13762','13763','13764'); + f('13765','13766','13767','13768'); + f('13769','13770','13771','13772'); + f('13773','13774','13775','13776'); + f('13777','13778','13779','13780'); + f('13781','13782','13783','13784'); + f('13785','13786','13787','13788'); + f('13789','13790','13791','13792'); + f('13793','13794','13795','13796'); + f('13797','13798','13799','13800'); + f('13801','13802','13803','13804'); + f('13805','13806','13807','13808'); + f('13809','13810','13811','13812'); + f('13813','13814','13815','13816'); + f('13817','13818','13819','13820'); + f('13821','13822','13823','13824'); + f('13825','13826','13827','13828'); + f('13829','13830','13831','13832'); + f('13833','13834','13835','13836'); + f('13837','13838','13839','13840'); + f('13841','13842','13843','13844'); + f('13845','13846','13847','13848'); + f('13849','13850','13851','13852'); + f('13853','13854','13855','13856'); + f('13857','13858','13859','13860'); + f('13861','13862','13863','13864'); + f('13865','13866','13867','13868'); + f('13869','13870','13871','13872'); + f('13873','13874','13875','13876'); + f('13877','13878','13879','13880'); + f('13881','13882','13883','13884'); + f('13885','13886','13887','13888'); + f('13889','13890','13891','13892'); + f('13893','13894','13895','13896'); + f('13897','13898','13899','13900'); + f('13901','13902','13903','13904'); + f('13905','13906','13907','13908'); + f('13909','13910','13911','13912'); + f('13913','13914','13915','13916'); + f('13917','13918','13919','13920'); + f('13921','13922','13923','13924'); + f('13925','13926','13927','13928'); + f('13929','13930','13931','13932'); + f('13933','13934','13935','13936'); + f('13937','13938','13939','13940'); + f('13941','13942','13943','13944'); + f('13945','13946','13947','13948'); + f('13949','13950','13951','13952'); + f('13953','13954','13955','13956'); + f('13957','13958','13959','13960'); + f('13961','13962','13963','13964'); + f('13965','13966','13967','13968'); + f('13969','13970','13971','13972'); + f('13973','13974','13975','13976'); + f('13977','13978','13979','13980'); + f('13981','13982','13983','13984'); + f('13985','13986','13987','13988'); + f('13989','13990','13991','13992'); + f('13993','13994','13995','13996'); + f('13997','13998','13999','14000'); + f('14001','14002','14003','14004'); + f('14005','14006','14007','14008'); + f('14009','14010','14011','14012'); + f('14013','14014','14015','14016'); + f('14017','14018','14019','14020'); + f('14021','14022','14023','14024'); + f('14025','14026','14027','14028'); + f('14029','14030','14031','14032'); + f('14033','14034','14035','14036'); + f('14037','14038','14039','14040'); + f('14041','14042','14043','14044'); + f('14045','14046','14047','14048'); + f('14049','14050','14051','14052'); + f('14053','14054','14055','14056'); + f('14057','14058','14059','14060'); + f('14061','14062','14063','14064'); + f('14065','14066','14067','14068'); + f('14069','14070','14071','14072'); + f('14073','14074','14075','14076'); + f('14077','14078','14079','14080'); + f('14081','14082','14083','14084'); + f('14085','14086','14087','14088'); + f('14089','14090','14091','14092'); + f('14093','14094','14095','14096'); + f('14097','14098','14099','14100'); + f('14101','14102','14103','14104'); + f('14105','14106','14107','14108'); + f('14109','14110','14111','14112'); + f('14113','14114','14115','14116'); + f('14117','14118','14119','14120'); + f('14121','14122','14123','14124'); + f('14125','14126','14127','14128'); + f('14129','14130','14131','14132'); + f('14133','14134','14135','14136'); + f('14137','14138','14139','14140'); + f('14141','14142','14143','14144'); + f('14145','14146','14147','14148'); + f('14149','14150','14151','14152'); + f('14153','14154','14155','14156'); + f('14157','14158','14159','14160'); + f('14161','14162','14163','14164'); + f('14165','14166','14167','14168'); + f('14169','14170','14171','14172'); + f('14173','14174','14175','14176'); + f('14177','14178','14179','14180'); + f('14181','14182','14183','14184'); + f('14185','14186','14187','14188'); + f('14189','14190','14191','14192'); + f('14193','14194','14195','14196'); + f('14197','14198','14199','14200'); + f('14201','14202','14203','14204'); + f('14205','14206','14207','14208'); + f('14209','14210','14211','14212'); + f('14213','14214','14215','14216'); + f('14217','14218','14219','14220'); + f('14221','14222','14223','14224'); + f('14225','14226','14227','14228'); + f('14229','14230','14231','14232'); + f('14233','14234','14235','14236'); + f('14237','14238','14239','14240'); + f('14241','14242','14243','14244'); + f('14245','14246','14247','14248'); + f('14249','14250','14251','14252'); + f('14253','14254','14255','14256'); + f('14257','14258','14259','14260'); + f('14261','14262','14263','14264'); + f('14265','14266','14267','14268'); + f('14269','14270','14271','14272'); + f('14273','14274','14275','14276'); + f('14277','14278','14279','14280'); + f('14281','14282','14283','14284'); + f('14285','14286','14287','14288'); + f('14289','14290','14291','14292'); + f('14293','14294','14295','14296'); + f('14297','14298','14299','14300'); + f('14301','14302','14303','14304'); + f('14305','14306','14307','14308'); + f('14309','14310','14311','14312'); + f('14313','14314','14315','14316'); + f('14317','14318','14319','14320'); + f('14321','14322','14323','14324'); + f('14325','14326','14327','14328'); + f('14329','14330','14331','14332'); + f('14333','14334','14335','14336'); + f('14337','14338','14339','14340'); + f('14341','14342','14343','14344'); + f('14345','14346','14347','14348'); + f('14349','14350','14351','14352'); + f('14353','14354','14355','14356'); + f('14357','14358','14359','14360'); + f('14361','14362','14363','14364'); + f('14365','14366','14367','14368'); + f('14369','14370','14371','14372'); + f('14373','14374','14375','14376'); + f('14377','14378','14379','14380'); + f('14381','14382','14383','14384'); + f('14385','14386','14387','14388'); + f('14389','14390','14391','14392'); + f('14393','14394','14395','14396'); + f('14397','14398','14399','14400'); + f('14401','14402','14403','14404'); + f('14405','14406','14407','14408'); + f('14409','14410','14411','14412'); + f('14413','14414','14415','14416'); + f('14417','14418','14419','14420'); + f('14421','14422','14423','14424'); + f('14425','14426','14427','14428'); + f('14429','14430','14431','14432'); + f('14433','14434','14435','14436'); + f('14437','14438','14439','14440'); + f('14441','14442','14443','14444'); + f('14445','14446','14447','14448'); + f('14449','14450','14451','14452'); + f('14453','14454','14455','14456'); + f('14457','14458','14459','14460'); + f('14461','14462','14463','14464'); + f('14465','14466','14467','14468'); + f('14469','14470','14471','14472'); + f('14473','14474','14475','14476'); + f('14477','14478','14479','14480'); + f('14481','14482','14483','14484'); + f('14485','14486','14487','14488'); + f('14489','14490','14491','14492'); + f('14493','14494','14495','14496'); + f('14497','14498','14499','14500'); + f('14501','14502','14503','14504'); + f('14505','14506','14507','14508'); + f('14509','14510','14511','14512'); + f('14513','14514','14515','14516'); + f('14517','14518','14519','14520'); + f('14521','14522','14523','14524'); + f('14525','14526','14527','14528'); + f('14529','14530','14531','14532'); + f('14533','14534','14535','14536'); + f('14537','14538','14539','14540'); + f('14541','14542','14543','14544'); + f('14545','14546','14547','14548'); + f('14549','14550','14551','14552'); + f('14553','14554','14555','14556'); + f('14557','14558','14559','14560'); + f('14561','14562','14563','14564'); + f('14565','14566','14567','14568'); + f('14569','14570','14571','14572'); + f('14573','14574','14575','14576'); + f('14577','14578','14579','14580'); + f('14581','14582','14583','14584'); + f('14585','14586','14587','14588'); + f('14589','14590','14591','14592'); + f('14593','14594','14595','14596'); + f('14597','14598','14599','14600'); + f('14601','14602','14603','14604'); + f('14605','14606','14607','14608'); + f('14609','14610','14611','14612'); + f('14613','14614','14615','14616'); + f('14617','14618','14619','14620'); + f('14621','14622','14623','14624'); + f('14625','14626','14627','14628'); + f('14629','14630','14631','14632'); + f('14633','14634','14635','14636'); + f('14637','14638','14639','14640'); + f('14641','14642','14643','14644'); + f('14645','14646','14647','14648'); + f('14649','14650','14651','14652'); + f('14653','14654','14655','14656'); + f('14657','14658','14659','14660'); + f('14661','14662','14663','14664'); + f('14665','14666','14667','14668'); + f('14669','14670','14671','14672'); + f('14673','14674','14675','14676'); + f('14677','14678','14679','14680'); + f('14681','14682','14683','14684'); + f('14685','14686','14687','14688'); + f('14689','14690','14691','14692'); + f('14693','14694','14695','14696'); + f('14697','14698','14699','14700'); + f('14701','14702','14703','14704'); + f('14705','14706','14707','14708'); + f('14709','14710','14711','14712'); + f('14713','14714','14715','14716'); + f('14717','14718','14719','14720'); + f('14721','14722','14723','14724'); + f('14725','14726','14727','14728'); + f('14729','14730','14731','14732'); + f('14733','14734','14735','14736'); + f('14737','14738','14739','14740'); + f('14741','14742','14743','14744'); + f('14745','14746','14747','14748'); + f('14749','14750','14751','14752'); + f('14753','14754','14755','14756'); + f('14757','14758','14759','14760'); + f('14761','14762','14763','14764'); + f('14765','14766','14767','14768'); + f('14769','14770','14771','14772'); + f('14773','14774','14775','14776'); + f('14777','14778','14779','14780'); + f('14781','14782','14783','14784'); + f('14785','14786','14787','14788'); + f('14789','14790','14791','14792'); + f('14793','14794','14795','14796'); + f('14797','14798','14799','14800'); + f('14801','14802','14803','14804'); + f('14805','14806','14807','14808'); + f('14809','14810','14811','14812'); + f('14813','14814','14815','14816'); + f('14817','14818','14819','14820'); + f('14821','14822','14823','14824'); + f('14825','14826','14827','14828'); + f('14829','14830','14831','14832'); + f('14833','14834','14835','14836'); + f('14837','14838','14839','14840'); + f('14841','14842','14843','14844'); + f('14845','14846','14847','14848'); + f('14849','14850','14851','14852'); + f('14853','14854','14855','14856'); + f('14857','14858','14859','14860'); + f('14861','14862','14863','14864'); + f('14865','14866','14867','14868'); + f('14869','14870','14871','14872'); + f('14873','14874','14875','14876'); + f('14877','14878','14879','14880'); + f('14881','14882','14883','14884'); + f('14885','14886','14887','14888'); + f('14889','14890','14891','14892'); + f('14893','14894','14895','14896'); + f('14897','14898','14899','14900'); + f('14901','14902','14903','14904'); + f('14905','14906','14907','14908'); + f('14909','14910','14911','14912'); + f('14913','14914','14915','14916'); + f('14917','14918','14919','14920'); + f('14921','14922','14923','14924'); + f('14925','14926','14927','14928'); + f('14929','14930','14931','14932'); + f('14933','14934','14935','14936'); + f('14937','14938','14939','14940'); + f('14941','14942','14943','14944'); + f('14945','14946','14947','14948'); + f('14949','14950','14951','14952'); + f('14953','14954','14955','14956'); + f('14957','14958','14959','14960'); + f('14961','14962','14963','14964'); + f('14965','14966','14967','14968'); + f('14969','14970','14971','14972'); + f('14973','14974','14975','14976'); + f('14977','14978','14979','14980'); + f('14981','14982','14983','14984'); + f('14985','14986','14987','14988'); + f('14989','14990','14991','14992'); + f('14993','14994','14995','14996'); + f('14997','14998','14999','15000'); + f('15001','15002','15003','15004'); + f('15005','15006','15007','15008'); + f('15009','15010','15011','15012'); + f('15013','15014','15015','15016'); + f('15017','15018','15019','15020'); + f('15021','15022','15023','15024'); + f('15025','15026','15027','15028'); + f('15029','15030','15031','15032'); + f('15033','15034','15035','15036'); + f('15037','15038','15039','15040'); + f('15041','15042','15043','15044'); + f('15045','15046','15047','15048'); + f('15049','15050','15051','15052'); + f('15053','15054','15055','15056'); + f('15057','15058','15059','15060'); + f('15061','15062','15063','15064'); + f('15065','15066','15067','15068'); + f('15069','15070','15071','15072'); + f('15073','15074','15075','15076'); + f('15077','15078','15079','15080'); + f('15081','15082','15083','15084'); + f('15085','15086','15087','15088'); + f('15089','15090','15091','15092'); + f('15093','15094','15095','15096'); + f('15097','15098','15099','15100'); + f('15101','15102','15103','15104'); + f('15105','15106','15107','15108'); + f('15109','15110','15111','15112'); + f('15113','15114','15115','15116'); + f('15117','15118','15119','15120'); + f('15121','15122','15123','15124'); + f('15125','15126','15127','15128'); + f('15129','15130','15131','15132'); + f('15133','15134','15135','15136'); + f('15137','15138','15139','15140'); + f('15141','15142','15143','15144'); + f('15145','15146','15147','15148'); + f('15149','15150','15151','15152'); + f('15153','15154','15155','15156'); + f('15157','15158','15159','15160'); + f('15161','15162','15163','15164'); + f('15165','15166','15167','15168'); + f('15169','15170','15171','15172'); + f('15173','15174','15175','15176'); + f('15177','15178','15179','15180'); + f('15181','15182','15183','15184'); + f('15185','15186','15187','15188'); + f('15189','15190','15191','15192'); + f('15193','15194','15195','15196'); + f('15197','15198','15199','15200'); + f('15201','15202','15203','15204'); + f('15205','15206','15207','15208'); + f('15209','15210','15211','15212'); + f('15213','15214','15215','15216'); + f('15217','15218','15219','15220'); + f('15221','15222','15223','15224'); + f('15225','15226','15227','15228'); + f('15229','15230','15231','15232'); + f('15233','15234','15235','15236'); + f('15237','15238','15239','15240'); + f('15241','15242','15243','15244'); + f('15245','15246','15247','15248'); + f('15249','15250','15251','15252'); + f('15253','15254','15255','15256'); + f('15257','15258','15259','15260'); + f('15261','15262','15263','15264'); + f('15265','15266','15267','15268'); + f('15269','15270','15271','15272'); + f('15273','15274','15275','15276'); + f('15277','15278','15279','15280'); + f('15281','15282','15283','15284'); + f('15285','15286','15287','15288'); + f('15289','15290','15291','15292'); + f('15293','15294','15295','15296'); + f('15297','15298','15299','15300'); + f('15301','15302','15303','15304'); + f('15305','15306','15307','15308'); + f('15309','15310','15311','15312'); + f('15313','15314','15315','15316'); + f('15317','15318','15319','15320'); + f('15321','15322','15323','15324'); + f('15325','15326','15327','15328'); + f('15329','15330','15331','15332'); + f('15333','15334','15335','15336'); + f('15337','15338','15339','15340'); + f('15341','15342','15343','15344'); + f('15345','15346','15347','15348'); + f('15349','15350','15351','15352'); + f('15353','15354','15355','15356'); + f('15357','15358','15359','15360'); + f('15361','15362','15363','15364'); + f('15365','15366','15367','15368'); + f('15369','15370','15371','15372'); + f('15373','15374','15375','15376'); + f('15377','15378','15379','15380'); + f('15381','15382','15383','15384'); + f('15385','15386','15387','15388'); + f('15389','15390','15391','15392'); + f('15393','15394','15395','15396'); + f('15397','15398','15399','15400'); + f('15401','15402','15403','15404'); + f('15405','15406','15407','15408'); + f('15409','15410','15411','15412'); + f('15413','15414','15415','15416'); + f('15417','15418','15419','15420'); + f('15421','15422','15423','15424'); + f('15425','15426','15427','15428'); + f('15429','15430','15431','15432'); + f('15433','15434','15435','15436'); + f('15437','15438','15439','15440'); + f('15441','15442','15443','15444'); + f('15445','15446','15447','15448'); + f('15449','15450','15451','15452'); + f('15453','15454','15455','15456'); + f('15457','15458','15459','15460'); + f('15461','15462','15463','15464'); + f('15465','15466','15467','15468'); + f('15469','15470','15471','15472'); + f('15473','15474','15475','15476'); + f('15477','15478','15479','15480'); + f('15481','15482','15483','15484'); + f('15485','15486','15487','15488'); + f('15489','15490','15491','15492'); + f('15493','15494','15495','15496'); + f('15497','15498','15499','15500'); + f('15501','15502','15503','15504'); + f('15505','15506','15507','15508'); + f('15509','15510','15511','15512'); + f('15513','15514','15515','15516'); + f('15517','15518','15519','15520'); + f('15521','15522','15523','15524'); + f('15525','15526','15527','15528'); + f('15529','15530','15531','15532'); + f('15533','15534','15535','15536'); + f('15537','15538','15539','15540'); + f('15541','15542','15543','15544'); + f('15545','15546','15547','15548'); + f('15549','15550','15551','15552'); + f('15553','15554','15555','15556'); + f('15557','15558','15559','15560'); + f('15561','15562','15563','15564'); + f('15565','15566','15567','15568'); + f('15569','15570','15571','15572'); + f('15573','15574','15575','15576'); + f('15577','15578','15579','15580'); + f('15581','15582','15583','15584'); + f('15585','15586','15587','15588'); + f('15589','15590','15591','15592'); + f('15593','15594','15595','15596'); + f('15597','15598','15599','15600'); + f('15601','15602','15603','15604'); + f('15605','15606','15607','15608'); + f('15609','15610','15611','15612'); + f('15613','15614','15615','15616'); + f('15617','15618','15619','15620'); + f('15621','15622','15623','15624'); + f('15625','15626','15627','15628'); + f('15629','15630','15631','15632'); + f('15633','15634','15635','15636'); + f('15637','15638','15639','15640'); + f('15641','15642','15643','15644'); + f('15645','15646','15647','15648'); + f('15649','15650','15651','15652'); + f('15653','15654','15655','15656'); + f('15657','15658','15659','15660'); + f('15661','15662','15663','15664'); + f('15665','15666','15667','15668'); + f('15669','15670','15671','15672'); + f('15673','15674','15675','15676'); + f('15677','15678','15679','15680'); + f('15681','15682','15683','15684'); + f('15685','15686','15687','15688'); + f('15689','15690','15691','15692'); + f('15693','15694','15695','15696'); + f('15697','15698','15699','15700'); + f('15701','15702','15703','15704'); + f('15705','15706','15707','15708'); + f('15709','15710','15711','15712'); + f('15713','15714','15715','15716'); + f('15717','15718','15719','15720'); + f('15721','15722','15723','15724'); + f('15725','15726','15727','15728'); + f('15729','15730','15731','15732'); + f('15733','15734','15735','15736'); + f('15737','15738','15739','15740'); + f('15741','15742','15743','15744'); + f('15745','15746','15747','15748'); + f('15749','15750','15751','15752'); + f('15753','15754','15755','15756'); + f('15757','15758','15759','15760'); + f('15761','15762','15763','15764'); + f('15765','15766','15767','15768'); + f('15769','15770','15771','15772'); + f('15773','15774','15775','15776'); + f('15777','15778','15779','15780'); + f('15781','15782','15783','15784'); + f('15785','15786','15787','15788'); + f('15789','15790','15791','15792'); + f('15793','15794','15795','15796'); + f('15797','15798','15799','15800'); + f('15801','15802','15803','15804'); + f('15805','15806','15807','15808'); + f('15809','15810','15811','15812'); + f('15813','15814','15815','15816'); + f('15817','15818','15819','15820'); + f('15821','15822','15823','15824'); + f('15825','15826','15827','15828'); + f('15829','15830','15831','15832'); + f('15833','15834','15835','15836'); + f('15837','15838','15839','15840'); + f('15841','15842','15843','15844'); + f('15845','15846','15847','15848'); + f('15849','15850','15851','15852'); + f('15853','15854','15855','15856'); + f('15857','15858','15859','15860'); + f('15861','15862','15863','15864'); + f('15865','15866','15867','15868'); + f('15869','15870','15871','15872'); + f('15873','15874','15875','15876'); + f('15877','15878','15879','15880'); + f('15881','15882','15883','15884'); + f('15885','15886','15887','15888'); + f('15889','15890','15891','15892'); + f('15893','15894','15895','15896'); + f('15897','15898','15899','15900'); + f('15901','15902','15903','15904'); + f('15905','15906','15907','15908'); + f('15909','15910','15911','15912'); + f('15913','15914','15915','15916'); + f('15917','15918','15919','15920'); + f('15921','15922','15923','15924'); + f('15925','15926','15927','15928'); + f('15929','15930','15931','15932'); + f('15933','15934','15935','15936'); + f('15937','15938','15939','15940'); + f('15941','15942','15943','15944'); + f('15945','15946','15947','15948'); + f('15949','15950','15951','15952'); + f('15953','15954','15955','15956'); + f('15957','15958','15959','15960'); + f('15961','15962','15963','15964'); + f('15965','15966','15967','15968'); + f('15969','15970','15971','15972'); + f('15973','15974','15975','15976'); + f('15977','15978','15979','15980'); + f('15981','15982','15983','15984'); + f('15985','15986','15987','15988'); + f('15989','15990','15991','15992'); + f('15993','15994','15995','15996'); + f('15997','15998','15999','16000'); + f('16001','16002','16003','16004'); + f('16005','16006','16007','16008'); + f('16009','16010','16011','16012'); + f('16013','16014','16015','16016'); + f('16017','16018','16019','16020'); + f('16021','16022','16023','16024'); + f('16025','16026','16027','16028'); + f('16029','16030','16031','16032'); + f('16033','16034','16035','16036'); + f('16037','16038','16039','16040'); + f('16041','16042','16043','16044'); + f('16045','16046','16047','16048'); + f('16049','16050','16051','16052'); + f('16053','16054','16055','16056'); + f('16057','16058','16059','16060'); + f('16061','16062','16063','16064'); + f('16065','16066','16067','16068'); + f('16069','16070','16071','16072'); + f('16073','16074','16075','16076'); + f('16077','16078','16079','16080'); + f('16081','16082','16083','16084'); + f('16085','16086','16087','16088'); + f('16089','16090','16091','16092'); + f('16093','16094','16095','16096'); + f('16097','16098','16099','16100'); + f('16101','16102','16103','16104'); + f('16105','16106','16107','16108'); + f('16109','16110','16111','16112'); + f('16113','16114','16115','16116'); + f('16117','16118','16119','16120'); + f('16121','16122','16123','16124'); + f('16125','16126','16127','16128'); + f('16129','16130','16131','16132'); + f('16133','16134','16135','16136'); + f('16137','16138','16139','16140'); + f('16141','16142','16143','16144'); + f('16145','16146','16147','16148'); + f('16149','16150','16151','16152'); + f('16153','16154','16155','16156'); + f('16157','16158','16159','16160'); + f('16161','16162','16163','16164'); + f('16165','16166','16167','16168'); + f('16169','16170','16171','16172'); + f('16173','16174','16175','16176'); + f('16177','16178','16179','16180'); + f('16181','16182','16183','16184'); + f('16185','16186','16187','16188'); + f('16189','16190','16191','16192'); + f('16193','16194','16195','16196'); + f('16197','16198','16199','16200'); + f('16201','16202','16203','16204'); + f('16205','16206','16207','16208'); + f('16209','16210','16211','16212'); + f('16213','16214','16215','16216'); + f('16217','16218','16219','16220'); + f('16221','16222','16223','16224'); + f('16225','16226','16227','16228'); + f('16229','16230','16231','16232'); + f('16233','16234','16235','16236'); + f('16237','16238','16239','16240'); + f('16241','16242','16243','16244'); + f('16245','16246','16247','16248'); + f('16249','16250','16251','16252'); + f('16253','16254','16255','16256'); + f('16257','16258','16259','16260'); + f('16261','16262','16263','16264'); + f('16265','16266','16267','16268'); + f('16269','16270','16271','16272'); + f('16273','16274','16275','16276'); + f('16277','16278','16279','16280'); + f('16281','16282','16283','16284'); + f('16285','16286','16287','16288'); + f('16289','16290','16291','16292'); + f('16293','16294','16295','16296'); + f('16297','16298','16299','16300'); + f('16301','16302','16303','16304'); + f('16305','16306','16307','16308'); + f('16309','16310','16311','16312'); + f('16313','16314','16315','16316'); + f('16317','16318','16319','16320'); + f('16321','16322','16323','16324'); + f('16325','16326','16327','16328'); + f('16329','16330','16331','16332'); + f('16333','16334','16335','16336'); + f('16337','16338','16339','16340'); + f('16341','16342','16343','16344'); + f('16345','16346','16347','16348'); + f('16349','16350','16351','16352'); + f('16353','16354','16355','16356'); + f('16357','16358','16359','16360'); + f('16361','16362','16363','16364'); + f('16365','16366','16367','16368'); + f('16369','16370','16371','16372'); + f('16373','16374','16375','16376'); + f('16377','16378','16379','16380'); + f('16381','16382','16383','16384'); + f('16385','16386','16387','16388'); + f('16389','16390','16391','16392'); + f('16393','16394','16395','16396'); + f('16397','16398','16399','16400'); + f('16401','16402','16403','16404'); + f('16405','16406','16407','16408'); + f('16409','16410','16411','16412'); + f('16413','16414','16415','16416'); + f('16417','16418','16419','16420'); + f('16421','16422','16423','16424'); + f('16425','16426','16427','16428'); + f('16429','16430','16431','16432'); + f('16433','16434','16435','16436'); + f('16437','16438','16439','16440'); + f('16441','16442','16443','16444'); + f('16445','16446','16447','16448'); + f('16449','16450','16451','16452'); + f('16453','16454','16455','16456'); + f('16457','16458','16459','16460'); + f('16461','16462','16463','16464'); + f('16465','16466','16467','16468'); + f('16469','16470','16471','16472'); + f('16473','16474','16475','16476'); + f('16477','16478','16479','16480'); + f('16481','16482','16483','16484'); + f('16485','16486','16487','16488'); + f('16489','16490','16491','16492'); + f('16493','16494','16495','16496'); + f('16497','16498','16499','16500'); + f('16501','16502','16503','16504'); + f('16505','16506','16507','16508'); + f('16509','16510','16511','16512'); + f('16513','16514','16515','16516'); + f('16517','16518','16519','16520'); + f('16521','16522','16523','16524'); + f('16525','16526','16527','16528'); + f('16529','16530','16531','16532'); + f('16533','16534','16535','16536'); + f('16537','16538','16539','16540'); + f('16541','16542','16543','16544'); + f('16545','16546','16547','16548'); + f('16549','16550','16551','16552'); + f('16553','16554','16555','16556'); + f('16557','16558','16559','16560'); + f('16561','16562','16563','16564'); + f('16565','16566','16567','16568'); + f('16569','16570','16571','16572'); + f('16573','16574','16575','16576'); + f('16577','16578','16579','16580'); + f('16581','16582','16583','16584'); + f('16585','16586','16587','16588'); + f('16589','16590','16591','16592'); + f('16593','16594','16595','16596'); + f('16597','16598','16599','16600'); + f('16601','16602','16603','16604'); + f('16605','16606','16607','16608'); + f('16609','16610','16611','16612'); + f('16613','16614','16615','16616'); + f('16617','16618','16619','16620'); + f('16621','16622','16623','16624'); + f('16625','16626','16627','16628'); + f('16629','16630','16631','16632'); + f('16633','16634','16635','16636'); + f('16637','16638','16639','16640'); + f('16641','16642','16643','16644'); + f('16645','16646','16647','16648'); + f('16649','16650','16651','16652'); + f('16653','16654','16655','16656'); + f('16657','16658','16659','16660'); + f('16661','16662','16663','16664'); + f('16665','16666','16667','16668'); + f('16669','16670','16671','16672'); + f('16673','16674','16675','16676'); + f('16677','16678','16679','16680'); + f('16681','16682','16683','16684'); + f('16685','16686','16687','16688'); + f('16689','16690','16691','16692'); + f('16693','16694','16695','16696'); + f('16697','16698','16699','16700'); + f('16701','16702','16703','16704'); + f('16705','16706','16707','16708'); + f('16709','16710','16711','16712'); + f('16713','16714','16715','16716'); + f('16717','16718','16719','16720'); + f('16721','16722','16723','16724'); + f('16725','16726','16727','16728'); + f('16729','16730','16731','16732'); + f('16733','16734','16735','16736'); + f('16737','16738','16739','16740'); + f('16741','16742','16743','16744'); + f('16745','16746','16747','16748'); + f('16749','16750','16751','16752'); + f('16753','16754','16755','16756'); + f('16757','16758','16759','16760'); + f('16761','16762','16763','16764'); + f('16765','16766','16767','16768'); + f('16769','16770','16771','16772'); + f('16773','16774','16775','16776'); + f('16777','16778','16779','16780'); + f('16781','16782','16783','16784'); + f('16785','16786','16787','16788'); + f('16789','16790','16791','16792'); + f('16793','16794','16795','16796'); + f('16797','16798','16799','16800'); + f('16801','16802','16803','16804'); + f('16805','16806','16807','16808'); + f('16809','16810','16811','16812'); + f('16813','16814','16815','16816'); + f('16817','16818','16819','16820'); + f('16821','16822','16823','16824'); + f('16825','16826','16827','16828'); + f('16829','16830','16831','16832'); + f('16833','16834','16835','16836'); + f('16837','16838','16839','16840'); + f('16841','16842','16843','16844'); + f('16845','16846','16847','16848'); + f('16849','16850','16851','16852'); + f('16853','16854','16855','16856'); + f('16857','16858','16859','16860'); + f('16861','16862','16863','16864'); + f('16865','16866','16867','16868'); + f('16869','16870','16871','16872'); + f('16873','16874','16875','16876'); + f('16877','16878','16879','16880'); + f('16881','16882','16883','16884'); + f('16885','16886','16887','16888'); + f('16889','16890','16891','16892'); + f('16893','16894','16895','16896'); + f('16897','16898','16899','16900'); + f('16901','16902','16903','16904'); + f('16905','16906','16907','16908'); + f('16909','16910','16911','16912'); + f('16913','16914','16915','16916'); + f('16917','16918','16919','16920'); + f('16921','16922','16923','16924'); + f('16925','16926','16927','16928'); + f('16929','16930','16931','16932'); + f('16933','16934','16935','16936'); + f('16937','16938','16939','16940'); + f('16941','16942','16943','16944'); + f('16945','16946','16947','16948'); + f('16949','16950','16951','16952'); + f('16953','16954','16955','16956'); + f('16957','16958','16959','16960'); + f('16961','16962','16963','16964'); + f('16965','16966','16967','16968'); + f('16969','16970','16971','16972'); + f('16973','16974','16975','16976'); + f('16977','16978','16979','16980'); + f('16981','16982','16983','16984'); + f('16985','16986','16987','16988'); + f('16989','16990','16991','16992'); + f('16993','16994','16995','16996'); + f('16997','16998','16999','17000'); + f('17001','17002','17003','17004'); + f('17005','17006','17007','17008'); + f('17009','17010','17011','17012'); + f('17013','17014','17015','17016'); + f('17017','17018','17019','17020'); + f('17021','17022','17023','17024'); + f('17025','17026','17027','17028'); + f('17029','17030','17031','17032'); + f('17033','17034','17035','17036'); + f('17037','17038','17039','17040'); + f('17041','17042','17043','17044'); + f('17045','17046','17047','17048'); + f('17049','17050','17051','17052'); + f('17053','17054','17055','17056'); + f('17057','17058','17059','17060'); + f('17061','17062','17063','17064'); + f('17065','17066','17067','17068'); + f('17069','17070','17071','17072'); + f('17073','17074','17075','17076'); + f('17077','17078','17079','17080'); + f('17081','17082','17083','17084'); + f('17085','17086','17087','17088'); + f('17089','17090','17091','17092'); + f('17093','17094','17095','17096'); + f('17097','17098','17099','17100'); + f('17101','17102','17103','17104'); + f('17105','17106','17107','17108'); + f('17109','17110','17111','17112'); + f('17113','17114','17115','17116'); + f('17117','17118','17119','17120'); + f('17121','17122','17123','17124'); + f('17125','17126','17127','17128'); + f('17129','17130','17131','17132'); + f('17133','17134','17135','17136'); + f('17137','17138','17139','17140'); + f('17141','17142','17143','17144'); + f('17145','17146','17147','17148'); + f('17149','17150','17151','17152'); + f('17153','17154','17155','17156'); + f('17157','17158','17159','17160'); + f('17161','17162','17163','17164'); + f('17165','17166','17167','17168'); + f('17169','17170','17171','17172'); + f('17173','17174','17175','17176'); + f('17177','17178','17179','17180'); + f('17181','17182','17183','17184'); + f('17185','17186','17187','17188'); + f('17189','17190','17191','17192'); + f('17193','17194','17195','17196'); + f('17197','17198','17199','17200'); + f('17201','17202','17203','17204'); + f('17205','17206','17207','17208'); + f('17209','17210','17211','17212'); + f('17213','17214','17215','17216'); + f('17217','17218','17219','17220'); + f('17221','17222','17223','17224'); + f('17225','17226','17227','17228'); + f('17229','17230','17231','17232'); + f('17233','17234','17235','17236'); + f('17237','17238','17239','17240'); + f('17241','17242','17243','17244'); + f('17245','17246','17247','17248'); + f('17249','17250','17251','17252'); + f('17253','17254','17255','17256'); + f('17257','17258','17259','17260'); + f('17261','17262','17263','17264'); + f('17265','17266','17267','17268'); + f('17269','17270','17271','17272'); + f('17273','17274','17275','17276'); + f('17277','17278','17279','17280'); + f('17281','17282','17283','17284'); + f('17285','17286','17287','17288'); + f('17289','17290','17291','17292'); + f('17293','17294','17295','17296'); + f('17297','17298','17299','17300'); + f('17301','17302','17303','17304'); + f('17305','17306','17307','17308'); + f('17309','17310','17311','17312'); + f('17313','17314','17315','17316'); + f('17317','17318','17319','17320'); + f('17321','17322','17323','17324'); + f('17325','17326','17327','17328'); + f('17329','17330','17331','17332'); + f('17333','17334','17335','17336'); + f('17337','17338','17339','17340'); + f('17341','17342','17343','17344'); + f('17345','17346','17347','17348'); + f('17349','17350','17351','17352'); + f('17353','17354','17355','17356'); + f('17357','17358','17359','17360'); + f('17361','17362','17363','17364'); + f('17365','17366','17367','17368'); + f('17369','17370','17371','17372'); + f('17373','17374','17375','17376'); + f('17377','17378','17379','17380'); + f('17381','17382','17383','17384'); + f('17385','17386','17387','17388'); + f('17389','17390','17391','17392'); + f('17393','17394','17395','17396'); + f('17397','17398','17399','17400'); + f('17401','17402','17403','17404'); + f('17405','17406','17407','17408'); + f('17409','17410','17411','17412'); + f('17413','17414','17415','17416'); + f('17417','17418','17419','17420'); + f('17421','17422','17423','17424'); + f('17425','17426','17427','17428'); + f('17429','17430','17431','17432'); + f('17433','17434','17435','17436'); + f('17437','17438','17439','17440'); + f('17441','17442','17443','17444'); + f('17445','17446','17447','17448'); + f('17449','17450','17451','17452'); + f('17453','17454','17455','17456'); + f('17457','17458','17459','17460'); + f('17461','17462','17463','17464'); + f('17465','17466','17467','17468'); + f('17469','17470','17471','17472'); + f('17473','17474','17475','17476'); + f('17477','17478','17479','17480'); + f('17481','17482','17483','17484'); + f('17485','17486','17487','17488'); + f('17489','17490','17491','17492'); + f('17493','17494','17495','17496'); + f('17497','17498','17499','17500'); + f('17501','17502','17503','17504'); + f('17505','17506','17507','17508'); + f('17509','17510','17511','17512'); + f('17513','17514','17515','17516'); + f('17517','17518','17519','17520'); + f('17521','17522','17523','17524'); + f('17525','17526','17527','17528'); + f('17529','17530','17531','17532'); + f('17533','17534','17535','17536'); + f('17537','17538','17539','17540'); + f('17541','17542','17543','17544'); + f('17545','17546','17547','17548'); + f('17549','17550','17551','17552'); + f('17553','17554','17555','17556'); + f('17557','17558','17559','17560'); + f('17561','17562','17563','17564'); + f('17565','17566','17567','17568'); + f('17569','17570','17571','17572'); + f('17573','17574','17575','17576'); + f('17577','17578','17579','17580'); + f('17581','17582','17583','17584'); + f('17585','17586','17587','17588'); + f('17589','17590','17591','17592'); + f('17593','17594','17595','17596'); + f('17597','17598','17599','17600'); + f('17601','17602','17603','17604'); + f('17605','17606','17607','17608'); + f('17609','17610','17611','17612'); + f('17613','17614','17615','17616'); + f('17617','17618','17619','17620'); + f('17621','17622','17623','17624'); + f('17625','17626','17627','17628'); + f('17629','17630','17631','17632'); + f('17633','17634','17635','17636'); + f('17637','17638','17639','17640'); + f('17641','17642','17643','17644'); + f('17645','17646','17647','17648'); + f('17649','17650','17651','17652'); + f('17653','17654','17655','17656'); + f('17657','17658','17659','17660'); + f('17661','17662','17663','17664'); + f('17665','17666','17667','17668'); + f('17669','17670','17671','17672'); + f('17673','17674','17675','17676'); + f('17677','17678','17679','17680'); + f('17681','17682','17683','17684'); + f('17685','17686','17687','17688'); + f('17689','17690','17691','17692'); + f('17693','17694','17695','17696'); + f('17697','17698','17699','17700'); + f('17701','17702','17703','17704'); + f('17705','17706','17707','17708'); + f('17709','17710','17711','17712'); + f('17713','17714','17715','17716'); + f('17717','17718','17719','17720'); + f('17721','17722','17723','17724'); + f('17725','17726','17727','17728'); + f('17729','17730','17731','17732'); + f('17733','17734','17735','17736'); + f('17737','17738','17739','17740'); + f('17741','17742','17743','17744'); + f('17745','17746','17747','17748'); + f('17749','17750','17751','17752'); + f('17753','17754','17755','17756'); + f('17757','17758','17759','17760'); + f('17761','17762','17763','17764'); + f('17765','17766','17767','17768'); + f('17769','17770','17771','17772'); + f('17773','17774','17775','17776'); + f('17777','17778','17779','17780'); + f('17781','17782','17783','17784'); + f('17785','17786','17787','17788'); + f('17789','17790','17791','17792'); + f('17793','17794','17795','17796'); + f('17797','17798','17799','17800'); + f('17801','17802','17803','17804'); + f('17805','17806','17807','17808'); + f('17809','17810','17811','17812'); + f('17813','17814','17815','17816'); + f('17817','17818','17819','17820'); + f('17821','17822','17823','17824'); + f('17825','17826','17827','17828'); + f('17829','17830','17831','17832'); + f('17833','17834','17835','17836'); + f('17837','17838','17839','17840'); + f('17841','17842','17843','17844'); + f('17845','17846','17847','17848'); + f('17849','17850','17851','17852'); + f('17853','17854','17855','17856'); + f('17857','17858','17859','17860'); + f('17861','17862','17863','17864'); + f('17865','17866','17867','17868'); + f('17869','17870','17871','17872'); + f('17873','17874','17875','17876'); + f('17877','17878','17879','17880'); + f('17881','17882','17883','17884'); + f('17885','17886','17887','17888'); + f('17889','17890','17891','17892'); + f('17893','17894','17895','17896'); + f('17897','17898','17899','17900'); + f('17901','17902','17903','17904'); + f('17905','17906','17907','17908'); + f('17909','17910','17911','17912'); + f('17913','17914','17915','17916'); + f('17917','17918','17919','17920'); + f('17921','17922','17923','17924'); + f('17925','17926','17927','17928'); + f('17929','17930','17931','17932'); + f('17933','17934','17935','17936'); + f('17937','17938','17939','17940'); + f('17941','17942','17943','17944'); + f('17945','17946','17947','17948'); + f('17949','17950','17951','17952'); + f('17953','17954','17955','17956'); + f('17957','17958','17959','17960'); + f('17961','17962','17963','17964'); + f('17965','17966','17967','17968'); + f('17969','17970','17971','17972'); + f('17973','17974','17975','17976'); + f('17977','17978','17979','17980'); + f('17981','17982','17983','17984'); + f('17985','17986','17987','17988'); + f('17989','17990','17991','17992'); + f('17993','17994','17995','17996'); + f('17997','17998','17999','18000'); + f('18001','18002','18003','18004'); + f('18005','18006','18007','18008'); + f('18009','18010','18011','18012'); + f('18013','18014','18015','18016'); + f('18017','18018','18019','18020'); + f('18021','18022','18023','18024'); + f('18025','18026','18027','18028'); + f('18029','18030','18031','18032'); + f('18033','18034','18035','18036'); + f('18037','18038','18039','18040'); + f('18041','18042','18043','18044'); + f('18045','18046','18047','18048'); + f('18049','18050','18051','18052'); + f('18053','18054','18055','18056'); + f('18057','18058','18059','18060'); + f('18061','18062','18063','18064'); + f('18065','18066','18067','18068'); + f('18069','18070','18071','18072'); + f('18073','18074','18075','18076'); + f('18077','18078','18079','18080'); + f('18081','18082','18083','18084'); + f('18085','18086','18087','18088'); + f('18089','18090','18091','18092'); + f('18093','18094','18095','18096'); + f('18097','18098','18099','18100'); + f('18101','18102','18103','18104'); + f('18105','18106','18107','18108'); + f('18109','18110','18111','18112'); + f('18113','18114','18115','18116'); + f('18117','18118','18119','18120'); + f('18121','18122','18123','18124'); + f('18125','18126','18127','18128'); + f('18129','18130','18131','18132'); + f('18133','18134','18135','18136'); + f('18137','18138','18139','18140'); + f('18141','18142','18143','18144'); + f('18145','18146','18147','18148'); + f('18149','18150','18151','18152'); + f('18153','18154','18155','18156'); + f('18157','18158','18159','18160'); + f('18161','18162','18163','18164'); + f('18165','18166','18167','18168'); + f('18169','18170','18171','18172'); + f('18173','18174','18175','18176'); + f('18177','18178','18179','18180'); + f('18181','18182','18183','18184'); + f('18185','18186','18187','18188'); + f('18189','18190','18191','18192'); + f('18193','18194','18195','18196'); + f('18197','18198','18199','18200'); + f('18201','18202','18203','18204'); + f('18205','18206','18207','18208'); + f('18209','18210','18211','18212'); + f('18213','18214','18215','18216'); + f('18217','18218','18219','18220'); + f('18221','18222','18223','18224'); + f('18225','18226','18227','18228'); + f('18229','18230','18231','18232'); + f('18233','18234','18235','18236'); + f('18237','18238','18239','18240'); + f('18241','18242','18243','18244'); + f('18245','18246','18247','18248'); + f('18249','18250','18251','18252'); + f('18253','18254','18255','18256'); + f('18257','18258','18259','18260'); + f('18261','18262','18263','18264'); + f('18265','18266','18267','18268'); + f('18269','18270','18271','18272'); + f('18273','18274','18275','18276'); + f('18277','18278','18279','18280'); + f('18281','18282','18283','18284'); + f('18285','18286','18287','18288'); + f('18289','18290','18291','18292'); + f('18293','18294','18295','18296'); + f('18297','18298','18299','18300'); + f('18301','18302','18303','18304'); + f('18305','18306','18307','18308'); + f('18309','18310','18311','18312'); + f('18313','18314','18315','18316'); + f('18317','18318','18319','18320'); + f('18321','18322','18323','18324'); + f('18325','18326','18327','18328'); + f('18329','18330','18331','18332'); + f('18333','18334','18335','18336'); + f('18337','18338','18339','18340'); + f('18341','18342','18343','18344'); + f('18345','18346','18347','18348'); + f('18349','18350','18351','18352'); + f('18353','18354','18355','18356'); + f('18357','18358','18359','18360'); + f('18361','18362','18363','18364'); + f('18365','18366','18367','18368'); + f('18369','18370','18371','18372'); + f('18373','18374','18375','18376'); + f('18377','18378','18379','18380'); + f('18381','18382','18383','18384'); + f('18385','18386','18387','18388'); + f('18389','18390','18391','18392'); + f('18393','18394','18395','18396'); + f('18397','18398','18399','18400'); + f('18401','18402','18403','18404'); + f('18405','18406','18407','18408'); + f('18409','18410','18411','18412'); + f('18413','18414','18415','18416'); + f('18417','18418','18419','18420'); + f('18421','18422','18423','18424'); + f('18425','18426','18427','18428'); + f('18429','18430','18431','18432'); + f('18433','18434','18435','18436'); + f('18437','18438','18439','18440'); + f('18441','18442','18443','18444'); + f('18445','18446','18447','18448'); + f('18449','18450','18451','18452'); + f('18453','18454','18455','18456'); + f('18457','18458','18459','18460'); + f('18461','18462','18463','18464'); + f('18465','18466','18467','18468'); + f('18469','18470','18471','18472'); + f('18473','18474','18475','18476'); + f('18477','18478','18479','18480'); + f('18481','18482','18483','18484'); + f('18485','18486','18487','18488'); + f('18489','18490','18491','18492'); + f('18493','18494','18495','18496'); + f('18497','18498','18499','18500'); + f('18501','18502','18503','18504'); + f('18505','18506','18507','18508'); + f('18509','18510','18511','18512'); + f('18513','18514','18515','18516'); + f('18517','18518','18519','18520'); + f('18521','18522','18523','18524'); + f('18525','18526','18527','18528'); + f('18529','18530','18531','18532'); + f('18533','18534','18535','18536'); + f('18537','18538','18539','18540'); + f('18541','18542','18543','18544'); + f('18545','18546','18547','18548'); + f('18549','18550','18551','18552'); + f('18553','18554','18555','18556'); + f('18557','18558','18559','18560'); + f('18561','18562','18563','18564'); + f('18565','18566','18567','18568'); + f('18569','18570','18571','18572'); + f('18573','18574','18575','18576'); + f('18577','18578','18579','18580'); + f('18581','18582','18583','18584'); + f('18585','18586','18587','18588'); + f('18589','18590','18591','18592'); + f('18593','18594','18595','18596'); + f('18597','18598','18599','18600'); + f('18601','18602','18603','18604'); + f('18605','18606','18607','18608'); + f('18609','18610','18611','18612'); + f('18613','18614','18615','18616'); + f('18617','18618','18619','18620'); + f('18621','18622','18623','18624'); + f('18625','18626','18627','18628'); + f('18629','18630','18631','18632'); + f('18633','18634','18635','18636'); + f('18637','18638','18639','18640'); + f('18641','18642','18643','18644'); + f('18645','18646','18647','18648'); + f('18649','18650','18651','18652'); + f('18653','18654','18655','18656'); + f('18657','18658','18659','18660'); + f('18661','18662','18663','18664'); + f('18665','18666','18667','18668'); + f('18669','18670','18671','18672'); + f('18673','18674','18675','18676'); + f('18677','18678','18679','18680'); + f('18681','18682','18683','18684'); + f('18685','18686','18687','18688'); + f('18689','18690','18691','18692'); + f('18693','18694','18695','18696'); + f('18697','18698','18699','18700'); + f('18701','18702','18703','18704'); + f('18705','18706','18707','18708'); + f('18709','18710','18711','18712'); + f('18713','18714','18715','18716'); + f('18717','18718','18719','18720'); + f('18721','18722','18723','18724'); + f('18725','18726','18727','18728'); + f('18729','18730','18731','18732'); + f('18733','18734','18735','18736'); + f('18737','18738','18739','18740'); + f('18741','18742','18743','18744'); + f('18745','18746','18747','18748'); + f('18749','18750','18751','18752'); + f('18753','18754','18755','18756'); + f('18757','18758','18759','18760'); + f('18761','18762','18763','18764'); + f('18765','18766','18767','18768'); + f('18769','18770','18771','18772'); + f('18773','18774','18775','18776'); + f('18777','18778','18779','18780'); + f('18781','18782','18783','18784'); + f('18785','18786','18787','18788'); + f('18789','18790','18791','18792'); + f('18793','18794','18795','18796'); + f('18797','18798','18799','18800'); + f('18801','18802','18803','18804'); + f('18805','18806','18807','18808'); + f('18809','18810','18811','18812'); + f('18813','18814','18815','18816'); + f('18817','18818','18819','18820'); + f('18821','18822','18823','18824'); + f('18825','18826','18827','18828'); + f('18829','18830','18831','18832'); + f('18833','18834','18835','18836'); + f('18837','18838','18839','18840'); + f('18841','18842','18843','18844'); + f('18845','18846','18847','18848'); + f('18849','18850','18851','18852'); + f('18853','18854','18855','18856'); + f('18857','18858','18859','18860'); + f('18861','18862','18863','18864'); + f('18865','18866','18867','18868'); + f('18869','18870','18871','18872'); + f('18873','18874','18875','18876'); + f('18877','18878','18879','18880'); + f('18881','18882','18883','18884'); + f('18885','18886','18887','18888'); + f('18889','18890','18891','18892'); + f('18893','18894','18895','18896'); + f('18897','18898','18899','18900'); + f('18901','18902','18903','18904'); + f('18905','18906','18907','18908'); + f('18909','18910','18911','18912'); + f('18913','18914','18915','18916'); + f('18917','18918','18919','18920'); + f('18921','18922','18923','18924'); + f('18925','18926','18927','18928'); + f('18929','18930','18931','18932'); + f('18933','18934','18935','18936'); + f('18937','18938','18939','18940'); + f('18941','18942','18943','18944'); + f('18945','18946','18947','18948'); + f('18949','18950','18951','18952'); + f('18953','18954','18955','18956'); + f('18957','18958','18959','18960'); + f('18961','18962','18963','18964'); + f('18965','18966','18967','18968'); + f('18969','18970','18971','18972'); + f('18973','18974','18975','18976'); + f('18977','18978','18979','18980'); + f('18981','18982','18983','18984'); + f('18985','18986','18987','18988'); + f('18989','18990','18991','18992'); + f('18993','18994','18995','18996'); + f('18997','18998','18999','19000'); + f('19001','19002','19003','19004'); + f('19005','19006','19007','19008'); + f('19009','19010','19011','19012'); + f('19013','19014','19015','19016'); + f('19017','19018','19019','19020'); + f('19021','19022','19023','19024'); + f('19025','19026','19027','19028'); + f('19029','19030','19031','19032'); + f('19033','19034','19035','19036'); + f('19037','19038','19039','19040'); + f('19041','19042','19043','19044'); + f('19045','19046','19047','19048'); + f('19049','19050','19051','19052'); + f('19053','19054','19055','19056'); + f('19057','19058','19059','19060'); + f('19061','19062','19063','19064'); + f('19065','19066','19067','19068'); + f('19069','19070','19071','19072'); + f('19073','19074','19075','19076'); + f('19077','19078','19079','19080'); + f('19081','19082','19083','19084'); + f('19085','19086','19087','19088'); + f('19089','19090','19091','19092'); + f('19093','19094','19095','19096'); + f('19097','19098','19099','19100'); + f('19101','19102','19103','19104'); + f('19105','19106','19107','19108'); + f('19109','19110','19111','19112'); + f('19113','19114','19115','19116'); + f('19117','19118','19119','19120'); + f('19121','19122','19123','19124'); + f('19125','19126','19127','19128'); + f('19129','19130','19131','19132'); + f('19133','19134','19135','19136'); + f('19137','19138','19139','19140'); + f('19141','19142','19143','19144'); + f('19145','19146','19147','19148'); + f('19149','19150','19151','19152'); + f('19153','19154','19155','19156'); + f('19157','19158','19159','19160'); + f('19161','19162','19163','19164'); + f('19165','19166','19167','19168'); + f('19169','19170','19171','19172'); + f('19173','19174','19175','19176'); + f('19177','19178','19179','19180'); + f('19181','19182','19183','19184'); + f('19185','19186','19187','19188'); + f('19189','19190','19191','19192'); + f('19193','19194','19195','19196'); + f('19197','19198','19199','19200'); + f('19201','19202','19203','19204'); + f('19205','19206','19207','19208'); + f('19209','19210','19211','19212'); + f('19213','19214','19215','19216'); + f('19217','19218','19219','19220'); + f('19221','19222','19223','19224'); + f('19225','19226','19227','19228'); + f('19229','19230','19231','19232'); + f('19233','19234','19235','19236'); + f('19237','19238','19239','19240'); + f('19241','19242','19243','19244'); + f('19245','19246','19247','19248'); + f('19249','19250','19251','19252'); + f('19253','19254','19255','19256'); + f('19257','19258','19259','19260'); + f('19261','19262','19263','19264'); + f('19265','19266','19267','19268'); + f('19269','19270','19271','19272'); + f('19273','19274','19275','19276'); + f('19277','19278','19279','19280'); + f('19281','19282','19283','19284'); + f('19285','19286','19287','19288'); + f('19289','19290','19291','19292'); + f('19293','19294','19295','19296'); + f('19297','19298','19299','19300'); + f('19301','19302','19303','19304'); + f('19305','19306','19307','19308'); + f('19309','19310','19311','19312'); + f('19313','19314','19315','19316'); + f('19317','19318','19319','19320'); + f('19321','19322','19323','19324'); + f('19325','19326','19327','19328'); + f('19329','19330','19331','19332'); + f('19333','19334','19335','19336'); + f('19337','19338','19339','19340'); + f('19341','19342','19343','19344'); + f('19345','19346','19347','19348'); + f('19349','19350','19351','19352'); + f('19353','19354','19355','19356'); + f('19357','19358','19359','19360'); + f('19361','19362','19363','19364'); + f('19365','19366','19367','19368'); + f('19369','19370','19371','19372'); + f('19373','19374','19375','19376'); + f('19377','19378','19379','19380'); + f('19381','19382','19383','19384'); + f('19385','19386','19387','19388'); + f('19389','19390','19391','19392'); + f('19393','19394','19395','19396'); + f('19397','19398','19399','19400'); + f('19401','19402','19403','19404'); + f('19405','19406','19407','19408'); + f('19409','19410','19411','19412'); + f('19413','19414','19415','19416'); + f('19417','19418','19419','19420'); + f('19421','19422','19423','19424'); + f('19425','19426','19427','19428'); + f('19429','19430','19431','19432'); + f('19433','19434','19435','19436'); + f('19437','19438','19439','19440'); + f('19441','19442','19443','19444'); + f('19445','19446','19447','19448'); + f('19449','19450','19451','19452'); + f('19453','19454','19455','19456'); + f('19457','19458','19459','19460'); + f('19461','19462','19463','19464'); + f('19465','19466','19467','19468'); + f('19469','19470','19471','19472'); + f('19473','19474','19475','19476'); + f('19477','19478','19479','19480'); + f('19481','19482','19483','19484'); + f('19485','19486','19487','19488'); + f('19489','19490','19491','19492'); + f('19493','19494','19495','19496'); + f('19497','19498','19499','19500'); + f('19501','19502','19503','19504'); + f('19505','19506','19507','19508'); + f('19509','19510','19511','19512'); + f('19513','19514','19515','19516'); + f('19517','19518','19519','19520'); + f('19521','19522','19523','19524'); + f('19525','19526','19527','19528'); + f('19529','19530','19531','19532'); + f('19533','19534','19535','19536'); + f('19537','19538','19539','19540'); + f('19541','19542','19543','19544'); + f('19545','19546','19547','19548'); + f('19549','19550','19551','19552'); + f('19553','19554','19555','19556'); + f('19557','19558','19559','19560'); + f('19561','19562','19563','19564'); + f('19565','19566','19567','19568'); + f('19569','19570','19571','19572'); + f('19573','19574','19575','19576'); + f('19577','19578','19579','19580'); + f('19581','19582','19583','19584'); + f('19585','19586','19587','19588'); + f('19589','19590','19591','19592'); + f('19593','19594','19595','19596'); + f('19597','19598','19599','19600'); + f('19601','19602','19603','19604'); + f('19605','19606','19607','19608'); + f('19609','19610','19611','19612'); + f('19613','19614','19615','19616'); + f('19617','19618','19619','19620'); + f('19621','19622','19623','19624'); + f('19625','19626','19627','19628'); + f('19629','19630','19631','19632'); + f('19633','19634','19635','19636'); + f('19637','19638','19639','19640'); + f('19641','19642','19643','19644'); + f('19645','19646','19647','19648'); + f('19649','19650','19651','19652'); + f('19653','19654','19655','19656'); + f('19657','19658','19659','19660'); + f('19661','19662','19663','19664'); + f('19665','19666','19667','19668'); + f('19669','19670','19671','19672'); + f('19673','19674','19675','19676'); + f('19677','19678','19679','19680'); + f('19681','19682','19683','19684'); + f('19685','19686','19687','19688'); + f('19689','19690','19691','19692'); + f('19693','19694','19695','19696'); + f('19697','19698','19699','19700'); + f('19701','19702','19703','19704'); + f('19705','19706','19707','19708'); + f('19709','19710','19711','19712'); + f('19713','19714','19715','19716'); + f('19717','19718','19719','19720'); + f('19721','19722','19723','19724'); + f('19725','19726','19727','19728'); + f('19729','19730','19731','19732'); + f('19733','19734','19735','19736'); + f('19737','19738','19739','19740'); + f('19741','19742','19743','19744'); + f('19745','19746','19747','19748'); + f('19749','19750','19751','19752'); + f('19753','19754','19755','19756'); + f('19757','19758','19759','19760'); + f('19761','19762','19763','19764'); + f('19765','19766','19767','19768'); + f('19769','19770','19771','19772'); + f('19773','19774','19775','19776'); + f('19777','19778','19779','19780'); + f('19781','19782','19783','19784'); + f('19785','19786','19787','19788'); + f('19789','19790','19791','19792'); + f('19793','19794','19795','19796'); + f('19797','19798','19799','19800'); + f('19801','19802','19803','19804'); + f('19805','19806','19807','19808'); + f('19809','19810','19811','19812'); + f('19813','19814','19815','19816'); + f('19817','19818','19819','19820'); + f('19821','19822','19823','19824'); + f('19825','19826','19827','19828'); + f('19829','19830','19831','19832'); + f('19833','19834','19835','19836'); + f('19837','19838','19839','19840'); + f('19841','19842','19843','19844'); + f('19845','19846','19847','19848'); + f('19849','19850','19851','19852'); + f('19853','19854','19855','19856'); + f('19857','19858','19859','19860'); + f('19861','19862','19863','19864'); + f('19865','19866','19867','19868'); + f('19869','19870','19871','19872'); + f('19873','19874','19875','19876'); + f('19877','19878','19879','19880'); + f('19881','19882','19883','19884'); + f('19885','19886','19887','19888'); + f('19889','19890','19891','19892'); + f('19893','19894','19895','19896'); + f('19897','19898','19899','19900'); + f('19901','19902','19903','19904'); + f('19905','19906','19907','19908'); + f('19909','19910','19911','19912'); + f('19913','19914','19915','19916'); + f('19917','19918','19919','19920'); + f('19921','19922','19923','19924'); + f('19925','19926','19927','19928'); + f('19929','19930','19931','19932'); + f('19933','19934','19935','19936'); + f('19937','19938','19939','19940'); + f('19941','19942','19943','19944'); + f('19945','19946','19947','19948'); + f('19949','19950','19951','19952'); + f('19953','19954','19955','19956'); + f('19957','19958','19959','19960'); + f('19961','19962','19963','19964'); + f('19965','19966','19967','19968'); + f('19969','19970','19971','19972'); + f('19973','19974','19975','19976'); + f('19977','19978','19979','19980'); + f('19981','19982','19983','19984'); + f('19985','19986','19987','19988'); + f('19989','19990','19991','19992'); + f('19993','19994','19995','19996'); + f('19997','19998','19999','20000'); + f('20001','20002','20003','20004'); + f('20005','20006','20007','20008'); + f('20009','20010','20011','20012'); + f('20013','20014','20015','20016'); + f('20017','20018','20019','20020'); + f('20021','20022','20023','20024'); + f('20025','20026','20027','20028'); + f('20029','20030','20031','20032'); + f('20033','20034','20035','20036'); + f('20037','20038','20039','20040'); + f('20041','20042','20043','20044'); + f('20045','20046','20047','20048'); + f('20049','20050','20051','20052'); + f('20053','20054','20055','20056'); + f('20057','20058','20059','20060'); + f('20061','20062','20063','20064'); + f('20065','20066','20067','20068'); + f('20069','20070','20071','20072'); + f('20073','20074','20075','20076'); + f('20077','20078','20079','20080'); + f('20081','20082','20083','20084'); + f('20085','20086','20087','20088'); + f('20089','20090','20091','20092'); + f('20093','20094','20095','20096'); + f('20097','20098','20099','20100'); + f('20101','20102','20103','20104'); + f('20105','20106','20107','20108'); + f('20109','20110','20111','20112'); + f('20113','20114','20115','20116'); + f('20117','20118','20119','20120'); + f('20121','20122','20123','20124'); + f('20125','20126','20127','20128'); + f('20129','20130','20131','20132'); + f('20133','20134','20135','20136'); + f('20137','20138','20139','20140'); + f('20141','20142','20143','20144'); + f('20145','20146','20147','20148'); + f('20149','20150','20151','20152'); + f('20153','20154','20155','20156'); + f('20157','20158','20159','20160'); + f('20161','20162','20163','20164'); + f('20165','20166','20167','20168'); + f('20169','20170','20171','20172'); + f('20173','20174','20175','20176'); + f('20177','20178','20179','20180'); + f('20181','20182','20183','20184'); + f('20185','20186','20187','20188'); + f('20189','20190','20191','20192'); + f('20193','20194','20195','20196'); + f('20197','20198','20199','20200'); + f('20201','20202','20203','20204'); + f('20205','20206','20207','20208'); + f('20209','20210','20211','20212'); + f('20213','20214','20215','20216'); + f('20217','20218','20219','20220'); + f('20221','20222','20223','20224'); + f('20225','20226','20227','20228'); + f('20229','20230','20231','20232'); + f('20233','20234','20235','20236'); + f('20237','20238','20239','20240'); + f('20241','20242','20243','20244'); + f('20245','20246','20247','20248'); + f('20249','20250','20251','20252'); + f('20253','20254','20255','20256'); + f('20257','20258','20259','20260'); + f('20261','20262','20263','20264'); + f('20265','20266','20267','20268'); + f('20269','20270','20271','20272'); + f('20273','20274','20275','20276'); + f('20277','20278','20279','20280'); + f('20281','20282','20283','20284'); + f('20285','20286','20287','20288'); + f('20289','20290','20291','20292'); + f('20293','20294','20295','20296'); + f('20297','20298','20299','20300'); + f('20301','20302','20303','20304'); + f('20305','20306','20307','20308'); + f('20309','20310','20311','20312'); + f('20313','20314','20315','20316'); + f('20317','20318','20319','20320'); + f('20321','20322','20323','20324'); + f('20325','20326','20327','20328'); + f('20329','20330','20331','20332'); + f('20333','20334','20335','20336'); + f('20337','20338','20339','20340'); + f('20341','20342','20343','20344'); + f('20345','20346','20347','20348'); + f('20349','20350','20351','20352'); + f('20353','20354','20355','20356'); + f('20357','20358','20359','20360'); + f('20361','20362','20363','20364'); + f('20365','20366','20367','20368'); + f('20369','20370','20371','20372'); + f('20373','20374','20375','20376'); + f('20377','20378','20379','20380'); + f('20381','20382','20383','20384'); + f('20385','20386','20387','20388'); + f('20389','20390','20391','20392'); + f('20393','20394','20395','20396'); + f('20397','20398','20399','20400'); + f('20401','20402','20403','20404'); + f('20405','20406','20407','20408'); + f('20409','20410','20411','20412'); + f('20413','20414','20415','20416'); + f('20417','20418','20419','20420'); + f('20421','20422','20423','20424'); + f('20425','20426','20427','20428'); + f('20429','20430','20431','20432'); + f('20433','20434','20435','20436'); + f('20437','20438','20439','20440'); + f('20441','20442','20443','20444'); + f('20445','20446','20447','20448'); + f('20449','20450','20451','20452'); + f('20453','20454','20455','20456'); + f('20457','20458','20459','20460'); + f('20461','20462','20463','20464'); + f('20465','20466','20467','20468'); + f('20469','20470','20471','20472'); + f('20473','20474','20475','20476'); + f('20477','20478','20479','20480'); + f('20481','20482','20483','20484'); + f('20485','20486','20487','20488'); + f('20489','20490','20491','20492'); + f('20493','20494','20495','20496'); + f('20497','20498','20499','20500'); + f('20501','20502','20503','20504'); + f('20505','20506','20507','20508'); + f('20509','20510','20511','20512'); + f('20513','20514','20515','20516'); + f('20517','20518','20519','20520'); + f('20521','20522','20523','20524'); + f('20525','20526','20527','20528'); + f('20529','20530','20531','20532'); + f('20533','20534','20535','20536'); + f('20537','20538','20539','20540'); + f('20541','20542','20543','20544'); + f('20545','20546','20547','20548'); + f('20549','20550','20551','20552'); + f('20553','20554','20555','20556'); + f('20557','20558','20559','20560'); + f('20561','20562','20563','20564'); + f('20565','20566','20567','20568'); + f('20569','20570','20571','20572'); + f('20573','20574','20575','20576'); + f('20577','20578','20579','20580'); + f('20581','20582','20583','20584'); + f('20585','20586','20587','20588'); + f('20589','20590','20591','20592'); + f('20593','20594','20595','20596'); + f('20597','20598','20599','20600'); + f('20601','20602','20603','20604'); + f('20605','20606','20607','20608'); + f('20609','20610','20611','20612'); + f('20613','20614','20615','20616'); + f('20617','20618','20619','20620'); + f('20621','20622','20623','20624'); + f('20625','20626','20627','20628'); + f('20629','20630','20631','20632'); + f('20633','20634','20635','20636'); + f('20637','20638','20639','20640'); + f('20641','20642','20643','20644'); + f('20645','20646','20647','20648'); + f('20649','20650','20651','20652'); + f('20653','20654','20655','20656'); + f('20657','20658','20659','20660'); + f('20661','20662','20663','20664'); + f('20665','20666','20667','20668'); + f('20669','20670','20671','20672'); + f('20673','20674','20675','20676'); + f('20677','20678','20679','20680'); + f('20681','20682','20683','20684'); + f('20685','20686','20687','20688'); + f('20689','20690','20691','20692'); + f('20693','20694','20695','20696'); + f('20697','20698','20699','20700'); + f('20701','20702','20703','20704'); + f('20705','20706','20707','20708'); + f('20709','20710','20711','20712'); + f('20713','20714','20715','20716'); + f('20717','20718','20719','20720'); + f('20721','20722','20723','20724'); + f('20725','20726','20727','20728'); + f('20729','20730','20731','20732'); + f('20733','20734','20735','20736'); + f('20737','20738','20739','20740'); + f('20741','20742','20743','20744'); + f('20745','20746','20747','20748'); + f('20749','20750','20751','20752'); + f('20753','20754','20755','20756'); + f('20757','20758','20759','20760'); + f('20761','20762','20763','20764'); + f('20765','20766','20767','20768'); + f('20769','20770','20771','20772'); + f('20773','20774','20775','20776'); + f('20777','20778','20779','20780'); + f('20781','20782','20783','20784'); + f('20785','20786','20787','20788'); + f('20789','20790','20791','20792'); + f('20793','20794','20795','20796'); + f('20797','20798','20799','20800'); + f('20801','20802','20803','20804'); + f('20805','20806','20807','20808'); + f('20809','20810','20811','20812'); + f('20813','20814','20815','20816'); + f('20817','20818','20819','20820'); + f('20821','20822','20823','20824'); + f('20825','20826','20827','20828'); + f('20829','20830','20831','20832'); + f('20833','20834','20835','20836'); + f('20837','20838','20839','20840'); + f('20841','20842','20843','20844'); + f('20845','20846','20847','20848'); + f('20849','20850','20851','20852'); + f('20853','20854','20855','20856'); + f('20857','20858','20859','20860'); + f('20861','20862','20863','20864'); + f('20865','20866','20867','20868'); + f('20869','20870','20871','20872'); + f('20873','20874','20875','20876'); + f('20877','20878','20879','20880'); + f('20881','20882','20883','20884'); + f('20885','20886','20887','20888'); + f('20889','20890','20891','20892'); + f('20893','20894','20895','20896'); + f('20897','20898','20899','20900'); + f('20901','20902','20903','20904'); + f('20905','20906','20907','20908'); + f('20909','20910','20911','20912'); + f('20913','20914','20915','20916'); + f('20917','20918','20919','20920'); + f('20921','20922','20923','20924'); + f('20925','20926','20927','20928'); + f('20929','20930','20931','20932'); + f('20933','20934','20935','20936'); + f('20937','20938','20939','20940'); + f('20941','20942','20943','20944'); + f('20945','20946','20947','20948'); + f('20949','20950','20951','20952'); + f('20953','20954','20955','20956'); + f('20957','20958','20959','20960'); + f('20961','20962','20963','20964'); + f('20965','20966','20967','20968'); + f('20969','20970','20971','20972'); + f('20973','20974','20975','20976'); + f('20977','20978','20979','20980'); + f('20981','20982','20983','20984'); + f('20985','20986','20987','20988'); + f('20989','20990','20991','20992'); + f('20993','20994','20995','20996'); + f('20997','20998','20999','21000'); + f('21001','21002','21003','21004'); + f('21005','21006','21007','21008'); + f('21009','21010','21011','21012'); + f('21013','21014','21015','21016'); + f('21017','21018','21019','21020'); + f('21021','21022','21023','21024'); + f('21025','21026','21027','21028'); + f('21029','21030','21031','21032'); + f('21033','21034','21035','21036'); + f('21037','21038','21039','21040'); + f('21041','21042','21043','21044'); + f('21045','21046','21047','21048'); + f('21049','21050','21051','21052'); + f('21053','21054','21055','21056'); + f('21057','21058','21059','21060'); + f('21061','21062','21063','21064'); + f('21065','21066','21067','21068'); + f('21069','21070','21071','21072'); + f('21073','21074','21075','21076'); + f('21077','21078','21079','21080'); + f('21081','21082','21083','21084'); + f('21085','21086','21087','21088'); + f('21089','21090','21091','21092'); + f('21093','21094','21095','21096'); + f('21097','21098','21099','21100'); + f('21101','21102','21103','21104'); + f('21105','21106','21107','21108'); + f('21109','21110','21111','21112'); + f('21113','21114','21115','21116'); + f('21117','21118','21119','21120'); + f('21121','21122','21123','21124'); + f('21125','21126','21127','21128'); + f('21129','21130','21131','21132'); + f('21133','21134','21135','21136'); + f('21137','21138','21139','21140'); + f('21141','21142','21143','21144'); + f('21145','21146','21147','21148'); + f('21149','21150','21151','21152'); + f('21153','21154','21155','21156'); + f('21157','21158','21159','21160'); + f('21161','21162','21163','21164'); + f('21165','21166','21167','21168'); + f('21169','21170','21171','21172'); + f('21173','21174','21175','21176'); + f('21177','21178','21179','21180'); + f('21181','21182','21183','21184'); + f('21185','21186','21187','21188'); + f('21189','21190','21191','21192'); + f('21193','21194','21195','21196'); + f('21197','21198','21199','21200'); + f('21201','21202','21203','21204'); + f('21205','21206','21207','21208'); + f('21209','21210','21211','21212'); + f('21213','21214','21215','21216'); + f('21217','21218','21219','21220'); + f('21221','21222','21223','21224'); + f('21225','21226','21227','21228'); + f('21229','21230','21231','21232'); + f('21233','21234','21235','21236'); + f('21237','21238','21239','21240'); + f('21241','21242','21243','21244'); + f('21245','21246','21247','21248'); + f('21249','21250','21251','21252'); + f('21253','21254','21255','21256'); + f('21257','21258','21259','21260'); + f('21261','21262','21263','21264'); + f('21265','21266','21267','21268'); + f('21269','21270','21271','21272'); + f('21273','21274','21275','21276'); + f('21277','21278','21279','21280'); + f('21281','21282','21283','21284'); + f('21285','21286','21287','21288'); + f('21289','21290','21291','21292'); + f('21293','21294','21295','21296'); + f('21297','21298','21299','21300'); + f('21301','21302','21303','21304'); + f('21305','21306','21307','21308'); + f('21309','21310','21311','21312'); + f('21313','21314','21315','21316'); + f('21317','21318','21319','21320'); + f('21321','21322','21323','21324'); + f('21325','21326','21327','21328'); + f('21329','21330','21331','21332'); + f('21333','21334','21335','21336'); + f('21337','21338','21339','21340'); + f('21341','21342','21343','21344'); + f('21345','21346','21347','21348'); + f('21349','21350','21351','21352'); + f('21353','21354','21355','21356'); + f('21357','21358','21359','21360'); + f('21361','21362','21363','21364'); + f('21365','21366','21367','21368'); + f('21369','21370','21371','21372'); + f('21373','21374','21375','21376'); + f('21377','21378','21379','21380'); + f('21381','21382','21383','21384'); + f('21385','21386','21387','21388'); + f('21389','21390','21391','21392'); + f('21393','21394','21395','21396'); + f('21397','21398','21399','21400'); + f('21401','21402','21403','21404'); + f('21405','21406','21407','21408'); + f('21409','21410','21411','21412'); + f('21413','21414','21415','21416'); + f('21417','21418','21419','21420'); + f('21421','21422','21423','21424'); + f('21425','21426','21427','21428'); + f('21429','21430','21431','21432'); + f('21433','21434','21435','21436'); + f('21437','21438','21439','21440'); + f('21441','21442','21443','21444'); + f('21445','21446','21447','21448'); + f('21449','21450','21451','21452'); + f('21453','21454','21455','21456'); + f('21457','21458','21459','21460'); + f('21461','21462','21463','21464'); + f('21465','21466','21467','21468'); + f('21469','21470','21471','21472'); + f('21473','21474','21475','21476'); + f('21477','21478','21479','21480'); + f('21481','21482','21483','21484'); + f('21485','21486','21487','21488'); + f('21489','21490','21491','21492'); + f('21493','21494','21495','21496'); + f('21497','21498','21499','21500'); + f('21501','21502','21503','21504'); + f('21505','21506','21507','21508'); + f('21509','21510','21511','21512'); + f('21513','21514','21515','21516'); + f('21517','21518','21519','21520'); + f('21521','21522','21523','21524'); + f('21525','21526','21527','21528'); + f('21529','21530','21531','21532'); + f('21533','21534','21535','21536'); + f('21537','21538','21539','21540'); + f('21541','21542','21543','21544'); + f('21545','21546','21547','21548'); + f('21549','21550','21551','21552'); + f('21553','21554','21555','21556'); + f('21557','21558','21559','21560'); + f('21561','21562','21563','21564'); + f('21565','21566','21567','21568'); + f('21569','21570','21571','21572'); + f('21573','21574','21575','21576'); + f('21577','21578','21579','21580'); + f('21581','21582','21583','21584'); + f('21585','21586','21587','21588'); + f('21589','21590','21591','21592'); + f('21593','21594','21595','21596'); + f('21597','21598','21599','21600'); + f('21601','21602','21603','21604'); + f('21605','21606','21607','21608'); + f('21609','21610','21611','21612'); + f('21613','21614','21615','21616'); + f('21617','21618','21619','21620'); + f('21621','21622','21623','21624'); + f('21625','21626','21627','21628'); + f('21629','21630','21631','21632'); + f('21633','21634','21635','21636'); + f('21637','21638','21639','21640'); + f('21641','21642','21643','21644'); + f('21645','21646','21647','21648'); + f('21649','21650','21651','21652'); + f('21653','21654','21655','21656'); + f('21657','21658','21659','21660'); + f('21661','21662','21663','21664'); + f('21665','21666','21667','21668'); + f('21669','21670','21671','21672'); + f('21673','21674','21675','21676'); + f('21677','21678','21679','21680'); + f('21681','21682','21683','21684'); + f('21685','21686','21687','21688'); + f('21689','21690','21691','21692'); + f('21693','21694','21695','21696'); + f('21697','21698','21699','21700'); + f('21701','21702','21703','21704'); + f('21705','21706','21707','21708'); + f('21709','21710','21711','21712'); + f('21713','21714','21715','21716'); + f('21717','21718','21719','21720'); + f('21721','21722','21723','21724'); + f('21725','21726','21727','21728'); + f('21729','21730','21731','21732'); + f('21733','21734','21735','21736'); + f('21737','21738','21739','21740'); + f('21741','21742','21743','21744'); + f('21745','21746','21747','21748'); + f('21749','21750','21751','21752'); + f('21753','21754','21755','21756'); + f('21757','21758','21759','21760'); + f('21761','21762','21763','21764'); + f('21765','21766','21767','21768'); + f('21769','21770','21771','21772'); + f('21773','21774','21775','21776'); + f('21777','21778','21779','21780'); + f('21781','21782','21783','21784'); + f('21785','21786','21787','21788'); + f('21789','21790','21791','21792'); + f('21793','21794','21795','21796'); + f('21797','21798','21799','21800'); + f('21801','21802','21803','21804'); + f('21805','21806','21807','21808'); + f('21809','21810','21811','21812'); + f('21813','21814','21815','21816'); + f('21817','21818','21819','21820'); + f('21821','21822','21823','21824'); + f('21825','21826','21827','21828'); + f('21829','21830','21831','21832'); + f('21833','21834','21835','21836'); + f('21837','21838','21839','21840'); + f('21841','21842','21843','21844'); + f('21845','21846','21847','21848'); + f('21849','21850','21851','21852'); + f('21853','21854','21855','21856'); + f('21857','21858','21859','21860'); + f('21861','21862','21863','21864'); + f('21865','21866','21867','21868'); + f('21869','21870','21871','21872'); + f('21873','21874','21875','21876'); + f('21877','21878','21879','21880'); + f('21881','21882','21883','21884'); + f('21885','21886','21887','21888'); + f('21889','21890','21891','21892'); + f('21893','21894','21895','21896'); + f('21897','21898','21899','21900'); + f('21901','21902','21903','21904'); + f('21905','21906','21907','21908'); + f('21909','21910','21911','21912'); + f('21913','21914','21915','21916'); + f('21917','21918','21919','21920'); + f('21921','21922','21923','21924'); + f('21925','21926','21927','21928'); + f('21929','21930','21931','21932'); + f('21933','21934','21935','21936'); + f('21937','21938','21939','21940'); + f('21941','21942','21943','21944'); + f('21945','21946','21947','21948'); + f('21949','21950','21951','21952'); + f('21953','21954','21955','21956'); + f('21957','21958','21959','21960'); + f('21961','21962','21963','21964'); + f('21965','21966','21967','21968'); + f('21969','21970','21971','21972'); + f('21973','21974','21975','21976'); + f('21977','21978','21979','21980'); + f('21981','21982','21983','21984'); + f('21985','21986','21987','21988'); + f('21989','21990','21991','21992'); + f('21993','21994','21995','21996'); + f('21997','21998','21999','22000'); + f('22001','22002','22003','22004'); + f('22005','22006','22007','22008'); + f('22009','22010','22011','22012'); + f('22013','22014','22015','22016'); + f('22017','22018','22019','22020'); + f('22021','22022','22023','22024'); + f('22025','22026','22027','22028'); + f('22029','22030','22031','22032'); + f('22033','22034','22035','22036'); + f('22037','22038','22039','22040'); + f('22041','22042','22043','22044'); + f('22045','22046','22047','22048'); + f('22049','22050','22051','22052'); + f('22053','22054','22055','22056'); + f('22057','22058','22059','22060'); + f('22061','22062','22063','22064'); + f('22065','22066','22067','22068'); + f('22069','22070','22071','22072'); + f('22073','22074','22075','22076'); + f('22077','22078','22079','22080'); + f('22081','22082','22083','22084'); + f('22085','22086','22087','22088'); + f('22089','22090','22091','22092'); + f('22093','22094','22095','22096'); + f('22097','22098','22099','22100'); + f('22101','22102','22103','22104'); + f('22105','22106','22107','22108'); + f('22109','22110','22111','22112'); + f('22113','22114','22115','22116'); + f('22117','22118','22119','22120'); + f('22121','22122','22123','22124'); + f('22125','22126','22127','22128'); + f('22129','22130','22131','22132'); + f('22133','22134','22135','22136'); + f('22137','22138','22139','22140'); + f('22141','22142','22143','22144'); + f('22145','22146','22147','22148'); + f('22149','22150','22151','22152'); + f('22153','22154','22155','22156'); + f('22157','22158','22159','22160'); + f('22161','22162','22163','22164'); + f('22165','22166','22167','22168'); + f('22169','22170','22171','22172'); + f('22173','22174','22175','22176'); + f('22177','22178','22179','22180'); + f('22181','22182','22183','22184'); + f('22185','22186','22187','22188'); + f('22189','22190','22191','22192'); + f('22193','22194','22195','22196'); + f('22197','22198','22199','22200'); + f('22201','22202','22203','22204'); + f('22205','22206','22207','22208'); + f('22209','22210','22211','22212'); + f('22213','22214','22215','22216'); + f('22217','22218','22219','22220'); + f('22221','22222','22223','22224'); + f('22225','22226','22227','22228'); + f('22229','22230','22231','22232'); + f('22233','22234','22235','22236'); + f('22237','22238','22239','22240'); + f('22241','22242','22243','22244'); + f('22245','22246','22247','22248'); + f('22249','22250','22251','22252'); + f('22253','22254','22255','22256'); + f('22257','22258','22259','22260'); + f('22261','22262','22263','22264'); + f('22265','22266','22267','22268'); + f('22269','22270','22271','22272'); + f('22273','22274','22275','22276'); + f('22277','22278','22279','22280'); + f('22281','22282','22283','22284'); + f('22285','22286','22287','22288'); + f('22289','22290','22291','22292'); + f('22293','22294','22295','22296'); + f('22297','22298','22299','22300'); + f('22301','22302','22303','22304'); + f('22305','22306','22307','22308'); + f('22309','22310','22311','22312'); + f('22313','22314','22315','22316'); + f('22317','22318','22319','22320'); + f('22321','22322','22323','22324'); + f('22325','22326','22327','22328'); + f('22329','22330','22331','22332'); + f('22333','22334','22335','22336'); + f('22337','22338','22339','22340'); + f('22341','22342','22343','22344'); + f('22345','22346','22347','22348'); + f('22349','22350','22351','22352'); + f('22353','22354','22355','22356'); + f('22357','22358','22359','22360'); + f('22361','22362','22363','22364'); + f('22365','22366','22367','22368'); + f('22369','22370','22371','22372'); + f('22373','22374','22375','22376'); + f('22377','22378','22379','22380'); + f('22381','22382','22383','22384'); + f('22385','22386','22387','22388'); + f('22389','22390','22391','22392'); + f('22393','22394','22395','22396'); + f('22397','22398','22399','22400'); + f('22401','22402','22403','22404'); + f('22405','22406','22407','22408'); + f('22409','22410','22411','22412'); + f('22413','22414','22415','22416'); + f('22417','22418','22419','22420'); + f('22421','22422','22423','22424'); + f('22425','22426','22427','22428'); + f('22429','22430','22431','22432'); + f('22433','22434','22435','22436'); + f('22437','22438','22439','22440'); + f('22441','22442','22443','22444'); + f('22445','22446','22447','22448'); + f('22449','22450','22451','22452'); + f('22453','22454','22455','22456'); + f('22457','22458','22459','22460'); + f('22461','22462','22463','22464'); + f('22465','22466','22467','22468'); + f('22469','22470','22471','22472'); + f('22473','22474','22475','22476'); + f('22477','22478','22479','22480'); + f('22481','22482','22483','22484'); + f('22485','22486','22487','22488'); + f('22489','22490','22491','22492'); + f('22493','22494','22495','22496'); + f('22497','22498','22499','22500'); + f('22501','22502','22503','22504'); + f('22505','22506','22507','22508'); + f('22509','22510','22511','22512'); + f('22513','22514','22515','22516'); + f('22517','22518','22519','22520'); + f('22521','22522','22523','22524'); + f('22525','22526','22527','22528'); + f('22529','22530','22531','22532'); + f('22533','22534','22535','22536'); + f('22537','22538','22539','22540'); + f('22541','22542','22543','22544'); + f('22545','22546','22547','22548'); + f('22549','22550','22551','22552'); + f('22553','22554','22555','22556'); + f('22557','22558','22559','22560'); + f('22561','22562','22563','22564'); + f('22565','22566','22567','22568'); + f('22569','22570','22571','22572'); + f('22573','22574','22575','22576'); + f('22577','22578','22579','22580'); + f('22581','22582','22583','22584'); + f('22585','22586','22587','22588'); + f('22589','22590','22591','22592'); + f('22593','22594','22595','22596'); + f('22597','22598','22599','22600'); + f('22601','22602','22603','22604'); + f('22605','22606','22607','22608'); + f('22609','22610','22611','22612'); + f('22613','22614','22615','22616'); + f('22617','22618','22619','22620'); + f('22621','22622','22623','22624'); + f('22625','22626','22627','22628'); + f('22629','22630','22631','22632'); + f('22633','22634','22635','22636'); + f('22637','22638','22639','22640'); + f('22641','22642','22643','22644'); + f('22645','22646','22647','22648'); + f('22649','22650','22651','22652'); + f('22653','22654','22655','22656'); + f('22657','22658','22659','22660'); + f('22661','22662','22663','22664'); + f('22665','22666','22667','22668'); + f('22669','22670','22671','22672'); + f('22673','22674','22675','22676'); + f('22677','22678','22679','22680'); + f('22681','22682','22683','22684'); + f('22685','22686','22687','22688'); + f('22689','22690','22691','22692'); + f('22693','22694','22695','22696'); + f('22697','22698','22699','22700'); + f('22701','22702','22703','22704'); + f('22705','22706','22707','22708'); + f('22709','22710','22711','22712'); + f('22713','22714','22715','22716'); + f('22717','22718','22719','22720'); + f('22721','22722','22723','22724'); + f('22725','22726','22727','22728'); + f('22729','22730','22731','22732'); + f('22733','22734','22735','22736'); + f('22737','22738','22739','22740'); + f('22741','22742','22743','22744'); + f('22745','22746','22747','22748'); + f('22749','22750','22751','22752'); + f('22753','22754','22755','22756'); + f('22757','22758','22759','22760'); + f('22761','22762','22763','22764'); + f('22765','22766','22767','22768'); + f('22769','22770','22771','22772'); + f('22773','22774','22775','22776'); + f('22777','22778','22779','22780'); + f('22781','22782','22783','22784'); + f('22785','22786','22787','22788'); + f('22789','22790','22791','22792'); + f('22793','22794','22795','22796'); + f('22797','22798','22799','22800'); + f('22801','22802','22803','22804'); + f('22805','22806','22807','22808'); + f('22809','22810','22811','22812'); + f('22813','22814','22815','22816'); + f('22817','22818','22819','22820'); + f('22821','22822','22823','22824'); + f('22825','22826','22827','22828'); + f('22829','22830','22831','22832'); + f('22833','22834','22835','22836'); + f('22837','22838','22839','22840'); + f('22841','22842','22843','22844'); + f('22845','22846','22847','22848'); + f('22849','22850','22851','22852'); + f('22853','22854','22855','22856'); + f('22857','22858','22859','22860'); + f('22861','22862','22863','22864'); + f('22865','22866','22867','22868'); + f('22869','22870','22871','22872'); + f('22873','22874','22875','22876'); + f('22877','22878','22879','22880'); + f('22881','22882','22883','22884'); + f('22885','22886','22887','22888'); + f('22889','22890','22891','22892'); + f('22893','22894','22895','22896'); + f('22897','22898','22899','22900'); + f('22901','22902','22903','22904'); + f('22905','22906','22907','22908'); + f('22909','22910','22911','22912'); + f('22913','22914','22915','22916'); + f('22917','22918','22919','22920'); + f('22921','22922','22923','22924'); + f('22925','22926','22927','22928'); + f('22929','22930','22931','22932'); + f('22933','22934','22935','22936'); + f('22937','22938','22939','22940'); + f('22941','22942','22943','22944'); + f('22945','22946','22947','22948'); + f('22949','22950','22951','22952'); + f('22953','22954','22955','22956'); + f('22957','22958','22959','22960'); + f('22961','22962','22963','22964'); + f('22965','22966','22967','22968'); + f('22969','22970','22971','22972'); + f('22973','22974','22975','22976'); + f('22977','22978','22979','22980'); + f('22981','22982','22983','22984'); + f('22985','22986','22987','22988'); + f('22989','22990','22991','22992'); + f('22993','22994','22995','22996'); + f('22997','22998','22999','23000'); + f('23001','23002','23003','23004'); + f('23005','23006','23007','23008'); + f('23009','23010','23011','23012'); + f('23013','23014','23015','23016'); + f('23017','23018','23019','23020'); + f('23021','23022','23023','23024'); + f('23025','23026','23027','23028'); + f('23029','23030','23031','23032'); + f('23033','23034','23035','23036'); + f('23037','23038','23039','23040'); + f('23041','23042','23043','23044'); + f('23045','23046','23047','23048'); + f('23049','23050','23051','23052'); + f('23053','23054','23055','23056'); + f('23057','23058','23059','23060'); + f('23061','23062','23063','23064'); + f('23065','23066','23067','23068'); + f('23069','23070','23071','23072'); + f('23073','23074','23075','23076'); + f('23077','23078','23079','23080'); + f('23081','23082','23083','23084'); + f('23085','23086','23087','23088'); + f('23089','23090','23091','23092'); + f('23093','23094','23095','23096'); + f('23097','23098','23099','23100'); + f('23101','23102','23103','23104'); + f('23105','23106','23107','23108'); + f('23109','23110','23111','23112'); + f('23113','23114','23115','23116'); + f('23117','23118','23119','23120'); + f('23121','23122','23123','23124'); + f('23125','23126','23127','23128'); + f('23129','23130','23131','23132'); + f('23133','23134','23135','23136'); + f('23137','23138','23139','23140'); + f('23141','23142','23143','23144'); + f('23145','23146','23147','23148'); + f('23149','23150','23151','23152'); + f('23153','23154','23155','23156'); + f('23157','23158','23159','23160'); + f('23161','23162','23163','23164'); + f('23165','23166','23167','23168'); + f('23169','23170','23171','23172'); + f('23173','23174','23175','23176'); + f('23177','23178','23179','23180'); + f('23181','23182','23183','23184'); + f('23185','23186','23187','23188'); + f('23189','23190','23191','23192'); + f('23193','23194','23195','23196'); + f('23197','23198','23199','23200'); + f('23201','23202','23203','23204'); + f('23205','23206','23207','23208'); + f('23209','23210','23211','23212'); + f('23213','23214','23215','23216'); + f('23217','23218','23219','23220'); + f('23221','23222','23223','23224'); + f('23225','23226','23227','23228'); + f('23229','23230','23231','23232'); + f('23233','23234','23235','23236'); + f('23237','23238','23239','23240'); + f('23241','23242','23243','23244'); + f('23245','23246','23247','23248'); + f('23249','23250','23251','23252'); + f('23253','23254','23255','23256'); + f('23257','23258','23259','23260'); + f('23261','23262','23263','23264'); + f('23265','23266','23267','23268'); + f('23269','23270','23271','23272'); + f('23273','23274','23275','23276'); + f('23277','23278','23279','23280'); + f('23281','23282','23283','23284'); + f('23285','23286','23287','23288'); + f('23289','23290','23291','23292'); + f('23293','23294','23295','23296'); + f('23297','23298','23299','23300'); + f('23301','23302','23303','23304'); + f('23305','23306','23307','23308'); + f('23309','23310','23311','23312'); + f('23313','23314','23315','23316'); + f('23317','23318','23319','23320'); + f('23321','23322','23323','23324'); + f('23325','23326','23327','23328'); + f('23329','23330','23331','23332'); + f('23333','23334','23335','23336'); + f('23337','23338','23339','23340'); + f('23341','23342','23343','23344'); + f('23345','23346','23347','23348'); + f('23349','23350','23351','23352'); + f('23353','23354','23355','23356'); + f('23357','23358','23359','23360'); + f('23361','23362','23363','23364'); + f('23365','23366','23367','23368'); + f('23369','23370','23371','23372'); + f('23373','23374','23375','23376'); + f('23377','23378','23379','23380'); + f('23381','23382','23383','23384'); + f('23385','23386','23387','23388'); + f('23389','23390','23391','23392'); + f('23393','23394','23395','23396'); + f('23397','23398','23399','23400'); + f('23401','23402','23403','23404'); + f('23405','23406','23407','23408'); + f('23409','23410','23411','23412'); + f('23413','23414','23415','23416'); + f('23417','23418','23419','23420'); + f('23421','23422','23423','23424'); + f('23425','23426','23427','23428'); + f('23429','23430','23431','23432'); + f('23433','23434','23435','23436'); + f('23437','23438','23439','23440'); + f('23441','23442','23443','23444'); + f('23445','23446','23447','23448'); + f('23449','23450','23451','23452'); + f('23453','23454','23455','23456'); + f('23457','23458','23459','23460'); + f('23461','23462','23463','23464'); + f('23465','23466','23467','23468'); + f('23469','23470','23471','23472'); + f('23473','23474','23475','23476'); + f('23477','23478','23479','23480'); + f('23481','23482','23483','23484'); + f('23485','23486','23487','23488'); + f('23489','23490','23491','23492'); + f('23493','23494','23495','23496'); + f('23497','23498','23499','23500'); + f('23501','23502','23503','23504'); + f('23505','23506','23507','23508'); + f('23509','23510','23511','23512'); + f('23513','23514','23515','23516'); + f('23517','23518','23519','23520'); + f('23521','23522','23523','23524'); + f('23525','23526','23527','23528'); + f('23529','23530','23531','23532'); + f('23533','23534','23535','23536'); + f('23537','23538','23539','23540'); + f('23541','23542','23543','23544'); + f('23545','23546','23547','23548'); + f('23549','23550','23551','23552'); + f('23553','23554','23555','23556'); + f('23557','23558','23559','23560'); + f('23561','23562','23563','23564'); + f('23565','23566','23567','23568'); + f('23569','23570','23571','23572'); + f('23573','23574','23575','23576'); + f('23577','23578','23579','23580'); + f('23581','23582','23583','23584'); + f('23585','23586','23587','23588'); + f('23589','23590','23591','23592'); + f('23593','23594','23595','23596'); + f('23597','23598','23599','23600'); + f('23601','23602','23603','23604'); + f('23605','23606','23607','23608'); + f('23609','23610','23611','23612'); + f('23613','23614','23615','23616'); + f('23617','23618','23619','23620'); + f('23621','23622','23623','23624'); + f('23625','23626','23627','23628'); + f('23629','23630','23631','23632'); + f('23633','23634','23635','23636'); + f('23637','23638','23639','23640'); + f('23641','23642','23643','23644'); + f('23645','23646','23647','23648'); + f('23649','23650','23651','23652'); + f('23653','23654','23655','23656'); + f('23657','23658','23659','23660'); + f('23661','23662','23663','23664'); + f('23665','23666','23667','23668'); + f('23669','23670','23671','23672'); + f('23673','23674','23675','23676'); + f('23677','23678','23679','23680'); + f('23681','23682','23683','23684'); + f('23685','23686','23687','23688'); + f('23689','23690','23691','23692'); + f('23693','23694','23695','23696'); + f('23697','23698','23699','23700'); + f('23701','23702','23703','23704'); + f('23705','23706','23707','23708'); + f('23709','23710','23711','23712'); + f('23713','23714','23715','23716'); + f('23717','23718','23719','23720'); + f('23721','23722','23723','23724'); + f('23725','23726','23727','23728'); + f('23729','23730','23731','23732'); + f('23733','23734','23735','23736'); + f('23737','23738','23739','23740'); + f('23741','23742','23743','23744'); + f('23745','23746','23747','23748'); + f('23749','23750','23751','23752'); + f('23753','23754','23755','23756'); + f('23757','23758','23759','23760'); + f('23761','23762','23763','23764'); + f('23765','23766','23767','23768'); + f('23769','23770','23771','23772'); + f('23773','23774','23775','23776'); + f('23777','23778','23779','23780'); + f('23781','23782','23783','23784'); + f('23785','23786','23787','23788'); + f('23789','23790','23791','23792'); + f('23793','23794','23795','23796'); + f('23797','23798','23799','23800'); + f('23801','23802','23803','23804'); + f('23805','23806','23807','23808'); + f('23809','23810','23811','23812'); + f('23813','23814','23815','23816'); + f('23817','23818','23819','23820'); + f('23821','23822','23823','23824'); + f('23825','23826','23827','23828'); + f('23829','23830','23831','23832'); + f('23833','23834','23835','23836'); + f('23837','23838','23839','23840'); + f('23841','23842','23843','23844'); + f('23845','23846','23847','23848'); + f('23849','23850','23851','23852'); + f('23853','23854','23855','23856'); + f('23857','23858','23859','23860'); + f('23861','23862','23863','23864'); + f('23865','23866','23867','23868'); + f('23869','23870','23871','23872'); + f('23873','23874','23875','23876'); + f('23877','23878','23879','23880'); + f('23881','23882','23883','23884'); + f('23885','23886','23887','23888'); + f('23889','23890','23891','23892'); + f('23893','23894','23895','23896'); + f('23897','23898','23899','23900'); + f('23901','23902','23903','23904'); + f('23905','23906','23907','23908'); + f('23909','23910','23911','23912'); + f('23913','23914','23915','23916'); + f('23917','23918','23919','23920'); + f('23921','23922','23923','23924'); + f('23925','23926','23927','23928'); + f('23929','23930','23931','23932'); + f('23933','23934','23935','23936'); + f('23937','23938','23939','23940'); + f('23941','23942','23943','23944'); + f('23945','23946','23947','23948'); + f('23949','23950','23951','23952'); + f('23953','23954','23955','23956'); + f('23957','23958','23959','23960'); + f('23961','23962','23963','23964'); + f('23965','23966','23967','23968'); + f('23969','23970','23971','23972'); + f('23973','23974','23975','23976'); + f('23977','23978','23979','23980'); + f('23981','23982','23983','23984'); + f('23985','23986','23987','23988'); + f('23989','23990','23991','23992'); + f('23993','23994','23995','23996'); + f('23997','23998','23999','24000'); + f('24001','24002','24003','24004'); + f('24005','24006','24007','24008'); + f('24009','24010','24011','24012'); + f('24013','24014','24015','24016'); + f('24017','24018','24019','24020'); + f('24021','24022','24023','24024'); + f('24025','24026','24027','24028'); + f('24029','24030','24031','24032'); + f('24033','24034','24035','24036'); + f('24037','24038','24039','24040'); + f('24041','24042','24043','24044'); + f('24045','24046','24047','24048'); + f('24049','24050','24051','24052'); + f('24053','24054','24055','24056'); + f('24057','24058','24059','24060'); + f('24061','24062','24063','24064'); + f('24065','24066','24067','24068'); + f('24069','24070','24071','24072'); + f('24073','24074','24075','24076'); + f('24077','24078','24079','24080'); + f('24081','24082','24083','24084'); + f('24085','24086','24087','24088'); + f('24089','24090','24091','24092'); + f('24093','24094','24095','24096'); + f('24097','24098','24099','24100'); + f('24101','24102','24103','24104'); + f('24105','24106','24107','24108'); + f('24109','24110','24111','24112'); + f('24113','24114','24115','24116'); + f('24117','24118','24119','24120'); + f('24121','24122','24123','24124'); + f('24125','24126','24127','24128'); + f('24129','24130','24131','24132'); + f('24133','24134','24135','24136'); + f('24137','24138','24139','24140'); + f('24141','24142','24143','24144'); + f('24145','24146','24147','24148'); + f('24149','24150','24151','24152'); + f('24153','24154','24155','24156'); + f('24157','24158','24159','24160'); + f('24161','24162','24163','24164'); + f('24165','24166','24167','24168'); + f('24169','24170','24171','24172'); + f('24173','24174','24175','24176'); + f('24177','24178','24179','24180'); + f('24181','24182','24183','24184'); + f('24185','24186','24187','24188'); + f('24189','24190','24191','24192'); + f('24193','24194','24195','24196'); + f('24197','24198','24199','24200'); + f('24201','24202','24203','24204'); + f('24205','24206','24207','24208'); + f('24209','24210','24211','24212'); + f('24213','24214','24215','24216'); + f('24217','24218','24219','24220'); + f('24221','24222','24223','24224'); + f('24225','24226','24227','24228'); + f('24229','24230','24231','24232'); + f('24233','24234','24235','24236'); + f('24237','24238','24239','24240'); + f('24241','24242','24243','24244'); + f('24245','24246','24247','24248'); + f('24249','24250','24251','24252'); + f('24253','24254','24255','24256'); + f('24257','24258','24259','24260'); + f('24261','24262','24263','24264'); + f('24265','24266','24267','24268'); + f('24269','24270','24271','24272'); + f('24273','24274','24275','24276'); + f('24277','24278','24279','24280'); + f('24281','24282','24283','24284'); + f('24285','24286','24287','24288'); + f('24289','24290','24291','24292'); + f('24293','24294','24295','24296'); + f('24297','24298','24299','24300'); + f('24301','24302','24303','24304'); + f('24305','24306','24307','24308'); + f('24309','24310','24311','24312'); + f('24313','24314','24315','24316'); + f('24317','24318','24319','24320'); + f('24321','24322','24323','24324'); + f('24325','24326','24327','24328'); + f('24329','24330','24331','24332'); + f('24333','24334','24335','24336'); + f('24337','24338','24339','24340'); + f('24341','24342','24343','24344'); + f('24345','24346','24347','24348'); + f('24349','24350','24351','24352'); + f('24353','24354','24355','24356'); + f('24357','24358','24359','24360'); + f('24361','24362','24363','24364'); + f('24365','24366','24367','24368'); + f('24369','24370','24371','24372'); + f('24373','24374','24375','24376'); + f('24377','24378','24379','24380'); + f('24381','24382','24383','24384'); + f('24385','24386','24387','24388'); + f('24389','24390','24391','24392'); + f('24393','24394','24395','24396'); + f('24397','24398','24399','24400'); + f('24401','24402','24403','24404'); + f('24405','24406','24407','24408'); + f('24409','24410','24411','24412'); + f('24413','24414','24415','24416'); + f('24417','24418','24419','24420'); + f('24421','24422','24423','24424'); + f('24425','24426','24427','24428'); + f('24429','24430','24431','24432'); + f('24433','24434','24435','24436'); + f('24437','24438','24439','24440'); + f('24441','24442','24443','24444'); + f('24445','24446','24447','24448'); + f('24449','24450','24451','24452'); + f('24453','24454','24455','24456'); + f('24457','24458','24459','24460'); + f('24461','24462','24463','24464'); + f('24465','24466','24467','24468'); + f('24469','24470','24471','24472'); + f('24473','24474','24475','24476'); + f('24477','24478','24479','24480'); + f('24481','24482','24483','24484'); + f('24485','24486','24487','24488'); + f('24489','24490','24491','24492'); + f('24493','24494','24495','24496'); + f('24497','24498','24499','24500'); + f('24501','24502','24503','24504'); + f('24505','24506','24507','24508'); + f('24509','24510','24511','24512'); + f('24513','24514','24515','24516'); + f('24517','24518','24519','24520'); + f('24521','24522','24523','24524'); + f('24525','24526','24527','24528'); + f('24529','24530','24531','24532'); + f('24533','24534','24535','24536'); + f('24537','24538','24539','24540'); + f('24541','24542','24543','24544'); + f('24545','24546','24547','24548'); + f('24549','24550','24551','24552'); + f('24553','24554','24555','24556'); + f('24557','24558','24559','24560'); + f('24561','24562','24563','24564'); + f('24565','24566','24567','24568'); + f('24569','24570','24571','24572'); + f('24573','24574','24575','24576'); + f('24577','24578','24579','24580'); + f('24581','24582','24583','24584'); + f('24585','24586','24587','24588'); + f('24589','24590','24591','24592'); + f('24593','24594','24595','24596'); + f('24597','24598','24599','24600'); + f('24601','24602','24603','24604'); + f('24605','24606','24607','24608'); + f('24609','24610','24611','24612'); + f('24613','24614','24615','24616'); + f('24617','24618','24619','24620'); + f('24621','24622','24623','24624'); + f('24625','24626','24627','24628'); + f('24629','24630','24631','24632'); + f('24633','24634','24635','24636'); + f('24637','24638','24639','24640'); + f('24641','24642','24643','24644'); + f('24645','24646','24647','24648'); + f('24649','24650','24651','24652'); + f('24653','24654','24655','24656'); + f('24657','24658','24659','24660'); + f('24661','24662','24663','24664'); + f('24665','24666','24667','24668'); + f('24669','24670','24671','24672'); + f('24673','24674','24675','24676'); + f('24677','24678','24679','24680'); + f('24681','24682','24683','24684'); + f('24685','24686','24687','24688'); + f('24689','24690','24691','24692'); + f('24693','24694','24695','24696'); + f('24697','24698','24699','24700'); + f('24701','24702','24703','24704'); + f('24705','24706','24707','24708'); + f('24709','24710','24711','24712'); + f('24713','24714','24715','24716'); + f('24717','24718','24719','24720'); + f('24721','24722','24723','24724'); + f('24725','24726','24727','24728'); + f('24729','24730','24731','24732'); + f('24733','24734','24735','24736'); + f('24737','24738','24739','24740'); + f('24741','24742','24743','24744'); + f('24745','24746','24747','24748'); + f('24749','24750','24751','24752'); + f('24753','24754','24755','24756'); + f('24757','24758','24759','24760'); + f('24761','24762','24763','24764'); + f('24765','24766','24767','24768'); + f('24769','24770','24771','24772'); + f('24773','24774','24775','24776'); + f('24777','24778','24779','24780'); + f('24781','24782','24783','24784'); + f('24785','24786','24787','24788'); + f('24789','24790','24791','24792'); + f('24793','24794','24795','24796'); + f('24797','24798','24799','24800'); + f('24801','24802','24803','24804'); + f('24805','24806','24807','24808'); + f('24809','24810','24811','24812'); + f('24813','24814','24815','24816'); + f('24817','24818','24819','24820'); + f('24821','24822','24823','24824'); + f('24825','24826','24827','24828'); + f('24829','24830','24831','24832'); + f('24833','24834','24835','24836'); + f('24837','24838','24839','24840'); + f('24841','24842','24843','24844'); + f('24845','24846','24847','24848'); + f('24849','24850','24851','24852'); + f('24853','24854','24855','24856'); + f('24857','24858','24859','24860'); + f('24861','24862','24863','24864'); + f('24865','24866','24867','24868'); + f('24869','24870','24871','24872'); + f('24873','24874','24875','24876'); + f('24877','24878','24879','24880'); + f('24881','24882','24883','24884'); + f('24885','24886','24887','24888'); + f('24889','24890','24891','24892'); + f('24893','24894','24895','24896'); + f('24897','24898','24899','24900'); + f('24901','24902','24903','24904'); + f('24905','24906','24907','24908'); + f('24909','24910','24911','24912'); + f('24913','24914','24915','24916'); + f('24917','24918','24919','24920'); + f('24921','24922','24923','24924'); + f('24925','24926','24927','24928'); + f('24929','24930','24931','24932'); + f('24933','24934','24935','24936'); + f('24937','24938','24939','24940'); + f('24941','24942','24943','24944'); + f('24945','24946','24947','24948'); + f('24949','24950','24951','24952'); + f('24953','24954','24955','24956'); + f('24957','24958','24959','24960'); + f('24961','24962','24963','24964'); + f('24965','24966','24967','24968'); + f('24969','24970','24971','24972'); + f('24973','24974','24975','24976'); + f('24977','24978','24979','24980'); + f('24981','24982','24983','24984'); + f('24985','24986','24987','24988'); + f('24989','24990','24991','24992'); + f('24993','24994','24995','24996'); + f('24997','24998','24999','25000'); + f('25001','25002','25003','25004'); + f('25005','25006','25007','25008'); + f('25009','25010','25011','25012'); + f('25013','25014','25015','25016'); + f('25017','25018','25019','25020'); + f('25021','25022','25023','25024'); + f('25025','25026','25027','25028'); + f('25029','25030','25031','25032'); + f('25033','25034','25035','25036'); + f('25037','25038','25039','25040'); + f('25041','25042','25043','25044'); + f('25045','25046','25047','25048'); + f('25049','25050','25051','25052'); + f('25053','25054','25055','25056'); + f('25057','25058','25059','25060'); + f('25061','25062','25063','25064'); + f('25065','25066','25067','25068'); + f('25069','25070','25071','25072'); + f('25073','25074','25075','25076'); + f('25077','25078','25079','25080'); + f('25081','25082','25083','25084'); + f('25085','25086','25087','25088'); + f('25089','25090','25091','25092'); + f('25093','25094','25095','25096'); + f('25097','25098','25099','25100'); + f('25101','25102','25103','25104'); + f('25105','25106','25107','25108'); + f('25109','25110','25111','25112'); + f('25113','25114','25115','25116'); + f('25117','25118','25119','25120'); + f('25121','25122','25123','25124'); + f('25125','25126','25127','25128'); + f('25129','25130','25131','25132'); + f('25133','25134','25135','25136'); + f('25137','25138','25139','25140'); + f('25141','25142','25143','25144'); + f('25145','25146','25147','25148'); + f('25149','25150','25151','25152'); + f('25153','25154','25155','25156'); + f('25157','25158','25159','25160'); + f('25161','25162','25163','25164'); + f('25165','25166','25167','25168'); + f('25169','25170','25171','25172'); + f('25173','25174','25175','25176'); + f('25177','25178','25179','25180'); + f('25181','25182','25183','25184'); + f('25185','25186','25187','25188'); + f('25189','25190','25191','25192'); + f('25193','25194','25195','25196'); + f('25197','25198','25199','25200'); + f('25201','25202','25203','25204'); + f('25205','25206','25207','25208'); + f('25209','25210','25211','25212'); + f('25213','25214','25215','25216'); + f('25217','25218','25219','25220'); + f('25221','25222','25223','25224'); + f('25225','25226','25227','25228'); + f('25229','25230','25231','25232'); + f('25233','25234','25235','25236'); + f('25237','25238','25239','25240'); + f('25241','25242','25243','25244'); + f('25245','25246','25247','25248'); + f('25249','25250','25251','25252'); + f('25253','25254','25255','25256'); + f('25257','25258','25259','25260'); + f('25261','25262','25263','25264'); + f('25265','25266','25267','25268'); + f('25269','25270','25271','25272'); + f('25273','25274','25275','25276'); + f('25277','25278','25279','25280'); + f('25281','25282','25283','25284'); + f('25285','25286','25287','25288'); + f('25289','25290','25291','25292'); + f('25293','25294','25295','25296'); + f('25297','25298','25299','25300'); + f('25301','25302','25303','25304'); + f('25305','25306','25307','25308'); + f('25309','25310','25311','25312'); + f('25313','25314','25315','25316'); + f('25317','25318','25319','25320'); + f('25321','25322','25323','25324'); + f('25325','25326','25327','25328'); + f('25329','25330','25331','25332'); + f('25333','25334','25335','25336'); + f('25337','25338','25339','25340'); + f('25341','25342','25343','25344'); + f('25345','25346','25347','25348'); + f('25349','25350','25351','25352'); + f('25353','25354','25355','25356'); + f('25357','25358','25359','25360'); + f('25361','25362','25363','25364'); + f('25365','25366','25367','25368'); + f('25369','25370','25371','25372'); + f('25373','25374','25375','25376'); + f('25377','25378','25379','25380'); + f('25381','25382','25383','25384'); + f('25385','25386','25387','25388'); + f('25389','25390','25391','25392'); + f('25393','25394','25395','25396'); + f('25397','25398','25399','25400'); + f('25401','25402','25403','25404'); + f('25405','25406','25407','25408'); + f('25409','25410','25411','25412'); + f('25413','25414','25415','25416'); + f('25417','25418','25419','25420'); + f('25421','25422','25423','25424'); + f('25425','25426','25427','25428'); + f('25429','25430','25431','25432'); + f('25433','25434','25435','25436'); + f('25437','25438','25439','25440'); + f('25441','25442','25443','25444'); + f('25445','25446','25447','25448'); + f('25449','25450','25451','25452'); + f('25453','25454','25455','25456'); + f('25457','25458','25459','25460'); + f('25461','25462','25463','25464'); + f('25465','25466','25467','25468'); + f('25469','25470','25471','25472'); + f('25473','25474','25475','25476'); + f('25477','25478','25479','25480'); + f('25481','25482','25483','25484'); + f('25485','25486','25487','25488'); + f('25489','25490','25491','25492'); + f('25493','25494','25495','25496'); + f('25497','25498','25499','25500'); + f('25501','25502','25503','25504'); + f('25505','25506','25507','25508'); + f('25509','25510','25511','25512'); + f('25513','25514','25515','25516'); + f('25517','25518','25519','25520'); + f('25521','25522','25523','25524'); + f('25525','25526','25527','25528'); + f('25529','25530','25531','25532'); + f('25533','25534','25535','25536'); + f('25537','25538','25539','25540'); + f('25541','25542','25543','25544'); + f('25545','25546','25547','25548'); + f('25549','25550','25551','25552'); + f('25553','25554','25555','25556'); + f('25557','25558','25559','25560'); + f('25561','25562','25563','25564'); + f('25565','25566','25567','25568'); + f('25569','25570','25571','25572'); + f('25573','25574','25575','25576'); + f('25577','25578','25579','25580'); + f('25581','25582','25583','25584'); + f('25585','25586','25587','25588'); + f('25589','25590','25591','25592'); + f('25593','25594','25595','25596'); + f('25597','25598','25599','25600'); + f('25601','25602','25603','25604'); + f('25605','25606','25607','25608'); + f('25609','25610','25611','25612'); + f('25613','25614','25615','25616'); + f('25617','25618','25619','25620'); + f('25621','25622','25623','25624'); + f('25625','25626','25627','25628'); + f('25629','25630','25631','25632'); + f('25633','25634','25635','25636'); + f('25637','25638','25639','25640'); + f('25641','25642','25643','25644'); + f('25645','25646','25647','25648'); + f('25649','25650','25651','25652'); + f('25653','25654','25655','25656'); + f('25657','25658','25659','25660'); + f('25661','25662','25663','25664'); + f('25665','25666','25667','25668'); + f('25669','25670','25671','25672'); + f('25673','25674','25675','25676'); + f('25677','25678','25679','25680'); + f('25681','25682','25683','25684'); + f('25685','25686','25687','25688'); + f('25689','25690','25691','25692'); + f('25693','25694','25695','25696'); + f('25697','25698','25699','25700'); + f('25701','25702','25703','25704'); + f('25705','25706','25707','25708'); + f('25709','25710','25711','25712'); + f('25713','25714','25715','25716'); + f('25717','25718','25719','25720'); + f('25721','25722','25723','25724'); + f('25725','25726','25727','25728'); + f('25729','25730','25731','25732'); + f('25733','25734','25735','25736'); + f('25737','25738','25739','25740'); + f('25741','25742','25743','25744'); + f('25745','25746','25747','25748'); + f('25749','25750','25751','25752'); + f('25753','25754','25755','25756'); + f('25757','25758','25759','25760'); + f('25761','25762','25763','25764'); + f('25765','25766','25767','25768'); + f('25769','25770','25771','25772'); + f('25773','25774','25775','25776'); + f('25777','25778','25779','25780'); + f('25781','25782','25783','25784'); + f('25785','25786','25787','25788'); + f('25789','25790','25791','25792'); + f('25793','25794','25795','25796'); + f('25797','25798','25799','25800'); + f('25801','25802','25803','25804'); + f('25805','25806','25807','25808'); + f('25809','25810','25811','25812'); + f('25813','25814','25815','25816'); + f('25817','25818','25819','25820'); + f('25821','25822','25823','25824'); + f('25825','25826','25827','25828'); + f('25829','25830','25831','25832'); + f('25833','25834','25835','25836'); + f('25837','25838','25839','25840'); + f('25841','25842','25843','25844'); + f('25845','25846','25847','25848'); + f('25849','25850','25851','25852'); + f('25853','25854','25855','25856'); + f('25857','25858','25859','25860'); + f('25861','25862','25863','25864'); + f('25865','25866','25867','25868'); + f('25869','25870','25871','25872'); + f('25873','25874','25875','25876'); + f('25877','25878','25879','25880'); + f('25881','25882','25883','25884'); + f('25885','25886','25887','25888'); + f('25889','25890','25891','25892'); + f('25893','25894','25895','25896'); + f('25897','25898','25899','25900'); + f('25901','25902','25903','25904'); + f('25905','25906','25907','25908'); + f('25909','25910','25911','25912'); + f('25913','25914','25915','25916'); + f('25917','25918','25919','25920'); + f('25921','25922','25923','25924'); + f('25925','25926','25927','25928'); + f('25929','25930','25931','25932'); + f('25933','25934','25935','25936'); + f('25937','25938','25939','25940'); + f('25941','25942','25943','25944'); + f('25945','25946','25947','25948'); + f('25949','25950','25951','25952'); + f('25953','25954','25955','25956'); + f('25957','25958','25959','25960'); + f('25961','25962','25963','25964'); + f('25965','25966','25967','25968'); + f('25969','25970','25971','25972'); + f('25973','25974','25975','25976'); + f('25977','25978','25979','25980'); + f('25981','25982','25983','25984'); + f('25985','25986','25987','25988'); + f('25989','25990','25991','25992'); + f('25993','25994','25995','25996'); + f('25997','25998','25999','26000'); + f('26001','26002','26003','26004'); + f('26005','26006','26007','26008'); + f('26009','26010','26011','26012'); + f('26013','26014','26015','26016'); + f('26017','26018','26019','26020'); + f('26021','26022','26023','26024'); + f('26025','26026','26027','26028'); + f('26029','26030','26031','26032'); + f('26033','26034','26035','26036'); + f('26037','26038','26039','26040'); + f('26041','26042','26043','26044'); + f('26045','26046','26047','26048'); + f('26049','26050','26051','26052'); + f('26053','26054','26055','26056'); + f('26057','26058','26059','26060'); + f('26061','26062','26063','26064'); + f('26065','26066','26067','26068'); + f('26069','26070','26071','26072'); + f('26073','26074','26075','26076'); + f('26077','26078','26079','26080'); + f('26081','26082','26083','26084'); + f('26085','26086','26087','26088'); + f('26089','26090','26091','26092'); + f('26093','26094','26095','26096'); + f('26097','26098','26099','26100'); + f('26101','26102','26103','26104'); + f('26105','26106','26107','26108'); + f('26109','26110','26111','26112'); + f('26113','26114','26115','26116'); + f('26117','26118','26119','26120'); + f('26121','26122','26123','26124'); + f('26125','26126','26127','26128'); + f('26129','26130','26131','26132'); + f('26133','26134','26135','26136'); + f('26137','26138','26139','26140'); + f('26141','26142','26143','26144'); + f('26145','26146','26147','26148'); + f('26149','26150','26151','26152'); + f('26153','26154','26155','26156'); + f('26157','26158','26159','26160'); + f('26161','26162','26163','26164'); + f('26165','26166','26167','26168'); + f('26169','26170','26171','26172'); + f('26173','26174','26175','26176'); + f('26177','26178','26179','26180'); + f('26181','26182','26183','26184'); + f('26185','26186','26187','26188'); + f('26189','26190','26191','26192'); + f('26193','26194','26195','26196'); + f('26197','26198','26199','26200'); + f('26201','26202','26203','26204'); + f('26205','26206','26207','26208'); + f('26209','26210','26211','26212'); + f('26213','26214','26215','26216'); + f('26217','26218','26219','26220'); + f('26221','26222','26223','26224'); + f('26225','26226','26227','26228'); + f('26229','26230','26231','26232'); + f('26233','26234','26235','26236'); + f('26237','26238','26239','26240'); + f('26241','26242','26243','26244'); + f('26245','26246','26247','26248'); + f('26249','26250','26251','26252'); + f('26253','26254','26255','26256'); + f('26257','26258','26259','26260'); + f('26261','26262','26263','26264'); + f('26265','26266','26267','26268'); + f('26269','26270','26271','26272'); + f('26273','26274','26275','26276'); + f('26277','26278','26279','26280'); + f('26281','26282','26283','26284'); + f('26285','26286','26287','26288'); + f('26289','26290','26291','26292'); + f('26293','26294','26295','26296'); + f('26297','26298','26299','26300'); + f('26301','26302','26303','26304'); + f('26305','26306','26307','26308'); + f('26309','26310','26311','26312'); + f('26313','26314','26315','26316'); + f('26317','26318','26319','26320'); + f('26321','26322','26323','26324'); + f('26325','26326','26327','26328'); + f('26329','26330','26331','26332'); + f('26333','26334','26335','26336'); + f('26337','26338','26339','26340'); + f('26341','26342','26343','26344'); + f('26345','26346','26347','26348'); + f('26349','26350','26351','26352'); + f('26353','26354','26355','26356'); + f('26357','26358','26359','26360'); + f('26361','26362','26363','26364'); + f('26365','26366','26367','26368'); + f('26369','26370','26371','26372'); + f('26373','26374','26375','26376'); + f('26377','26378','26379','26380'); + f('26381','26382','26383','26384'); + f('26385','26386','26387','26388'); + f('26389','26390','26391','26392'); + f('26393','26394','26395','26396'); + f('26397','26398','26399','26400'); + f('26401','26402','26403','26404'); + f('26405','26406','26407','26408'); + f('26409','26410','26411','26412'); + f('26413','26414','26415','26416'); + f('26417','26418','26419','26420'); + f('26421','26422','26423','26424'); + f('26425','26426','26427','26428'); + f('26429','26430','26431','26432'); + f('26433','26434','26435','26436'); + f('26437','26438','26439','26440'); + f('26441','26442','26443','26444'); + f('26445','26446','26447','26448'); + f('26449','26450','26451','26452'); + f('26453','26454','26455','26456'); + f('26457','26458','26459','26460'); + f('26461','26462','26463','26464'); + f('26465','26466','26467','26468'); + f('26469','26470','26471','26472'); + f('26473','26474','26475','26476'); + f('26477','26478','26479','26480'); + f('26481','26482','26483','26484'); + f('26485','26486','26487','26488'); + f('26489','26490','26491','26492'); + f('26493','26494','26495','26496'); + f('26497','26498','26499','26500'); + f('26501','26502','26503','26504'); + f('26505','26506','26507','26508'); + f('26509','26510','26511','26512'); + f('26513','26514','26515','26516'); + f('26517','26518','26519','26520'); + f('26521','26522','26523','26524'); + f('26525','26526','26527','26528'); + f('26529','26530','26531','26532'); + f('26533','26534','26535','26536'); + f('26537','26538','26539','26540'); + f('26541','26542','26543','26544'); + f('26545','26546','26547','26548'); + f('26549','26550','26551','26552'); + f('26553','26554','26555','26556'); + f('26557','26558','26559','26560'); + f('26561','26562','26563','26564'); + f('26565','26566','26567','26568'); + f('26569','26570','26571','26572'); + f('26573','26574','26575','26576'); + f('26577','26578','26579','26580'); + f('26581','26582','26583','26584'); + f('26585','26586','26587','26588'); + f('26589','26590','26591','26592'); + f('26593','26594','26595','26596'); + f('26597','26598','26599','26600'); + f('26601','26602','26603','26604'); + f('26605','26606','26607','26608'); + f('26609','26610','26611','26612'); + f('26613','26614','26615','26616'); + f('26617','26618','26619','26620'); + f('26621','26622','26623','26624'); + f('26625','26626','26627','26628'); + f('26629','26630','26631','26632'); + f('26633','26634','26635','26636'); + f('26637','26638','26639','26640'); + f('26641','26642','26643','26644'); + f('26645','26646','26647','26648'); + f('26649','26650','26651','26652'); + f('26653','26654','26655','26656'); + f('26657','26658','26659','26660'); + f('26661','26662','26663','26664'); + f('26665','26666','26667','26668'); + f('26669','26670','26671','26672'); + f('26673','26674','26675','26676'); + f('26677','26678','26679','26680'); + f('26681','26682','26683','26684'); + f('26685','26686','26687','26688'); + f('26689','26690','26691','26692'); + f('26693','26694','26695','26696'); + f('26697','26698','26699','26700'); + f('26701','26702','26703','26704'); + f('26705','26706','26707','26708'); + f('26709','26710','26711','26712'); + f('26713','26714','26715','26716'); + f('26717','26718','26719','26720'); + f('26721','26722','26723','26724'); + f('26725','26726','26727','26728'); + f('26729','26730','26731','26732'); + f('26733','26734','26735','26736'); + f('26737','26738','26739','26740'); + f('26741','26742','26743','26744'); + f('26745','26746','26747','26748'); + f('26749','26750','26751','26752'); + f('26753','26754','26755','26756'); + f('26757','26758','26759','26760'); + f('26761','26762','26763','26764'); + f('26765','26766','26767','26768'); + f('26769','26770','26771','26772'); + f('26773','26774','26775','26776'); + f('26777','26778','26779','26780'); + f('26781','26782','26783','26784'); + f('26785','26786','26787','26788'); + f('26789','26790','26791','26792'); + f('26793','26794','26795','26796'); + f('26797','26798','26799','26800'); + f('26801','26802','26803','26804'); + f('26805','26806','26807','26808'); + f('26809','26810','26811','26812'); + f('26813','26814','26815','26816'); + f('26817','26818','26819','26820'); + f('26821','26822','26823','26824'); + f('26825','26826','26827','26828'); + f('26829','26830','26831','26832'); + f('26833','26834','26835','26836'); + f('26837','26838','26839','26840'); + f('26841','26842','26843','26844'); + f('26845','26846','26847','26848'); + f('26849','26850','26851','26852'); + f('26853','26854','26855','26856'); + f('26857','26858','26859','26860'); + f('26861','26862','26863','26864'); + f('26865','26866','26867','26868'); + f('26869','26870','26871','26872'); + f('26873','26874','26875','26876'); + f('26877','26878','26879','26880'); + f('26881','26882','26883','26884'); + f('26885','26886','26887','26888'); + f('26889','26890','26891','26892'); + f('26893','26894','26895','26896'); + f('26897','26898','26899','26900'); + f('26901','26902','26903','26904'); + f('26905','26906','26907','26908'); + f('26909','26910','26911','26912'); + f('26913','26914','26915','26916'); + f('26917','26918','26919','26920'); + f('26921','26922','26923','26924'); + f('26925','26926','26927','26928'); + f('26929','26930','26931','26932'); + f('26933','26934','26935','26936'); + f('26937','26938','26939','26940'); + f('26941','26942','26943','26944'); + f('26945','26946','26947','26948'); + f('26949','26950','26951','26952'); + f('26953','26954','26955','26956'); + f('26957','26958','26959','26960'); + f('26961','26962','26963','26964'); + f('26965','26966','26967','26968'); + f('26969','26970','26971','26972'); + f('26973','26974','26975','26976'); + f('26977','26978','26979','26980'); + f('26981','26982','26983','26984'); + f('26985','26986','26987','26988'); + f('26989','26990','26991','26992'); + f('26993','26994','26995','26996'); + f('26997','26998','26999','27000'); + f('27001','27002','27003','27004'); + f('27005','27006','27007','27008'); + f('27009','27010','27011','27012'); + f('27013','27014','27015','27016'); + f('27017','27018','27019','27020'); + f('27021','27022','27023','27024'); + f('27025','27026','27027','27028'); + f('27029','27030','27031','27032'); + f('27033','27034','27035','27036'); + f('27037','27038','27039','27040'); + f('27041','27042','27043','27044'); + f('27045','27046','27047','27048'); + f('27049','27050','27051','27052'); + f('27053','27054','27055','27056'); + f('27057','27058','27059','27060'); + f('27061','27062','27063','27064'); + f('27065','27066','27067','27068'); + f('27069','27070','27071','27072'); + f('27073','27074','27075','27076'); + f('27077','27078','27079','27080'); + f('27081','27082','27083','27084'); + f('27085','27086','27087','27088'); + f('27089','27090','27091','27092'); + f('27093','27094','27095','27096'); + f('27097','27098','27099','27100'); + f('27101','27102','27103','27104'); + f('27105','27106','27107','27108'); + f('27109','27110','27111','27112'); + f('27113','27114','27115','27116'); + f('27117','27118','27119','27120'); + f('27121','27122','27123','27124'); + f('27125','27126','27127','27128'); + f('27129','27130','27131','27132'); + f('27133','27134','27135','27136'); + f('27137','27138','27139','27140'); + f('27141','27142','27143','27144'); + f('27145','27146','27147','27148'); + f('27149','27150','27151','27152'); + f('27153','27154','27155','27156'); + f('27157','27158','27159','27160'); + f('27161','27162','27163','27164'); + f('27165','27166','27167','27168'); + f('27169','27170','27171','27172'); + f('27173','27174','27175','27176'); + f('27177','27178','27179','27180'); + f('27181','27182','27183','27184'); + f('27185','27186','27187','27188'); + f('27189','27190','27191','27192'); + f('27193','27194','27195','27196'); + f('27197','27198','27199','27200'); + f('27201','27202','27203','27204'); + f('27205','27206','27207','27208'); + f('27209','27210','27211','27212'); + f('27213','27214','27215','27216'); + f('27217','27218','27219','27220'); + f('27221','27222','27223','27224'); + f('27225','27226','27227','27228'); + f('27229','27230','27231','27232'); + f('27233','27234','27235','27236'); + f('27237','27238','27239','27240'); + f('27241','27242','27243','27244'); + f('27245','27246','27247','27248'); + f('27249','27250','27251','27252'); + f('27253','27254','27255','27256'); + f('27257','27258','27259','27260'); + f('27261','27262','27263','27264'); + f('27265','27266','27267','27268'); + f('27269','27270','27271','27272'); + f('27273','27274','27275','27276'); + f('27277','27278','27279','27280'); + f('27281','27282','27283','27284'); + f('27285','27286','27287','27288'); + f('27289','27290','27291','27292'); + f('27293','27294','27295','27296'); + f('27297','27298','27299','27300'); + f('27301','27302','27303','27304'); + f('27305','27306','27307','27308'); + f('27309','27310','27311','27312'); + f('27313','27314','27315','27316'); + f('27317','27318','27319','27320'); + f('27321','27322','27323','27324'); + f('27325','27326','27327','27328'); + f('27329','27330','27331','27332'); + f('27333','27334','27335','27336'); + f('27337','27338','27339','27340'); + f('27341','27342','27343','27344'); + f('27345','27346','27347','27348'); + f('27349','27350','27351','27352'); + f('27353','27354','27355','27356'); + f('27357','27358','27359','27360'); + f('27361','27362','27363','27364'); + f('27365','27366','27367','27368'); + f('27369','27370','27371','27372'); + f('27373','27374','27375','27376'); + f('27377','27378','27379','27380'); + f('27381','27382','27383','27384'); + f('27385','27386','27387','27388'); + f('27389','27390','27391','27392'); + f('27393','27394','27395','27396'); + f('27397','27398','27399','27400'); + f('27401','27402','27403','27404'); + f('27405','27406','27407','27408'); + f('27409','27410','27411','27412'); + f('27413','27414','27415','27416'); + f('27417','27418','27419','27420'); + f('27421','27422','27423','27424'); + f('27425','27426','27427','27428'); + f('27429','27430','27431','27432'); + f('27433','27434','27435','27436'); + f('27437','27438','27439','27440'); + f('27441','27442','27443','27444'); + f('27445','27446','27447','27448'); + f('27449','27450','27451','27452'); + f('27453','27454','27455','27456'); + f('27457','27458','27459','27460'); + f('27461','27462','27463','27464'); + f('27465','27466','27467','27468'); + f('27469','27470','27471','27472'); + f('27473','27474','27475','27476'); + f('27477','27478','27479','27480'); + f('27481','27482','27483','27484'); + f('27485','27486','27487','27488'); + f('27489','27490','27491','27492'); + f('27493','27494','27495','27496'); + f('27497','27498','27499','27500'); + f('27501','27502','27503','27504'); + f('27505','27506','27507','27508'); + f('27509','27510','27511','27512'); + f('27513','27514','27515','27516'); + f('27517','27518','27519','27520'); + f('27521','27522','27523','27524'); + f('27525','27526','27527','27528'); + f('27529','27530','27531','27532'); + f('27533','27534','27535','27536'); + f('27537','27538','27539','27540'); + f('27541','27542','27543','27544'); + f('27545','27546','27547','27548'); + f('27549','27550','27551','27552'); + f('27553','27554','27555','27556'); + f('27557','27558','27559','27560'); + f('27561','27562','27563','27564'); + f('27565','27566','27567','27568'); + f('27569','27570','27571','27572'); + f('27573','27574','27575','27576'); + f('27577','27578','27579','27580'); + f('27581','27582','27583','27584'); + f('27585','27586','27587','27588'); + f('27589','27590','27591','27592'); + f('27593','27594','27595','27596'); + f('27597','27598','27599','27600'); + f('27601','27602','27603','27604'); + f('27605','27606','27607','27608'); + f('27609','27610','27611','27612'); + f('27613','27614','27615','27616'); + f('27617','27618','27619','27620'); + f('27621','27622','27623','27624'); + f('27625','27626','27627','27628'); + f('27629','27630','27631','27632'); + f('27633','27634','27635','27636'); + f('27637','27638','27639','27640'); + f('27641','27642','27643','27644'); + f('27645','27646','27647','27648'); + f('27649','27650','27651','27652'); + f('27653','27654','27655','27656'); + f('27657','27658','27659','27660'); + f('27661','27662','27663','27664'); + f('27665','27666','27667','27668'); + f('27669','27670','27671','27672'); + f('27673','27674','27675','27676'); + f('27677','27678','27679','27680'); + f('27681','27682','27683','27684'); + f('27685','27686','27687','27688'); + f('27689','27690','27691','27692'); + f('27693','27694','27695','27696'); + f('27697','27698','27699','27700'); + f('27701','27702','27703','27704'); + f('27705','27706','27707','27708'); + f('27709','27710','27711','27712'); + f('27713','27714','27715','27716'); + f('27717','27718','27719','27720'); + f('27721','27722','27723','27724'); + f('27725','27726','27727','27728'); + f('27729','27730','27731','27732'); + f('27733','27734','27735','27736'); + f('27737','27738','27739','27740'); + f('27741','27742','27743','27744'); + f('27745','27746','27747','27748'); + f('27749','27750','27751','27752'); + f('27753','27754','27755','27756'); + f('27757','27758','27759','27760'); + f('27761','27762','27763','27764'); + f('27765','27766','27767','27768'); + f('27769','27770','27771','27772'); + f('27773','27774','27775','27776'); + f('27777','27778','27779','27780'); + f('27781','27782','27783','27784'); + f('27785','27786','27787','27788'); + f('27789','27790','27791','27792'); + f('27793','27794','27795','27796'); + f('27797','27798','27799','27800'); + f('27801','27802','27803','27804'); + f('27805','27806','27807','27808'); + f('27809','27810','27811','27812'); + f('27813','27814','27815','27816'); + f('27817','27818','27819','27820'); + f('27821','27822','27823','27824'); + f('27825','27826','27827','27828'); + f('27829','27830','27831','27832'); + f('27833','27834','27835','27836'); + f('27837','27838','27839','27840'); + f('27841','27842','27843','27844'); + f('27845','27846','27847','27848'); + f('27849','27850','27851','27852'); + f('27853','27854','27855','27856'); + f('27857','27858','27859','27860'); + f('27861','27862','27863','27864'); + f('27865','27866','27867','27868'); + f('27869','27870','27871','27872'); + f('27873','27874','27875','27876'); + f('27877','27878','27879','27880'); + f('27881','27882','27883','27884'); + f('27885','27886','27887','27888'); + f('27889','27890','27891','27892'); + f('27893','27894','27895','27896'); + f('27897','27898','27899','27900'); + f('27901','27902','27903','27904'); + f('27905','27906','27907','27908'); + f('27909','27910','27911','27912'); + f('27913','27914','27915','27916'); + f('27917','27918','27919','27920'); + f('27921','27922','27923','27924'); + f('27925','27926','27927','27928'); + f('27929','27930','27931','27932'); + f('27933','27934','27935','27936'); + f('27937','27938','27939','27940'); + f('27941','27942','27943','27944'); + f('27945','27946','27947','27948'); + f('27949','27950','27951','27952'); + f('27953','27954','27955','27956'); + f('27957','27958','27959','27960'); + f('27961','27962','27963','27964'); + f('27965','27966','27967','27968'); + f('27969','27970','27971','27972'); + f('27973','27974','27975','27976'); + f('27977','27978','27979','27980'); + f('27981','27982','27983','27984'); + f('27985','27986','27987','27988'); + f('27989','27990','27991','27992'); + f('27993','27994','27995','27996'); + f('27997','27998','27999','28000'); + f('28001','28002','28003','28004'); + f('28005','28006','28007','28008'); + f('28009','28010','28011','28012'); + f('28013','28014','28015','28016'); + f('28017','28018','28019','28020'); + f('28021','28022','28023','28024'); + f('28025','28026','28027','28028'); + f('28029','28030','28031','28032'); + f('28033','28034','28035','28036'); + f('28037','28038','28039','28040'); + f('28041','28042','28043','28044'); + f('28045','28046','28047','28048'); + f('28049','28050','28051','28052'); + f('28053','28054','28055','28056'); + f('28057','28058','28059','28060'); + f('28061','28062','28063','28064'); + f('28065','28066','28067','28068'); + f('28069','28070','28071','28072'); + f('28073','28074','28075','28076'); + f('28077','28078','28079','28080'); + f('28081','28082','28083','28084'); + f('28085','28086','28087','28088'); + f('28089','28090','28091','28092'); + f('28093','28094','28095','28096'); + f('28097','28098','28099','28100'); + f('28101','28102','28103','28104'); + f('28105','28106','28107','28108'); + f('28109','28110','28111','28112'); + f('28113','28114','28115','28116'); + f('28117','28118','28119','28120'); + f('28121','28122','28123','28124'); + f('28125','28126','28127','28128'); + f('28129','28130','28131','28132'); + f('28133','28134','28135','28136'); + f('28137','28138','28139','28140'); + f('28141','28142','28143','28144'); + f('28145','28146','28147','28148'); + f('28149','28150','28151','28152'); + f('28153','28154','28155','28156'); + f('28157','28158','28159','28160'); + f('28161','28162','28163','28164'); + f('28165','28166','28167','28168'); + f('28169','28170','28171','28172'); + f('28173','28174','28175','28176'); + f('28177','28178','28179','28180'); + f('28181','28182','28183','28184'); + f('28185','28186','28187','28188'); + f('28189','28190','28191','28192'); + f('28193','28194','28195','28196'); + f('28197','28198','28199','28200'); + f('28201','28202','28203','28204'); + f('28205','28206','28207','28208'); + f('28209','28210','28211','28212'); + f('28213','28214','28215','28216'); + f('28217','28218','28219','28220'); + f('28221','28222','28223','28224'); + f('28225','28226','28227','28228'); + f('28229','28230','28231','28232'); + f('28233','28234','28235','28236'); + f('28237','28238','28239','28240'); + f('28241','28242','28243','28244'); + f('28245','28246','28247','28248'); + f('28249','28250','28251','28252'); + f('28253','28254','28255','28256'); + f('28257','28258','28259','28260'); + f('28261','28262','28263','28264'); + f('28265','28266','28267','28268'); + f('28269','28270','28271','28272'); + f('28273','28274','28275','28276'); + f('28277','28278','28279','28280'); + f('28281','28282','28283','28284'); + f('28285','28286','28287','28288'); + f('28289','28290','28291','28292'); + f('28293','28294','28295','28296'); + f('28297','28298','28299','28300'); + f('28301','28302','28303','28304'); + f('28305','28306','28307','28308'); + f('28309','28310','28311','28312'); + f('28313','28314','28315','28316'); + f('28317','28318','28319','28320'); + f('28321','28322','28323','28324'); + f('28325','28326','28327','28328'); + f('28329','28330','28331','28332'); + f('28333','28334','28335','28336'); + f('28337','28338','28339','28340'); + f('28341','28342','28343','28344'); + f('28345','28346','28347','28348'); + f('28349','28350','28351','28352'); + f('28353','28354','28355','28356'); + f('28357','28358','28359','28360'); + f('28361','28362','28363','28364'); + f('28365','28366','28367','28368'); + f('28369','28370','28371','28372'); + f('28373','28374','28375','28376'); + f('28377','28378','28379','28380'); + f('28381','28382','28383','28384'); + f('28385','28386','28387','28388'); + f('28389','28390','28391','28392'); + f('28393','28394','28395','28396'); + f('28397','28398','28399','28400'); + f('28401','28402','28403','28404'); + f('28405','28406','28407','28408'); + f('28409','28410','28411','28412'); + f('28413','28414','28415','28416'); + f('28417','28418','28419','28420'); + f('28421','28422','28423','28424'); + f('28425','28426','28427','28428'); + f('28429','28430','28431','28432'); + f('28433','28434','28435','28436'); + f('28437','28438','28439','28440'); + f('28441','28442','28443','28444'); + f('28445','28446','28447','28448'); + f('28449','28450','28451','28452'); + f('28453','28454','28455','28456'); + f('28457','28458','28459','28460'); + f('28461','28462','28463','28464'); + f('28465','28466','28467','28468'); + f('28469','28470','28471','28472'); + f('28473','28474','28475','28476'); + f('28477','28478','28479','28480'); + f('28481','28482','28483','28484'); + f('28485','28486','28487','28488'); + f('28489','28490','28491','28492'); + f('28493','28494','28495','28496'); + f('28497','28498','28499','28500'); + f('28501','28502','28503','28504'); + f('28505','28506','28507','28508'); + f('28509','28510','28511','28512'); + f('28513','28514','28515','28516'); + f('28517','28518','28519','28520'); + f('28521','28522','28523','28524'); + f('28525','28526','28527','28528'); + f('28529','28530','28531','28532'); + f('28533','28534','28535','28536'); + f('28537','28538','28539','28540'); + f('28541','28542','28543','28544'); + f('28545','28546','28547','28548'); + f('28549','28550','28551','28552'); + f('28553','28554','28555','28556'); + f('28557','28558','28559','28560'); + f('28561','28562','28563','28564'); + f('28565','28566','28567','28568'); + f('28569','28570','28571','28572'); + f('28573','28574','28575','28576'); + f('28577','28578','28579','28580'); + f('28581','28582','28583','28584'); + f('28585','28586','28587','28588'); + f('28589','28590','28591','28592'); + f('28593','28594','28595','28596'); + f('28597','28598','28599','28600'); + f('28601','28602','28603','28604'); + f('28605','28606','28607','28608'); + f('28609','28610','28611','28612'); + f('28613','28614','28615','28616'); + f('28617','28618','28619','28620'); + f('28621','28622','28623','28624'); + f('28625','28626','28627','28628'); + f('28629','28630','28631','28632'); + f('28633','28634','28635','28636'); + f('28637','28638','28639','28640'); + f('28641','28642','28643','28644'); + f('28645','28646','28647','28648'); + f('28649','28650','28651','28652'); + f('28653','28654','28655','28656'); + f('28657','28658','28659','28660'); + f('28661','28662','28663','28664'); + f('28665','28666','28667','28668'); + f('28669','28670','28671','28672'); + f('28673','28674','28675','28676'); + f('28677','28678','28679','28680'); + f('28681','28682','28683','28684'); + f('28685','28686','28687','28688'); + f('28689','28690','28691','28692'); + f('28693','28694','28695','28696'); + f('28697','28698','28699','28700'); + f('28701','28702','28703','28704'); + f('28705','28706','28707','28708'); + f('28709','28710','28711','28712'); + f('28713','28714','28715','28716'); + f('28717','28718','28719','28720'); + f('28721','28722','28723','28724'); + f('28725','28726','28727','28728'); + f('28729','28730','28731','28732'); + f('28733','28734','28735','28736'); + f('28737','28738','28739','28740'); + f('28741','28742','28743','28744'); + f('28745','28746','28747','28748'); + f('28749','28750','28751','28752'); + f('28753','28754','28755','28756'); + f('28757','28758','28759','28760'); + f('28761','28762','28763','28764'); + f('28765','28766','28767','28768'); + f('28769','28770','28771','28772'); + f('28773','28774','28775','28776'); + f('28777','28778','28779','28780'); + f('28781','28782','28783','28784'); + f('28785','28786','28787','28788'); + f('28789','28790','28791','28792'); + f('28793','28794','28795','28796'); + f('28797','28798','28799','28800'); + f('28801','28802','28803','28804'); + f('28805','28806','28807','28808'); + f('28809','28810','28811','28812'); + f('28813','28814','28815','28816'); + f('28817','28818','28819','28820'); + f('28821','28822','28823','28824'); + f('28825','28826','28827','28828'); + f('28829','28830','28831','28832'); + f('28833','28834','28835','28836'); + f('28837','28838','28839','28840'); + f('28841','28842','28843','28844'); + f('28845','28846','28847','28848'); + f('28849','28850','28851','28852'); + f('28853','28854','28855','28856'); + f('28857','28858','28859','28860'); + f('28861','28862','28863','28864'); + f('28865','28866','28867','28868'); + f('28869','28870','28871','28872'); + f('28873','28874','28875','28876'); + f('28877','28878','28879','28880'); + f('28881','28882','28883','28884'); + f('28885','28886','28887','28888'); + f('28889','28890','28891','28892'); + f('28893','28894','28895','28896'); + f('28897','28898','28899','28900'); + f('28901','28902','28903','28904'); + f('28905','28906','28907','28908'); + f('28909','28910','28911','28912'); + f('28913','28914','28915','28916'); + f('28917','28918','28919','28920'); + f('28921','28922','28923','28924'); + f('28925','28926','28927','28928'); + f('28929','28930','28931','28932'); + f('28933','28934','28935','28936'); + f('28937','28938','28939','28940'); + f('28941','28942','28943','28944'); + f('28945','28946','28947','28948'); + f('28949','28950','28951','28952'); + f('28953','28954','28955','28956'); + f('28957','28958','28959','28960'); + f('28961','28962','28963','28964'); + f('28965','28966','28967','28968'); + f('28969','28970','28971','28972'); + f('28973','28974','28975','28976'); + f('28977','28978','28979','28980'); + f('28981','28982','28983','28984'); + f('28985','28986','28987','28988'); + f('28989','28990','28991','28992'); + f('28993','28994','28995','28996'); + f('28997','28998','28999','29000'); + f('29001','29002','29003','29004'); + f('29005','29006','29007','29008'); + f('29009','29010','29011','29012'); + f('29013','29014','29015','29016'); + f('29017','29018','29019','29020'); + f('29021','29022','29023','29024'); + f('29025','29026','29027','29028'); + f('29029','29030','29031','29032'); + f('29033','29034','29035','29036'); + f('29037','29038','29039','29040'); + f('29041','29042','29043','29044'); + f('29045','29046','29047','29048'); + f('29049','29050','29051','29052'); + f('29053','29054','29055','29056'); + f('29057','29058','29059','29060'); + f('29061','29062','29063','29064'); + f('29065','29066','29067','29068'); + f('29069','29070','29071','29072'); + f('29073','29074','29075','29076'); + f('29077','29078','29079','29080'); + f('29081','29082','29083','29084'); + f('29085','29086','29087','29088'); + f('29089','29090','29091','29092'); + f('29093','29094','29095','29096'); + f('29097','29098','29099','29100'); + f('29101','29102','29103','29104'); + f('29105','29106','29107','29108'); + f('29109','29110','29111','29112'); + f('29113','29114','29115','29116'); + f('29117','29118','29119','29120'); + f('29121','29122','29123','29124'); + f('29125','29126','29127','29128'); + f('29129','29130','29131','29132'); + f('29133','29134','29135','29136'); + f('29137','29138','29139','29140'); + f('29141','29142','29143','29144'); + f('29145','29146','29147','29148'); + f('29149','29150','29151','29152'); + f('29153','29154','29155','29156'); + f('29157','29158','29159','29160'); + f('29161','29162','29163','29164'); + f('29165','29166','29167','29168'); + f('29169','29170','29171','29172'); + f('29173','29174','29175','29176'); + f('29177','29178','29179','29180'); + f('29181','29182','29183','29184'); + f('29185','29186','29187','29188'); + f('29189','29190','29191','29192'); + f('29193','29194','29195','29196'); + f('29197','29198','29199','29200'); + f('29201','29202','29203','29204'); + f('29205','29206','29207','29208'); + f('29209','29210','29211','29212'); + f('29213','29214','29215','29216'); + f('29217','29218','29219','29220'); + f('29221','29222','29223','29224'); + f('29225','29226','29227','29228'); + f('29229','29230','29231','29232'); + f('29233','29234','29235','29236'); + f('29237','29238','29239','29240'); + f('29241','29242','29243','29244'); + f('29245','29246','29247','29248'); + f('29249','29250','29251','29252'); + f('29253','29254','29255','29256'); + f('29257','29258','29259','29260'); + f('29261','29262','29263','29264'); + f('29265','29266','29267','29268'); + f('29269','29270','29271','29272'); + f('29273','29274','29275','29276'); + f('29277','29278','29279','29280'); + f('29281','29282','29283','29284'); + f('29285','29286','29287','29288'); + f('29289','29290','29291','29292'); + f('29293','29294','29295','29296'); + f('29297','29298','29299','29300'); + f('29301','29302','29303','29304'); + f('29305','29306','29307','29308'); + f('29309','29310','29311','29312'); + f('29313','29314','29315','29316'); + f('29317','29318','29319','29320'); + f('29321','29322','29323','29324'); + f('29325','29326','29327','29328'); + f('29329','29330','29331','29332'); + f('29333','29334','29335','29336'); + f('29337','29338','29339','29340'); + f('29341','29342','29343','29344'); + f('29345','29346','29347','29348'); + f('29349','29350','29351','29352'); + f('29353','29354','29355','29356'); + f('29357','29358','29359','29360'); + f('29361','29362','29363','29364'); + f('29365','29366','29367','29368'); + f('29369','29370','29371','29372'); + f('29373','29374','29375','29376'); + f('29377','29378','29379','29380'); + f('29381','29382','29383','29384'); + f('29385','29386','29387','29388'); + f('29389','29390','29391','29392'); + f('29393','29394','29395','29396'); + f('29397','29398','29399','29400'); + f('29401','29402','29403','29404'); + f('29405','29406','29407','29408'); + f('29409','29410','29411','29412'); + f('29413','29414','29415','29416'); + f('29417','29418','29419','29420'); + f('29421','29422','29423','29424'); + f('29425','29426','29427','29428'); + f('29429','29430','29431','29432'); + f('29433','29434','29435','29436'); + f('29437','29438','29439','29440'); + f('29441','29442','29443','29444'); + f('29445','29446','29447','29448'); + f('29449','29450','29451','29452'); + f('29453','29454','29455','29456'); + f('29457','29458','29459','29460'); + f('29461','29462','29463','29464'); + f('29465','29466','29467','29468'); + f('29469','29470','29471','29472'); + f('29473','29474','29475','29476'); + f('29477','29478','29479','29480'); + f('29481','29482','29483','29484'); + f('29485','29486','29487','29488'); + f('29489','29490','29491','29492'); + f('29493','29494','29495','29496'); + f('29497','29498','29499','29500'); + f('29501','29502','29503','29504'); + f('29505','29506','29507','29508'); + f('29509','29510','29511','29512'); + f('29513','29514','29515','29516'); + f('29517','29518','29519','29520'); + f('29521','29522','29523','29524'); + f('29525','29526','29527','29528'); + f('29529','29530','29531','29532'); + f('29533','29534','29535','29536'); + f('29537','29538','29539','29540'); + f('29541','29542','29543','29544'); + f('29545','29546','29547','29548'); + f('29549','29550','29551','29552'); + f('29553','29554','29555','29556'); + f('29557','29558','29559','29560'); + f('29561','29562','29563','29564'); + f('29565','29566','29567','29568'); + f('29569','29570','29571','29572'); + f('29573','29574','29575','29576'); + f('29577','29578','29579','29580'); + f('29581','29582','29583','29584'); + f('29585','29586','29587','29588'); + f('29589','29590','29591','29592'); + f('29593','29594','29595','29596'); + f('29597','29598','29599','29600'); + f('29601','29602','29603','29604'); + f('29605','29606','29607','29608'); + f('29609','29610','29611','29612'); + f('29613','29614','29615','29616'); + f('29617','29618','29619','29620'); + f('29621','29622','29623','29624'); + f('29625','29626','29627','29628'); + f('29629','29630','29631','29632'); + f('29633','29634','29635','29636'); + f('29637','29638','29639','29640'); + f('29641','29642','29643','29644'); + f('29645','29646','29647','29648'); + f('29649','29650','29651','29652'); + f('29653','29654','29655','29656'); + f('29657','29658','29659','29660'); + f('29661','29662','29663','29664'); + f('29665','29666','29667','29668'); + f('29669','29670','29671','29672'); + f('29673','29674','29675','29676'); + f('29677','29678','29679','29680'); + f('29681','29682','29683','29684'); + f('29685','29686','29687','29688'); + f('29689','29690','29691','29692'); + f('29693','29694','29695','29696'); + f('29697','29698','29699','29700'); + f('29701','29702','29703','29704'); + f('29705','29706','29707','29708'); + f('29709','29710','29711','29712'); + f('29713','29714','29715','29716'); + f('29717','29718','29719','29720'); + f('29721','29722','29723','29724'); + f('29725','29726','29727','29728'); + f('29729','29730','29731','29732'); + f('29733','29734','29735','29736'); + f('29737','29738','29739','29740'); + f('29741','29742','29743','29744'); + f('29745','29746','29747','29748'); + f('29749','29750','29751','29752'); + f('29753','29754','29755','29756'); + f('29757','29758','29759','29760'); + f('29761','29762','29763','29764'); + f('29765','29766','29767','29768'); + f('29769','29770','29771','29772'); + f('29773','29774','29775','29776'); + f('29777','29778','29779','29780'); + f('29781','29782','29783','29784'); + f('29785','29786','29787','29788'); + f('29789','29790','29791','29792'); + f('29793','29794','29795','29796'); + f('29797','29798','29799','29800'); + f('29801','29802','29803','29804'); + f('29805','29806','29807','29808'); + f('29809','29810','29811','29812'); + f('29813','29814','29815','29816'); + f('29817','29818','29819','29820'); + f('29821','29822','29823','29824'); + f('29825','29826','29827','29828'); + f('29829','29830','29831','29832'); + f('29833','29834','29835','29836'); + f('29837','29838','29839','29840'); + f('29841','29842','29843','29844'); + f('29845','29846','29847','29848'); + f('29849','29850','29851','29852'); + f('29853','29854','29855','29856'); + f('29857','29858','29859','29860'); + f('29861','29862','29863','29864'); + f('29865','29866','29867','29868'); + f('29869','29870','29871','29872'); + f('29873','29874','29875','29876'); + f('29877','29878','29879','29880'); + f('29881','29882','29883','29884'); + f('29885','29886','29887','29888'); + f('29889','29890','29891','29892'); + f('29893','29894','29895','29896'); + f('29897','29898','29899','29900'); + f('29901','29902','29903','29904'); + f('29905','29906','29907','29908'); + f('29909','29910','29911','29912'); + f('29913','29914','29915','29916'); + f('29917','29918','29919','29920'); + f('29921','29922','29923','29924'); + f('29925','29926','29927','29928'); + f('29929','29930','29931','29932'); + f('29933','29934','29935','29936'); + f('29937','29938','29939','29940'); + f('29941','29942','29943','29944'); + f('29945','29946','29947','29948'); + f('29949','29950','29951','29952'); + f('29953','29954','29955','29956'); + f('29957','29958','29959','29960'); + f('29961','29962','29963','29964'); + f('29965','29966','29967','29968'); + f('29969','29970','29971','29972'); + f('29973','29974','29975','29976'); + f('29977','29978','29979','29980'); + f('29981','29982','29983','29984'); + f('29985','29986','29987','29988'); + f('29989','29990','29991','29992'); + f('29993','29994','29995','29996'); + f('29997','29998','29999','30000'); + f('30001','30002','30003','30004'); + f('30005','30006','30007','30008'); + f('30009','30010','30011','30012'); + f('30013','30014','30015','30016'); + f('30017','30018','30019','30020'); + f('30021','30022','30023','30024'); + f('30025','30026','30027','30028'); + f('30029','30030','30031','30032'); + f('30033','30034','30035','30036'); + f('30037','30038','30039','30040'); + f('30041','30042','30043','30044'); + f('30045','30046','30047','30048'); + f('30049','30050','30051','30052'); + f('30053','30054','30055','30056'); + f('30057','30058','30059','30060'); + f('30061','30062','30063','30064'); + f('30065','30066','30067','30068'); + f('30069','30070','30071','30072'); + f('30073','30074','30075','30076'); + f('30077','30078','30079','30080'); + f('30081','30082','30083','30084'); + f('30085','30086','30087','30088'); + f('30089','30090','30091','30092'); + f('30093','30094','30095','30096'); + f('30097','30098','30099','30100'); + f('30101','30102','30103','30104'); + f('30105','30106','30107','30108'); + f('30109','30110','30111','30112'); + f('30113','30114','30115','30116'); + f('30117','30118','30119','30120'); + f('30121','30122','30123','30124'); + f('30125','30126','30127','30128'); + f('30129','30130','30131','30132'); + f('30133','30134','30135','30136'); + f('30137','30138','30139','30140'); + f('30141','30142','30143','30144'); + f('30145','30146','30147','30148'); + f('30149','30150','30151','30152'); + f('30153','30154','30155','30156'); + f('30157','30158','30159','30160'); + f('30161','30162','30163','30164'); + f('30165','30166','30167','30168'); + f('30169','30170','30171','30172'); + f('30173','30174','30175','30176'); + f('30177','30178','30179','30180'); + f('30181','30182','30183','30184'); + f('30185','30186','30187','30188'); + f('30189','30190','30191','30192'); + f('30193','30194','30195','30196'); + f('30197','30198','30199','30200'); + f('30201','30202','30203','30204'); + f('30205','30206','30207','30208'); + f('30209','30210','30211','30212'); + f('30213','30214','30215','30216'); + f('30217','30218','30219','30220'); + f('30221','30222','30223','30224'); + f('30225','30226','30227','30228'); + f('30229','30230','30231','30232'); + f('30233','30234','30235','30236'); + f('30237','30238','30239','30240'); + f('30241','30242','30243','30244'); + f('30245','30246','30247','30248'); + f('30249','30250','30251','30252'); + f('30253','30254','30255','30256'); + f('30257','30258','30259','30260'); + f('30261','30262','30263','30264'); + f('30265','30266','30267','30268'); + f('30269','30270','30271','30272'); + f('30273','30274','30275','30276'); + f('30277','30278','30279','30280'); + f('30281','30282','30283','30284'); + f('30285','30286','30287','30288'); + f('30289','30290','30291','30292'); + f('30293','30294','30295','30296'); + f('30297','30298','30299','30300'); + f('30301','30302','30303','30304'); + f('30305','30306','30307','30308'); + f('30309','30310','30311','30312'); + f('30313','30314','30315','30316'); + f('30317','30318','30319','30320'); + f('30321','30322','30323','30324'); + f('30325','30326','30327','30328'); + f('30329','30330','30331','30332'); + f('30333','30334','30335','30336'); + f('30337','30338','30339','30340'); + f('30341','30342','30343','30344'); + f('30345','30346','30347','30348'); + f('30349','30350','30351','30352'); + f('30353','30354','30355','30356'); + f('30357','30358','30359','30360'); + f('30361','30362','30363','30364'); + f('30365','30366','30367','30368'); + f('30369','30370','30371','30372'); + f('30373','30374','30375','30376'); + f('30377','30378','30379','30380'); + f('30381','30382','30383','30384'); + f('30385','30386','30387','30388'); + f('30389','30390','30391','30392'); + f('30393','30394','30395','30396'); + f('30397','30398','30399','30400'); + f('30401','30402','30403','30404'); + f('30405','30406','30407','30408'); + f('30409','30410','30411','30412'); + f('30413','30414','30415','30416'); + f('30417','30418','30419','30420'); + f('30421','30422','30423','30424'); + f('30425','30426','30427','30428'); + f('30429','30430','30431','30432'); + f('30433','30434','30435','30436'); + f('30437','30438','30439','30440'); + f('30441','30442','30443','30444'); + f('30445','30446','30447','30448'); + f('30449','30450','30451','30452'); + f('30453','30454','30455','30456'); + f('30457','30458','30459','30460'); + f('30461','30462','30463','30464'); + f('30465','30466','30467','30468'); + f('30469','30470','30471','30472'); + f('30473','30474','30475','30476'); + f('30477','30478','30479','30480'); + f('30481','30482','30483','30484'); + f('30485','30486','30487','30488'); + f('30489','30490','30491','30492'); + f('30493','30494','30495','30496'); + f('30497','30498','30499','30500'); + f('30501','30502','30503','30504'); + f('30505','30506','30507','30508'); + f('30509','30510','30511','30512'); + f('30513','30514','30515','30516'); + f('30517','30518','30519','30520'); + f('30521','30522','30523','30524'); + f('30525','30526','30527','30528'); + f('30529','30530','30531','30532'); + f('30533','30534','30535','30536'); + f('30537','30538','30539','30540'); + f('30541','30542','30543','30544'); + f('30545','30546','30547','30548'); + f('30549','30550','30551','30552'); + f('30553','30554','30555','30556'); + f('30557','30558','30559','30560'); + f('30561','30562','30563','30564'); + f('30565','30566','30567','30568'); + f('30569','30570','30571','30572'); + f('30573','30574','30575','30576'); + f('30577','30578','30579','30580'); + f('30581','30582','30583','30584'); + f('30585','30586','30587','30588'); + f('30589','30590','30591','30592'); + f('30593','30594','30595','30596'); + f('30597','30598','30599','30600'); + f('30601','30602','30603','30604'); + f('30605','30606','30607','30608'); + f('30609','30610','30611','30612'); + f('30613','30614','30615','30616'); + f('30617','30618','30619','30620'); + f('30621','30622','30623','30624'); + f('30625','30626','30627','30628'); + f('30629','30630','30631','30632'); + f('30633','30634','30635','30636'); + f('30637','30638','30639','30640'); + f('30641','30642','30643','30644'); + f('30645','30646','30647','30648'); + f('30649','30650','30651','30652'); + f('30653','30654','30655','30656'); + f('30657','30658','30659','30660'); + f('30661','30662','30663','30664'); + f('30665','30666','30667','30668'); + f('30669','30670','30671','30672'); + f('30673','30674','30675','30676'); + f('30677','30678','30679','30680'); + f('30681','30682','30683','30684'); + f('30685','30686','30687','30688'); + f('30689','30690','30691','30692'); + f('30693','30694','30695','30696'); + f('30697','30698','30699','30700'); + f('30701','30702','30703','30704'); + f('30705','30706','30707','30708'); + f('30709','30710','30711','30712'); + f('30713','30714','30715','30716'); + f('30717','30718','30719','30720'); + f('30721','30722','30723','30724'); + f('30725','30726','30727','30728'); + f('30729','30730','30731','30732'); + f('30733','30734','30735','30736'); + f('30737','30738','30739','30740'); + f('30741','30742','30743','30744'); + f('30745','30746','30747','30748'); + f('30749','30750','30751','30752'); + f('30753','30754','30755','30756'); + f('30757','30758','30759','30760'); + f('30761','30762','30763','30764'); + f('30765','30766','30767','30768'); + f('30769','30770','30771','30772'); + f('30773','30774','30775','30776'); + f('30777','30778','30779','30780'); + f('30781','30782','30783','30784'); + f('30785','30786','30787','30788'); + f('30789','30790','30791','30792'); + f('30793','30794','30795','30796'); + f('30797','30798','30799','30800'); + f('30801','30802','30803','30804'); + f('30805','30806','30807','30808'); + f('30809','30810','30811','30812'); + f('30813','30814','30815','30816'); + f('30817','30818','30819','30820'); + f('30821','30822','30823','30824'); + f('30825','30826','30827','30828'); + f('30829','30830','30831','30832'); + f('30833','30834','30835','30836'); + f('30837','30838','30839','30840'); + f('30841','30842','30843','30844'); + f('30845','30846','30847','30848'); + f('30849','30850','30851','30852'); + f('30853','30854','30855','30856'); + f('30857','30858','30859','30860'); + f('30861','30862','30863','30864'); + f('30865','30866','30867','30868'); + f('30869','30870','30871','30872'); + f('30873','30874','30875','30876'); + f('30877','30878','30879','30880'); + f('30881','30882','30883','30884'); + f('30885','30886','30887','30888'); + f('30889','30890','30891','30892'); + f('30893','30894','30895','30896'); + f('30897','30898','30899','30900'); + f('30901','30902','30903','30904'); + f('30905','30906','30907','30908'); + f('30909','30910','30911','30912'); + f('30913','30914','30915','30916'); + f('30917','30918','30919','30920'); + f('30921','30922','30923','30924'); + f('30925','30926','30927','30928'); + f('30929','30930','30931','30932'); + f('30933','30934','30935','30936'); + f('30937','30938','30939','30940'); + f('30941','30942','30943','30944'); + f('30945','30946','30947','30948'); + f('30949','30950','30951','30952'); + f('30953','30954','30955','30956'); + f('30957','30958','30959','30960'); + f('30961','30962','30963','30964'); + f('30965','30966','30967','30968'); + f('30969','30970','30971','30972'); + f('30973','30974','30975','30976'); + f('30977','30978','30979','30980'); + f('30981','30982','30983','30984'); + f('30985','30986','30987','30988'); + f('30989','30990','30991','30992'); + f('30993','30994','30995','30996'); + f('30997','30998','30999','31000'); + f('31001','31002','31003','31004'); + f('31005','31006','31007','31008'); + f('31009','31010','31011','31012'); + f('31013','31014','31015','31016'); + f('31017','31018','31019','31020'); + f('31021','31022','31023','31024'); + f('31025','31026','31027','31028'); + f('31029','31030','31031','31032'); + f('31033','31034','31035','31036'); + f('31037','31038','31039','31040'); + f('31041','31042','31043','31044'); + f('31045','31046','31047','31048'); + f('31049','31050','31051','31052'); + f('31053','31054','31055','31056'); + f('31057','31058','31059','31060'); + f('31061','31062','31063','31064'); + f('31065','31066','31067','31068'); + f('31069','31070','31071','31072'); + f('31073','31074','31075','31076'); + f('31077','31078','31079','31080'); + f('31081','31082','31083','31084'); + f('31085','31086','31087','31088'); + f('31089','31090','31091','31092'); + f('31093','31094','31095','31096'); + f('31097','31098','31099','31100'); + f('31101','31102','31103','31104'); + f('31105','31106','31107','31108'); + f('31109','31110','31111','31112'); + f('31113','31114','31115','31116'); + f('31117','31118','31119','31120'); + f('31121','31122','31123','31124'); + f('31125','31126','31127','31128'); + f('31129','31130','31131','31132'); + f('31133','31134','31135','31136'); + f('31137','31138','31139','31140'); + f('31141','31142','31143','31144'); + f('31145','31146','31147','31148'); + f('31149','31150','31151','31152'); + f('31153','31154','31155','31156'); + f('31157','31158','31159','31160'); + f('31161','31162','31163','31164'); + f('31165','31166','31167','31168'); + f('31169','31170','31171','31172'); + f('31173','31174','31175','31176'); + f('31177','31178','31179','31180'); + f('31181','31182','31183','31184'); + f('31185','31186','31187','31188'); + f('31189','31190','31191','31192'); + f('31193','31194','31195','31196'); + f('31197','31198','31199','31200'); + f('31201','31202','31203','31204'); + f('31205','31206','31207','31208'); + f('31209','31210','31211','31212'); + f('31213','31214','31215','31216'); + f('31217','31218','31219','31220'); + f('31221','31222','31223','31224'); + f('31225','31226','31227','31228'); + f('31229','31230','31231','31232'); + f('31233','31234','31235','31236'); + f('31237','31238','31239','31240'); + f('31241','31242','31243','31244'); + f('31245','31246','31247','31248'); + f('31249','31250','31251','31252'); + f('31253','31254','31255','31256'); + f('31257','31258','31259','31260'); + f('31261','31262','31263','31264'); + f('31265','31266','31267','31268'); + f('31269','31270','31271','31272'); + f('31273','31274','31275','31276'); + f('31277','31278','31279','31280'); + f('31281','31282','31283','31284'); + f('31285','31286','31287','31288'); + f('31289','31290','31291','31292'); + f('31293','31294','31295','31296'); + f('31297','31298','31299','31300'); + f('31301','31302','31303','31304'); + f('31305','31306','31307','31308'); + f('31309','31310','31311','31312'); + f('31313','31314','31315','31316'); + f('31317','31318','31319','31320'); + f('31321','31322','31323','31324'); + f('31325','31326','31327','31328'); + f('31329','31330','31331','31332'); + f('31333','31334','31335','31336'); + f('31337','31338','31339','31340'); + f('31341','31342','31343','31344'); + f('31345','31346','31347','31348'); + f('31349','31350','31351','31352'); + f('31353','31354','31355','31356'); + f('31357','31358','31359','31360'); + f('31361','31362','31363','31364'); + f('31365','31366','31367','31368'); + f('31369','31370','31371','31372'); + f('31373','31374','31375','31376'); + f('31377','31378','31379','31380'); + f('31381','31382','31383','31384'); + f('31385','31386','31387','31388'); + f('31389','31390','31391','31392'); + f('31393','31394','31395','31396'); + f('31397','31398','31399','31400'); + f('31401','31402','31403','31404'); + f('31405','31406','31407','31408'); + f('31409','31410','31411','31412'); + f('31413','31414','31415','31416'); + f('31417','31418','31419','31420'); + f('31421','31422','31423','31424'); + f('31425','31426','31427','31428'); + f('31429','31430','31431','31432'); + f('31433','31434','31435','31436'); + f('31437','31438','31439','31440'); + f('31441','31442','31443','31444'); + f('31445','31446','31447','31448'); + f('31449','31450','31451','31452'); + f('31453','31454','31455','31456'); + f('31457','31458','31459','31460'); + f('31461','31462','31463','31464'); + f('31465','31466','31467','31468'); + f('31469','31470','31471','31472'); + f('31473','31474','31475','31476'); + f('31477','31478','31479','31480'); + f('31481','31482','31483','31484'); + f('31485','31486','31487','31488'); + f('31489','31490','31491','31492'); + f('31493','31494','31495','31496'); + f('31497','31498','31499','31500'); + f('31501','31502','31503','31504'); + f('31505','31506','31507','31508'); + f('31509','31510','31511','31512'); + f('31513','31514','31515','31516'); + f('31517','31518','31519','31520'); + f('31521','31522','31523','31524'); + f('31525','31526','31527','31528'); + f('31529','31530','31531','31532'); + f('31533','31534','31535','31536'); + f('31537','31538','31539','31540'); + f('31541','31542','31543','31544'); + f('31545','31546','31547','31548'); + f('31549','31550','31551','31552'); + f('31553','31554','31555','31556'); + f('31557','31558','31559','31560'); + f('31561','31562','31563','31564'); + f('31565','31566','31567','31568'); + f('31569','31570','31571','31572'); + f('31573','31574','31575','31576'); + f('31577','31578','31579','31580'); + f('31581','31582','31583','31584'); + f('31585','31586','31587','31588'); + f('31589','31590','31591','31592'); + f('31593','31594','31595','31596'); + f('31597','31598','31599','31600'); + f('31601','31602','31603','31604'); + f('31605','31606','31607','31608'); + f('31609','31610','31611','31612'); + f('31613','31614','31615','31616'); + f('31617','31618','31619','31620'); + f('31621','31622','31623','31624'); + f('31625','31626','31627','31628'); + f('31629','31630','31631','31632'); + f('31633','31634','31635','31636'); + f('31637','31638','31639','31640'); + f('31641','31642','31643','31644'); + f('31645','31646','31647','31648'); + f('31649','31650','31651','31652'); + f('31653','31654','31655','31656'); + f('31657','31658','31659','31660'); + f('31661','31662','31663','31664'); + f('31665','31666','31667','31668'); + f('31669','31670','31671','31672'); + f('31673','31674','31675','31676'); + f('31677','31678','31679','31680'); + f('31681','31682','31683','31684'); + f('31685','31686','31687','31688'); + f('31689','31690','31691','31692'); + f('31693','31694','31695','31696'); + f('31697','31698','31699','31700'); + f('31701','31702','31703','31704'); + f('31705','31706','31707','31708'); + f('31709','31710','31711','31712'); + f('31713','31714','31715','31716'); + f('31717','31718','31719','31720'); + f('31721','31722','31723','31724'); + f('31725','31726','31727','31728'); + f('31729','31730','31731','31732'); + f('31733','31734','31735','31736'); + f('31737','31738','31739','31740'); + f('31741','31742','31743','31744'); + f('31745','31746','31747','31748'); + f('31749','31750','31751','31752'); + f('31753','31754','31755','31756'); + f('31757','31758','31759','31760'); + f('31761','31762','31763','31764'); + f('31765','31766','31767','31768'); + f('31769','31770','31771','31772'); + f('31773','31774','31775','31776'); + f('31777','31778','31779','31780'); + f('31781','31782','31783','31784'); + f('31785','31786','31787','31788'); + f('31789','31790','31791','31792'); + f('31793','31794','31795','31796'); + f('31797','31798','31799','31800'); + f('31801','31802','31803','31804'); + f('31805','31806','31807','31808'); + f('31809','31810','31811','31812'); + f('31813','31814','31815','31816'); + f('31817','31818','31819','31820'); + f('31821','31822','31823','31824'); + f('31825','31826','31827','31828'); + f('31829','31830','31831','31832'); + f('31833','31834','31835','31836'); + f('31837','31838','31839','31840'); + f('31841','31842','31843','31844'); + f('31845','31846','31847','31848'); + f('31849','31850','31851','31852'); + f('31853','31854','31855','31856'); + f('31857','31858','31859','31860'); + f('31861','31862','31863','31864'); + f('31865','31866','31867','31868'); + f('31869','31870','31871','31872'); + f('31873','31874','31875','31876'); + f('31877','31878','31879','31880'); + f('31881','31882','31883','31884'); + f('31885','31886','31887','31888'); + f('31889','31890','31891','31892'); + f('31893','31894','31895','31896'); + f('31897','31898','31899','31900'); + f('31901','31902','31903','31904'); + f('31905','31906','31907','31908'); + f('31909','31910','31911','31912'); + f('31913','31914','31915','31916'); + f('31917','31918','31919','31920'); + f('31921','31922','31923','31924'); + f('31925','31926','31927','31928'); + f('31929','31930','31931','31932'); + f('31933','31934','31935','31936'); + f('31937','31938','31939','31940'); + f('31941','31942','31943','31944'); + f('31945','31946','31947','31948'); + f('31949','31950','31951','31952'); + f('31953','31954','31955','31956'); + f('31957','31958','31959','31960'); + f('31961','31962','31963','31964'); + f('31965','31966','31967','31968'); + f('31969','31970','31971','31972'); + f('31973','31974','31975','31976'); + f('31977','31978','31979','31980'); + f('31981','31982','31983','31984'); + f('31985','31986','31987','31988'); + f('31989','31990','31991','31992'); + f('31993','31994','31995','31996'); + f('31997','31998','31999','32000'); + f('32001','32002','32003','32004'); + f('32005','32006','32007','32008'); + f('32009','32010','32011','32012'); + f('32013','32014','32015','32016'); + f('32017','32018','32019','32020'); + f('32021','32022','32023','32024'); + f('32025','32026','32027','32028'); + f('32029','32030','32031','32032'); + f('32033','32034','32035','32036'); + f('32037','32038','32039','32040'); + f('32041','32042','32043','32044'); + f('32045','32046','32047','32048'); + f('32049','32050','32051','32052'); + f('32053','32054','32055','32056'); + f('32057','32058','32059','32060'); + f('32061','32062','32063','32064'); + f('32065','32066','32067','32068'); + f('32069','32070','32071','32072'); + f('32073','32074','32075','32076'); + f('32077','32078','32079','32080'); + f('32081','32082','32083','32084'); + f('32085','32086','32087','32088'); + f('32089','32090','32091','32092'); + f('32093','32094','32095','32096'); + f('32097','32098','32099','32100'); + f('32101','32102','32103','32104'); + f('32105','32106','32107','32108'); + f('32109','32110','32111','32112'); + f('32113','32114','32115','32116'); + f('32117','32118','32119','32120'); + f('32121','32122','32123','32124'); + f('32125','32126','32127','32128'); + f('32129','32130','32131','32132'); + f('32133','32134','32135','32136'); + f('32137','32138','32139','32140'); + f('32141','32142','32143','32144'); + f('32145','32146','32147','32148'); + f('32149','32150','32151','32152'); + f('32153','32154','32155','32156'); + f('32157','32158','32159','32160'); + f('32161','32162','32163','32164'); + f('32165','32166','32167','32168'); + f('32169','32170','32171','32172'); + f('32173','32174','32175','32176'); + f('32177','32178','32179','32180'); + f('32181','32182','32183','32184'); + f('32185','32186','32187','32188'); + f('32189','32190','32191','32192'); + f('32193','32194','32195','32196'); + f('32197','32198','32199','32200'); + f('32201','32202','32203','32204'); + f('32205','32206','32207','32208'); + f('32209','32210','32211','32212'); + f('32213','32214','32215','32216'); + f('32217','32218','32219','32220'); + f('32221','32222','32223','32224'); + f('32225','32226','32227','32228'); + f('32229','32230','32231','32232'); + f('32233','32234','32235','32236'); + f('32237','32238','32239','32240'); + f('32241','32242','32243','32244'); + f('32245','32246','32247','32248'); + f('32249','32250','32251','32252'); + f('32253','32254','32255','32256'); + f('32257','32258','32259','32260'); + f('32261','32262','32263','32264'); + f('32265','32266','32267','32268'); + f('32269','32270','32271','32272'); + f('32273','32274','32275','32276'); + f('32277','32278','32279','32280'); + f('32281','32282','32283','32284'); + f('32285','32286','32287','32288'); + f('32289','32290','32291','32292'); + f('32293','32294','32295','32296'); + f('32297','32298','32299','32300'); + f('32301','32302','32303','32304'); + f('32305','32306','32307','32308'); + f('32309','32310','32311','32312'); + f('32313','32314','32315','32316'); + f('32317','32318','32319','32320'); + f('32321','32322','32323','32324'); + f('32325','32326','32327','32328'); + f('32329','32330','32331','32332'); + f('32333','32334','32335','32336'); + f('32337','32338','32339','32340'); + f('32341','32342','32343','32344'); + f('32345','32346','32347','32348'); + f('32349','32350','32351','32352'); + f('32353','32354','32355','32356'); + f('32357','32358','32359','32360'); + f('32361','32362','32363','32364'); + f('32365','32366','32367','32368'); + f('32369','32370','32371','32372'); + f('32373','32374','32375','32376'); + f('32377','32378','32379','32380'); + f('32381','32382','32383','32384'); + f('32385','32386','32387','32388'); + f('32389','32390','32391','32392'); + f('32393','32394','32395','32396'); + f('32397','32398','32399','32400'); + f('32401','32402','32403','32404'); + f('32405','32406','32407','32408'); + f('32409','32410','32411','32412'); + f('32413','32414','32415','32416'); + f('32417','32418','32419','32420'); + f('32421','32422','32423','32424'); + f('32425','32426','32427','32428'); + f('32429','32430','32431','32432'); + f('32433','32434','32435','32436'); + f('32437','32438','32439','32440'); + f('32441','32442','32443','32444'); + f('32445','32446','32447','32448'); + f('32449','32450','32451','32452'); + f('32453','32454','32455','32456'); + f('32457','32458','32459','32460'); + f('32461','32462','32463','32464'); + f('32465','32466','32467','32468'); + f('32469','32470','32471','32472'); + f('32473','32474','32475','32476'); + f('32477','32478','32479','32480'); + f('32481','32482','32483','32484'); + f('32485','32486','32487','32488'); + f('32489','32490','32491','32492'); + f('32493','32494','32495','32496'); + f('32497','32498','32499','32500'); + f('32501','32502','32503','32504'); + f('32505','32506','32507','32508'); + f('32509','32510','32511','32512'); + f('32513','32514','32515','32516'); + f('32517','32518','32519','32520'); + f('32521','32522','32523','32524'); + f('32525','32526','32527','32528'); + f('32529','32530','32531','32532'); + f('32533','32534','32535','32536'); + f('32537','32538','32539','32540'); + f('32541','32542','32543','32544'); + f('32545','32546','32547','32548'); + f('32549','32550','32551','32552'); + f('32553','32554','32555','32556'); + f('32557','32558','32559','32560'); + f('32561','32562','32563','32564'); + f('32565','32566','32567','32568'); + f('32569','32570','32571','32572'); + f('32573','32574','32575','32576'); + f('32577','32578','32579','32580'); + f('32581','32582','32583','32584'); + f('32585','32586','32587','32588'); + f('32589','32590','32591','32592'); + f('32593','32594','32595','32596'); + f('32597','32598','32599','32600'); + f('32601','32602','32603','32604'); + f('32605','32606','32607','32608'); + f('32609','32610','32611','32612'); + f('32613','32614','32615','32616'); + f('32617','32618','32619','32620'); + f('32621','32622','32623','32624'); + f('32625','32626','32627','32628'); + f('32629','32630','32631','32632'); + f('32633','32634','32635','32636'); + f('32637','32638','32639','32640'); + f('32641','32642','32643','32644'); + f('32645','32646','32647','32648'); + f('32649','32650','32651','32652'); + f('32653','32654','32655','32656'); + f('32657','32658','32659','32660'); + f('32661','32662','32663','32664'); + f('32665','32666','32667','32668'); + f('32669','32670','32671','32672'); + f('32673','32674','32675','32676'); + f('32677','32678','32679','32680'); + f('32681','32682','32683','32684'); + f('32685','32686','32687','32688'); + f('32689','32690','32691','32692'); + f('32693','32694','32695','32696'); + f('32697','32698','32699','32700'); + f('32701','32702','32703','32704'); + f('32705','32706','32707','32708'); + f('32709','32710','32711','32712'); + f('32713','32714','32715','32716'); + f('32717','32718','32719','32720'); + f('32721','32722','32723','32724'); + f('32725','32726','32727','32728'); + f('32729','32730','32731','32732'); + f('32733','32734','32735','32736'); + f('32737','32738','32739','32740'); + f('32741','32742','32743','32744'); + f('32745','32746','32747','32748'); + f('32749','32750','32751','32752'); + f('32753','32754','32755','32756'); + f('32757','32758','32759','32760'); + f('32761','32762','32763','32764'); + f('32765','32766','32767','32768'); + f('32769','32770','32771','32772'); + f('32773','32774','32775','32776'); + f('32777','32778','32779','32780'); + f('32781','32782','32783','32784'); + f('32785','32786','32787','32788'); + f('32789','32790','32791','32792'); + f('32793','32794','32795','32796'); + f('32797','32798','32799','32800'); + f('32801','32802','32803','32804'); + f('32805','32806','32807','32808'); + f('32809','32810','32811','32812'); + f('32813','32814','32815','32816'); + f('32817','32818','32819','32820'); + f('32821','32822','32823','32824'); + f('32825','32826','32827','32828'); + f('32829','32830','32831','32832'); + f('32833','32834','32835','32836'); + f('32837','32838','32839','32840'); + f('32841','32842','32843','32844'); + f('32845','32846','32847','32848'); + f('32849','32850','32851','32852'); + f('32853','32854','32855','32856'); + f('32857','32858','32859','32860'); + f('32861','32862','32863','32864'); + f('32865','32866','32867','32868'); + f('32869','32870','32871','32872'); + f('32873','32874','32875','32876'); + f('32877','32878','32879','32880'); + f('32881','32882','32883','32884'); + f('32885','32886','32887','32888'); + f('32889','32890','32891','32892'); + f('32893','32894','32895','32896'); + f('32897','32898','32899','32900'); + f('32901','32902','32903','32904'); + f('32905','32906','32907','32908'); + f('32909','32910','32911','32912'); + f('32913','32914','32915','32916'); + f('32917','32918','32919','32920'); + f('32921','32922','32923','32924'); + f('32925','32926','32927','32928'); + f('32929','32930','32931','32932'); + f('32933','32934','32935','32936'); + f('32937','32938','32939','32940'); + f('32941','32942','32943','32944'); + f('32945','32946','32947','32948'); + f('32949','32950','32951','32952'); + f('32953','32954','32955','32956'); + f('32957','32958','32959','32960'); + f('32961','32962','32963','32964'); + f('32965','32966','32967','32968'); + f('32969','32970','32971','32972'); + f('32973','32974','32975','32976'); + f('32977','32978','32979','32980'); + f('32981','32982','32983','32984'); + f('32985','32986','32987','32988'); + f('32989','32990','32991','32992'); + f('32993','32994','32995','32996'); + f('32997','32998','32999','33000'); + f('33001','33002','33003','33004'); + f('33005','33006','33007','33008'); + f('33009','33010','33011','33012'); + f('33013','33014','33015','33016'); + f('33017','33018','33019','33020'); + f('33021','33022','33023','33024'); + f('33025','33026','33027','33028'); + f('33029','33030','33031','33032'); + f('33033','33034','33035','33036'); + f('33037','33038','33039','33040'); + f('33041','33042','33043','33044'); + f('33045','33046','33047','33048'); + f('33049','33050','33051','33052'); + f('33053','33054','33055','33056'); + f('33057','33058','33059','33060'); + f('33061','33062','33063','33064'); + f('33065','33066','33067','33068'); + f('33069','33070','33071','33072'); + f('33073','33074','33075','33076'); + f('33077','33078','33079','33080'); + f('33081','33082','33083','33084'); + f('33085','33086','33087','33088'); + f('33089','33090','33091','33092'); + f('33093','33094','33095','33096'); + f('33097','33098','33099','33100'); + f('33101','33102','33103','33104'); + f('33105','33106','33107','33108'); + f('33109','33110','33111','33112'); + f('33113','33114','33115','33116'); + f('33117','33118','33119','33120'); + f('33121','33122','33123','33124'); + f('33125','33126','33127','33128'); + f('33129','33130','33131','33132'); + f('33133','33134','33135','33136'); + f('33137','33138','33139','33140'); + f('33141','33142','33143','33144'); + f('33145','33146','33147','33148'); + f('33149','33150','33151','33152'); + f('33153','33154','33155','33156'); + f('33157','33158','33159','33160'); + f('33161','33162','33163','33164'); + f('33165','33166','33167','33168'); + f('33169','33170','33171','33172'); + f('33173','33174','33175','33176'); + f('33177','33178','33179','33180'); + f('33181','33182','33183','33184'); + f('33185','33186','33187','33188'); + f('33189','33190','33191','33192'); + f('33193','33194','33195','33196'); + f('33197','33198','33199','33200'); + f('33201','33202','33203','33204'); + f('33205','33206','33207','33208'); + f('33209','33210','33211','33212'); + f('33213','33214','33215','33216'); + f('33217','33218','33219','33220'); + f('33221','33222','33223','33224'); + f('33225','33226','33227','33228'); + f('33229','33230','33231','33232'); + f('33233','33234','33235','33236'); + f('33237','33238','33239','33240'); + f('33241','33242','33243','33244'); + f('33245','33246','33247','33248'); + f('33249','33250','33251','33252'); + f('33253','33254','33255','33256'); + f('33257','33258','33259','33260'); + f('33261','33262','33263','33264'); + f('33265','33266','33267','33268'); + f('33269','33270','33271','33272'); + f('33273','33274','33275','33276'); + f('33277','33278','33279','33280'); + f('33281','33282','33283','33284'); + f('33285','33286','33287','33288'); + f('33289','33290','33291','33292'); + f('33293','33294','33295','33296'); + f('33297','33298','33299','33300'); + f('33301','33302','33303','33304'); + f('33305','33306','33307','33308'); + f('33309','33310','33311','33312'); + f('33313','33314','33315','33316'); + f('33317','33318','33319','33320'); + f('33321','33322','33323','33324'); + f('33325','33326','33327','33328'); + f('33329','33330','33331','33332'); + f('33333','33334','33335','33336'); + f('33337','33338','33339','33340'); + f('33341','33342','33343','33344'); + f('33345','33346','33347','33348'); + f('33349','33350','33351','33352'); + f('33353','33354','33355','33356'); + f('33357','33358','33359','33360'); + f('33361','33362','33363','33364'); + f('33365','33366','33367','33368'); + f('33369','33370','33371','33372'); + f('33373','33374','33375','33376'); + f('33377','33378','33379','33380'); + f('33381','33382','33383','33384'); + f('33385','33386','33387','33388'); + f('33389','33390','33391','33392'); + f('33393','33394','33395','33396'); + f('33397','33398','33399','33400'); + f('33401','33402','33403','33404'); + f('33405','33406','33407','33408'); + f('33409','33410','33411','33412'); + f('33413','33414','33415','33416'); + f('33417','33418','33419','33420'); + f('33421','33422','33423','33424'); + f('33425','33426','33427','33428'); + f('33429','33430','33431','33432'); + f('33433','33434','33435','33436'); + f('33437','33438','33439','33440'); + f('33441','33442','33443','33444'); + f('33445','33446','33447','33448'); + f('33449','33450','33451','33452'); + f('33453','33454','33455','33456'); + f('33457','33458','33459','33460'); + f('33461','33462','33463','33464'); + f('33465','33466','33467','33468'); + f('33469','33470','33471','33472'); + f('33473','33474','33475','33476'); + f('33477','33478','33479','33480'); + f('33481','33482','33483','33484'); + f('33485','33486','33487','33488'); + f('33489','33490','33491','33492'); + f('33493','33494','33495','33496'); + f('33497','33498','33499','33500'); + f('33501','33502','33503','33504'); + f('33505','33506','33507','33508'); + f('33509','33510','33511','33512'); + f('33513','33514','33515','33516'); + f('33517','33518','33519','33520'); + f('33521','33522','33523','33524'); + f('33525','33526','33527','33528'); + f('33529','33530','33531','33532'); + f('33533','33534','33535','33536'); + f('33537','33538','33539','33540'); + f('33541','33542','33543','33544'); + f('33545','33546','33547','33548'); + f('33549','33550','33551','33552'); + f('33553','33554','33555','33556'); + f('33557','33558','33559','33560'); + f('33561','33562','33563','33564'); + f('33565','33566','33567','33568'); + f('33569','33570','33571','33572'); + f('33573','33574','33575','33576'); + f('33577','33578','33579','33580'); + f('33581','33582','33583','33584'); + f('33585','33586','33587','33588'); + f('33589','33590','33591','33592'); + f('33593','33594','33595','33596'); + f('33597','33598','33599','33600'); + f('33601','33602','33603','33604'); + f('33605','33606','33607','33608'); + f('33609','33610','33611','33612'); + f('33613','33614','33615','33616'); + f('33617','33618','33619','33620'); + f('33621','33622','33623','33624'); + f('33625','33626','33627','33628'); + f('33629','33630','33631','33632'); + f('33633','33634','33635','33636'); + f('33637','33638','33639','33640'); + f('33641','33642','33643','33644'); + f('33645','33646','33647','33648'); + f('33649','33650','33651','33652'); + f('33653','33654','33655','33656'); + f('33657','33658','33659','33660'); + f('33661','33662','33663','33664'); + f('33665','33666','33667','33668'); + f('33669','33670','33671','33672'); + f('33673','33674','33675','33676'); + f('33677','33678','33679','33680'); + f('33681','33682','33683','33684'); + f('33685','33686','33687','33688'); + f('33689','33690','33691','33692'); + f('33693','33694','33695','33696'); + f('33697','33698','33699','33700'); + f('33701','33702','33703','33704'); + f('33705','33706','33707','33708'); + f('33709','33710','33711','33712'); + f('33713','33714','33715','33716'); + f('33717','33718','33719','33720'); + f('33721','33722','33723','33724'); + f('33725','33726','33727','33728'); + f('33729','33730','33731','33732'); + f('33733','33734','33735','33736'); + f('33737','33738','33739','33740'); + f('33741','33742','33743','33744'); + f('33745','33746','33747','33748'); + f('33749','33750','33751','33752'); + f('33753','33754','33755','33756'); + f('33757','33758','33759','33760'); + f('33761','33762','33763','33764'); + f('33765','33766','33767','33768'); + f('33769','33770','33771','33772'); + f('33773','33774','33775','33776'); + f('33777','33778','33779','33780'); + f('33781','33782','33783','33784'); + f('33785','33786','33787','33788'); + f('33789','33790','33791','33792'); + f('33793','33794','33795','33796'); + f('33797','33798','33799','33800'); + f('33801','33802','33803','33804'); + f('33805','33806','33807','33808'); + f('33809','33810','33811','33812'); + f('33813','33814','33815','33816'); + f('33817','33818','33819','33820'); + f('33821','33822','33823','33824'); + f('33825','33826','33827','33828'); + f('33829','33830','33831','33832'); + f('33833','33834','33835','33836'); + f('33837','33838','33839','33840'); + f('33841','33842','33843','33844'); + f('33845','33846','33847','33848'); + f('33849','33850','33851','33852'); + f('33853','33854','33855','33856'); + f('33857','33858','33859','33860'); + f('33861','33862','33863','33864'); + f('33865','33866','33867','33868'); + f('33869','33870','33871','33872'); + f('33873','33874','33875','33876'); + f('33877','33878','33879','33880'); + f('33881','33882','33883','33884'); + f('33885','33886','33887','33888'); + f('33889','33890','33891','33892'); + f('33893','33894','33895','33896'); + f('33897','33898','33899','33900'); + f('33901','33902','33903','33904'); + f('33905','33906','33907','33908'); + f('33909','33910','33911','33912'); + f('33913','33914','33915','33916'); + f('33917','33918','33919','33920'); + f('33921','33922','33923','33924'); + f('33925','33926','33927','33928'); + f('33929','33930','33931','33932'); + f('33933','33934','33935','33936'); + f('33937','33938','33939','33940'); + f('33941','33942','33943','33944'); + f('33945','33946','33947','33948'); + f('33949','33950','33951','33952'); + f('33953','33954','33955','33956'); + f('33957','33958','33959','33960'); + f('33961','33962','33963','33964'); + f('33965','33966','33967','33968'); + f('33969','33970','33971','33972'); + f('33973','33974','33975','33976'); + f('33977','33978','33979','33980'); + f('33981','33982','33983','33984'); + f('33985','33986','33987','33988'); + f('33989','33990','33991','33992'); + f('33993','33994','33995','33996'); + f('33997','33998','33999','34000'); + f('34001','34002','34003','34004'); + f('34005','34006','34007','34008'); + f('34009','34010','34011','34012'); + f('34013','34014','34015','34016'); + f('34017','34018','34019','34020'); + f('34021','34022','34023','34024'); + f('34025','34026','34027','34028'); + f('34029','34030','34031','34032'); + f('34033','34034','34035','34036'); + f('34037','34038','34039','34040'); + f('34041','34042','34043','34044'); + f('34045','34046','34047','34048'); + f('34049','34050','34051','34052'); + f('34053','34054','34055','34056'); + f('34057','34058','34059','34060'); + f('34061','34062','34063','34064'); + f('34065','34066','34067','34068'); + f('34069','34070','34071','34072'); + f('34073','34074','34075','34076'); + f('34077','34078','34079','34080'); + f('34081','34082','34083','34084'); + f('34085','34086','34087','34088'); + f('34089','34090','34091','34092'); + f('34093','34094','34095','34096'); + f('34097','34098','34099','34100'); + f('34101','34102','34103','34104'); + f('34105','34106','34107','34108'); + f('34109','34110','34111','34112'); + f('34113','34114','34115','34116'); + f('34117','34118','34119','34120'); + f('34121','34122','34123','34124'); + f('34125','34126','34127','34128'); + f('34129','34130','34131','34132'); + f('34133','34134','34135','34136'); + f('34137','34138','34139','34140'); + f('34141','34142','34143','34144'); + f('34145','34146','34147','34148'); + f('34149','34150','34151','34152'); + f('34153','34154','34155','34156'); + f('34157','34158','34159','34160'); + f('34161','34162','34163','34164'); + f('34165','34166','34167','34168'); + f('34169','34170','34171','34172'); + f('34173','34174','34175','34176'); + f('34177','34178','34179','34180'); + f('34181','34182','34183','34184'); + f('34185','34186','34187','34188'); + f('34189','34190','34191','34192'); + f('34193','34194','34195','34196'); + f('34197','34198','34199','34200'); + f('34201','34202','34203','34204'); + f('34205','34206','34207','34208'); + f('34209','34210','34211','34212'); + f('34213','34214','34215','34216'); + f('34217','34218','34219','34220'); + f('34221','34222','34223','34224'); + f('34225','34226','34227','34228'); + f('34229','34230','34231','34232'); + f('34233','34234','34235','34236'); + f('34237','34238','34239','34240'); + f('34241','34242','34243','34244'); + f('34245','34246','34247','34248'); + f('34249','34250','34251','34252'); + f('34253','34254','34255','34256'); + f('34257','34258','34259','34260'); + f('34261','34262','34263','34264'); + f('34265','34266','34267','34268'); + f('34269','34270','34271','34272'); + f('34273','34274','34275','34276'); + f('34277','34278','34279','34280'); + f('34281','34282','34283','34284'); + f('34285','34286','34287','34288'); + f('34289','34290','34291','34292'); + f('34293','34294','34295','34296'); + f('34297','34298','34299','34300'); + f('34301','34302','34303','34304'); + f('34305','34306','34307','34308'); + f('34309','34310','34311','34312'); + f('34313','34314','34315','34316'); + f('34317','34318','34319','34320'); + f('34321','34322','34323','34324'); + f('34325','34326','34327','34328'); + f('34329','34330','34331','34332'); + f('34333','34334','34335','34336'); + f('34337','34338','34339','34340'); + f('34341','34342','34343','34344'); + f('34345','34346','34347','34348'); + f('34349','34350','34351','34352'); + f('34353','34354','34355','34356'); + f('34357','34358','34359','34360'); + f('34361','34362','34363','34364'); + f('34365','34366','34367','34368'); + f('34369','34370','34371','34372'); + f('34373','34374','34375','34376'); + f('34377','34378','34379','34380'); + f('34381','34382','34383','34384'); + f('34385','34386','34387','34388'); + f('34389','34390','34391','34392'); + f('34393','34394','34395','34396'); + f('34397','34398','34399','34400'); + f('34401','34402','34403','34404'); + f('34405','34406','34407','34408'); + f('34409','34410','34411','34412'); + f('34413','34414','34415','34416'); + f('34417','34418','34419','34420'); + f('34421','34422','34423','34424'); + f('34425','34426','34427','34428'); + f('34429','34430','34431','34432'); + f('34433','34434','34435','34436'); + f('34437','34438','34439','34440'); + f('34441','34442','34443','34444'); + f('34445','34446','34447','34448'); + f('34449','34450','34451','34452'); + f('34453','34454','34455','34456'); + f('34457','34458','34459','34460'); + f('34461','34462','34463','34464'); + f('34465','34466','34467','34468'); + f('34469','34470','34471','34472'); + f('34473','34474','34475','34476'); + f('34477','34478','34479','34480'); + f('34481','34482','34483','34484'); + f('34485','34486','34487','34488'); + f('34489','34490','34491','34492'); + f('34493','34494','34495','34496'); + f('34497','34498','34499','34500'); + f('34501','34502','34503','34504'); + f('34505','34506','34507','34508'); + f('34509','34510','34511','34512'); + f('34513','34514','34515','34516'); + f('34517','34518','34519','34520'); + f('34521','34522','34523','34524'); + f('34525','34526','34527','34528'); + f('34529','34530','34531','34532'); + f('34533','34534','34535','34536'); + f('34537','34538','34539','34540'); + f('34541','34542','34543','34544'); + f('34545','34546','34547','34548'); + f('34549','34550','34551','34552'); + f('34553','34554','34555','34556'); + f('34557','34558','34559','34560'); + f('34561','34562','34563','34564'); + f('34565','34566','34567','34568'); + f('34569','34570','34571','34572'); + f('34573','34574','34575','34576'); + f('34577','34578','34579','34580'); + f('34581','34582','34583','34584'); + f('34585','34586','34587','34588'); + f('34589','34590','34591','34592'); + f('34593','34594','34595','34596'); + f('34597','34598','34599','34600'); + f('34601','34602','34603','34604'); + f('34605','34606','34607','34608'); + f('34609','34610','34611','34612'); + f('34613','34614','34615','34616'); + f('34617','34618','34619','34620'); + f('34621','34622','34623','34624'); + f('34625','34626','34627','34628'); + f('34629','34630','34631','34632'); + f('34633','34634','34635','34636'); + f('34637','34638','34639','34640'); + f('34641','34642','34643','34644'); + f('34645','34646','34647','34648'); + f('34649','34650','34651','34652'); + f('34653','34654','34655','34656'); + f('34657','34658','34659','34660'); + f('34661','34662','34663','34664'); + f('34665','34666','34667','34668'); + f('34669','34670','34671','34672'); + f('34673','34674','34675','34676'); + f('34677','34678','34679','34680'); + f('34681','34682','34683','34684'); + f('34685','34686','34687','34688'); + f('34689','34690','34691','34692'); + f('34693','34694','34695','34696'); + f('34697','34698','34699','34700'); + f('34701','34702','34703','34704'); + f('34705','34706','34707','34708'); + f('34709','34710','34711','34712'); + f('34713','34714','34715','34716'); + f('34717','34718','34719','34720'); + f('34721','34722','34723','34724'); + f('34725','34726','34727','34728'); + f('34729','34730','34731','34732'); + f('34733','34734','34735','34736'); + f('34737','34738','34739','34740'); + f('34741','34742','34743','34744'); + f('34745','34746','34747','34748'); + f('34749','34750','34751','34752'); + f('34753','34754','34755','34756'); + f('34757','34758','34759','34760'); + f('34761','34762','34763','34764'); + f('34765','34766','34767','34768'); + f('34769','34770','34771','34772'); + f('34773','34774','34775','34776'); + f('34777','34778','34779','34780'); + f('34781','34782','34783','34784'); + f('34785','34786','34787','34788'); + f('34789','34790','34791','34792'); + f('34793','34794','34795','34796'); + f('34797','34798','34799','34800'); + f('34801','34802','34803','34804'); + f('34805','34806','34807','34808'); + f('34809','34810','34811','34812'); + f('34813','34814','34815','34816'); + f('34817','34818','34819','34820'); + f('34821','34822','34823','34824'); + f('34825','34826','34827','34828'); + f('34829','34830','34831','34832'); + f('34833','34834','34835','34836'); + f('34837','34838','34839','34840'); + f('34841','34842','34843','34844'); + f('34845','34846','34847','34848'); + f('34849','34850','34851','34852'); + f('34853','34854','34855','34856'); + f('34857','34858','34859','34860'); + f('34861','34862','34863','34864'); + f('34865','34866','34867','34868'); + f('34869','34870','34871','34872'); + f('34873','34874','34875','34876'); + f('34877','34878','34879','34880'); + f('34881','34882','34883','34884'); + f('34885','34886','34887','34888'); + f('34889','34890','34891','34892'); + f('34893','34894','34895','34896'); + f('34897','34898','34899','34900'); + f('34901','34902','34903','34904'); + f('34905','34906','34907','34908'); + f('34909','34910','34911','34912'); + f('34913','34914','34915','34916'); + f('34917','34918','34919','34920'); + f('34921','34922','34923','34924'); + f('34925','34926','34927','34928'); + f('34929','34930','34931','34932'); + f('34933','34934','34935','34936'); + f('34937','34938','34939','34940'); + f('34941','34942','34943','34944'); + f('34945','34946','34947','34948'); + f('34949','34950','34951','34952'); + f('34953','34954','34955','34956'); + f('34957','34958','34959','34960'); + f('34961','34962','34963','34964'); + f('34965','34966','34967','34968'); + f('34969','34970','34971','34972'); + f('34973','34974','34975','34976'); + f('34977','34978','34979','34980'); + f('34981','34982','34983','34984'); + f('34985','34986','34987','34988'); + f('34989','34990','34991','34992'); + f('34993','34994','34995','34996'); + f('34997','34998','34999','35000'); + f('35001','35002','35003','35004'); + f('35005','35006','35007','35008'); + f('35009','35010','35011','35012'); + f('35013','35014','35015','35016'); + f('35017','35018','35019','35020'); + f('35021','35022','35023','35024'); + f('35025','35026','35027','35028'); + f('35029','35030','35031','35032'); + f('35033','35034','35035','35036'); + f('35037','35038','35039','35040'); + f('35041','35042','35043','35044'); + f('35045','35046','35047','35048'); + f('35049','35050','35051','35052'); + f('35053','35054','35055','35056'); + f('35057','35058','35059','35060'); + f('35061','35062','35063','35064'); + f('35065','35066','35067','35068'); + f('35069','35070','35071','35072'); + f('35073','35074','35075','35076'); + f('35077','35078','35079','35080'); + f('35081','35082','35083','35084'); + f('35085','35086','35087','35088'); + f('35089','35090','35091','35092'); + f('35093','35094','35095','35096'); + f('35097','35098','35099','35100'); + f('35101','35102','35103','35104'); + f('35105','35106','35107','35108'); + f('35109','35110','35111','35112'); + f('35113','35114','35115','35116'); + f('35117','35118','35119','35120'); + f('35121','35122','35123','35124'); + f('35125','35126','35127','35128'); + f('35129','35130','35131','35132'); + f('35133','35134','35135','35136'); + f('35137','35138','35139','35140'); + f('35141','35142','35143','35144'); + f('35145','35146','35147','35148'); + f('35149','35150','35151','35152'); + f('35153','35154','35155','35156'); + f('35157','35158','35159','35160'); + f('35161','35162','35163','35164'); + f('35165','35166','35167','35168'); + f('35169','35170','35171','35172'); + f('35173','35174','35175','35176'); + f('35177','35178','35179','35180'); + f('35181','35182','35183','35184'); + f('35185','35186','35187','35188'); + f('35189','35190','35191','35192'); + f('35193','35194','35195','35196'); + f('35197','35198','35199','35200'); + f('35201','35202','35203','35204'); + f('35205','35206','35207','35208'); + f('35209','35210','35211','35212'); + f('35213','35214','35215','35216'); + f('35217','35218','35219','35220'); + f('35221','35222','35223','35224'); + f('35225','35226','35227','35228'); + f('35229','35230','35231','35232'); + f('35233','35234','35235','35236'); + f('35237','35238','35239','35240'); + f('35241','35242','35243','35244'); + f('35245','35246','35247','35248'); + f('35249','35250','35251','35252'); + f('35253','35254','35255','35256'); + f('35257','35258','35259','35260'); + f('35261','35262','35263','35264'); + f('35265','35266','35267','35268'); + f('35269','35270','35271','35272'); + f('35273','35274','35275','35276'); + f('35277','35278','35279','35280'); + f('35281','35282','35283','35284'); + f('35285','35286','35287','35288'); + f('35289','35290','35291','35292'); + f('35293','35294','35295','35296'); + f('35297','35298','35299','35300'); + f('35301','35302','35303','35304'); + f('35305','35306','35307','35308'); + f('35309','35310','35311','35312'); + f('35313','35314','35315','35316'); + f('35317','35318','35319','35320'); + f('35321','35322','35323','35324'); + f('35325','35326','35327','35328'); + f('35329','35330','35331','35332'); + f('35333','35334','35335','35336'); + f('35337','35338','35339','35340'); + f('35341','35342','35343','35344'); + f('35345','35346','35347','35348'); + f('35349','35350','35351','35352'); + f('35353','35354','35355','35356'); + f('35357','35358','35359','35360'); + f('35361','35362','35363','35364'); + f('35365','35366','35367','35368'); + f('35369','35370','35371','35372'); + f('35373','35374','35375','35376'); + f('35377','35378','35379','35380'); + f('35381','35382','35383','35384'); + f('35385','35386','35387','35388'); + f('35389','35390','35391','35392'); + f('35393','35394','35395','35396'); + f('35397','35398','35399','35400'); + f('35401','35402','35403','35404'); + f('35405','35406','35407','35408'); + f('35409','35410','35411','35412'); + f('35413','35414','35415','35416'); + f('35417','35418','35419','35420'); + f('35421','35422','35423','35424'); + f('35425','35426','35427','35428'); + f('35429','35430','35431','35432'); + f('35433','35434','35435','35436'); + f('35437','35438','35439','35440'); + f('35441','35442','35443','35444'); + f('35445','35446','35447','35448'); + f('35449','35450','35451','35452'); + f('35453','35454','35455','35456'); + f('35457','35458','35459','35460'); + f('35461','35462','35463','35464'); + f('35465','35466','35467','35468'); + f('35469','35470','35471','35472'); + f('35473','35474','35475','35476'); + f('35477','35478','35479','35480'); + f('35481','35482','35483','35484'); + f('35485','35486','35487','35488'); + f('35489','35490','35491','35492'); + f('35493','35494','35495','35496'); + f('35497','35498','35499','35500'); + f('35501','35502','35503','35504'); + f('35505','35506','35507','35508'); + f('35509','35510','35511','35512'); + f('35513','35514','35515','35516'); + f('35517','35518','35519','35520'); + f('35521','35522','35523','35524'); + f('35525','35526','35527','35528'); + f('35529','35530','35531','35532'); + f('35533','35534','35535','35536'); + f('35537','35538','35539','35540'); + f('35541','35542','35543','35544'); + f('35545','35546','35547','35548'); + f('35549','35550','35551','35552'); + f('35553','35554','35555','35556'); + f('35557','35558','35559','35560'); + f('35561','35562','35563','35564'); + f('35565','35566','35567','35568'); + f('35569','35570','35571','35572'); + f('35573','35574','35575','35576'); + f('35577','35578','35579','35580'); + f('35581','35582','35583','35584'); + f('35585','35586','35587','35588'); + f('35589','35590','35591','35592'); + f('35593','35594','35595','35596'); + f('35597','35598','35599','35600'); + f('35601','35602','35603','35604'); + f('35605','35606','35607','35608'); + f('35609','35610','35611','35612'); + f('35613','35614','35615','35616'); + f('35617','35618','35619','35620'); + f('35621','35622','35623','35624'); + f('35625','35626','35627','35628'); + f('35629','35630','35631','35632'); + f('35633','35634','35635','35636'); + f('35637','35638','35639','35640'); + f('35641','35642','35643','35644'); + f('35645','35646','35647','35648'); + f('35649','35650','35651','35652'); + f('35653','35654','35655','35656'); + f('35657','35658','35659','35660'); + f('35661','35662','35663','35664'); + f('35665','35666','35667','35668'); + f('35669','35670','35671','35672'); + f('35673','35674','35675','35676'); + f('35677','35678','35679','35680'); + f('35681','35682','35683','35684'); + f('35685','35686','35687','35688'); + f('35689','35690','35691','35692'); + f('35693','35694','35695','35696'); + f('35697','35698','35699','35700'); + f('35701','35702','35703','35704'); + f('35705','35706','35707','35708'); + f('35709','35710','35711','35712'); + f('35713','35714','35715','35716'); + f('35717','35718','35719','35720'); + f('35721','35722','35723','35724'); + f('35725','35726','35727','35728'); + f('35729','35730','35731','35732'); + f('35733','35734','35735','35736'); + f('35737','35738','35739','35740'); + f('35741','35742','35743','35744'); + f('35745','35746','35747','35748'); + f('35749','35750','35751','35752'); + f('35753','35754','35755','35756'); + f('35757','35758','35759','35760'); + f('35761','35762','35763','35764'); + f('35765','35766','35767','35768'); + f('35769','35770','35771','35772'); + f('35773','35774','35775','35776'); + f('35777','35778','35779','35780'); + f('35781','35782','35783','35784'); + f('35785','35786','35787','35788'); + f('35789','35790','35791','35792'); + f('35793','35794','35795','35796'); + f('35797','35798','35799','35800'); + f('35801','35802','35803','35804'); + f('35805','35806','35807','35808'); + f('35809','35810','35811','35812'); + f('35813','35814','35815','35816'); + f('35817','35818','35819','35820'); + f('35821','35822','35823','35824'); + f('35825','35826','35827','35828'); + f('35829','35830','35831','35832'); + f('35833','35834','35835','35836'); + f('35837','35838','35839','35840'); + f('35841','35842','35843','35844'); + f('35845','35846','35847','35848'); + f('35849','35850','35851','35852'); + f('35853','35854','35855','35856'); + f('35857','35858','35859','35860'); + f('35861','35862','35863','35864'); + f('35865','35866','35867','35868'); + f('35869','35870','35871','35872'); + f('35873','35874','35875','35876'); + f('35877','35878','35879','35880'); + f('35881','35882','35883','35884'); + f('35885','35886','35887','35888'); + f('35889','35890','35891','35892'); + f('35893','35894','35895','35896'); + f('35897','35898','35899','35900'); + f('35901','35902','35903','35904'); + f('35905','35906','35907','35908'); + f('35909','35910','35911','35912'); + f('35913','35914','35915','35916'); + f('35917','35918','35919','35920'); + f('35921','35922','35923','35924'); + f('35925','35926','35927','35928'); + f('35929','35930','35931','35932'); + f('35933','35934','35935','35936'); + f('35937','35938','35939','35940'); + f('35941','35942','35943','35944'); + f('35945','35946','35947','35948'); + f('35949','35950','35951','35952'); + f('35953','35954','35955','35956'); + f('35957','35958','35959','35960'); + f('35961','35962','35963','35964'); + f('35965','35966','35967','35968'); + f('35969','35970','35971','35972'); + f('35973','35974','35975','35976'); + f('35977','35978','35979','35980'); + f('35981','35982','35983','35984'); + f('35985','35986','35987','35988'); + f('35989','35990','35991','35992'); + f('35993','35994','35995','35996'); + f('35997','35998','35999','36000'); + f('36001','36002','36003','36004'); + f('36005','36006','36007','36008'); + f('36009','36010','36011','36012'); + f('36013','36014','36015','36016'); + f('36017','36018','36019','36020'); + f('36021','36022','36023','36024'); + f('36025','36026','36027','36028'); + f('36029','36030','36031','36032'); + f('36033','36034','36035','36036'); + f('36037','36038','36039','36040'); + f('36041','36042','36043','36044'); + f('36045','36046','36047','36048'); + f('36049','36050','36051','36052'); + f('36053','36054','36055','36056'); + f('36057','36058','36059','36060'); + f('36061','36062','36063','36064'); + f('36065','36066','36067','36068'); + f('36069','36070','36071','36072'); + f('36073','36074','36075','36076'); + f('36077','36078','36079','36080'); + f('36081','36082','36083','36084'); + f('36085','36086','36087','36088'); + f('36089','36090','36091','36092'); + f('36093','36094','36095','36096'); + f('36097','36098','36099','36100'); + f('36101','36102','36103','36104'); + f('36105','36106','36107','36108'); + f('36109','36110','36111','36112'); + f('36113','36114','36115','36116'); + f('36117','36118','36119','36120'); + f('36121','36122','36123','36124'); + f('36125','36126','36127','36128'); + f('36129','36130','36131','36132'); + f('36133','36134','36135','36136'); + f('36137','36138','36139','36140'); + f('36141','36142','36143','36144'); + f('36145','36146','36147','36148'); + f('36149','36150','36151','36152'); + f('36153','36154','36155','36156'); + f('36157','36158','36159','36160'); + f('36161','36162','36163','36164'); + f('36165','36166','36167','36168'); + f('36169','36170','36171','36172'); + f('36173','36174','36175','36176'); + f('36177','36178','36179','36180'); + f('36181','36182','36183','36184'); + f('36185','36186','36187','36188'); + f('36189','36190','36191','36192'); + f('36193','36194','36195','36196'); + f('36197','36198','36199','36200'); + f('36201','36202','36203','36204'); + f('36205','36206','36207','36208'); + f('36209','36210','36211','36212'); + f('36213','36214','36215','36216'); + f('36217','36218','36219','36220'); + f('36221','36222','36223','36224'); + f('36225','36226','36227','36228'); + f('36229','36230','36231','36232'); + f('36233','36234','36235','36236'); + f('36237','36238','36239','36240'); + f('36241','36242','36243','36244'); + f('36245','36246','36247','36248'); + f('36249','36250','36251','36252'); + f('36253','36254','36255','36256'); + f('36257','36258','36259','36260'); + f('36261','36262','36263','36264'); + f('36265','36266','36267','36268'); + f('36269','36270','36271','36272'); + f('36273','36274','36275','36276'); + f('36277','36278','36279','36280'); + f('36281','36282','36283','36284'); + f('36285','36286','36287','36288'); + f('36289','36290','36291','36292'); + f('36293','36294','36295','36296'); + f('36297','36298','36299','36300'); + f('36301','36302','36303','36304'); + f('36305','36306','36307','36308'); + f('36309','36310','36311','36312'); + f('36313','36314','36315','36316'); + f('36317','36318','36319','36320'); + f('36321','36322','36323','36324'); + f('36325','36326','36327','36328'); + f('36329','36330','36331','36332'); + f('36333','36334','36335','36336'); + f('36337','36338','36339','36340'); + f('36341','36342','36343','36344'); + f('36345','36346','36347','36348'); + f('36349','36350','36351','36352'); + f('36353','36354','36355','36356'); + f('36357','36358','36359','36360'); + f('36361','36362','36363','36364'); + f('36365','36366','36367','36368'); + f('36369','36370','36371','36372'); + f('36373','36374','36375','36376'); + f('36377','36378','36379','36380'); + f('36381','36382','36383','36384'); + f('36385','36386','36387','36388'); + f('36389','36390','36391','36392'); + f('36393','36394','36395','36396'); + f('36397','36398','36399','36400'); + f('36401','36402','36403','36404'); + f('36405','36406','36407','36408'); + f('36409','36410','36411','36412'); + f('36413','36414','36415','36416'); + f('36417','36418','36419','36420'); + f('36421','36422','36423','36424'); + f('36425','36426','36427','36428'); + f('36429','36430','36431','36432'); + f('36433','36434','36435','36436'); + f('36437','36438','36439','36440'); + f('36441','36442','36443','36444'); + f('36445','36446','36447','36448'); + f('36449','36450','36451','36452'); + f('36453','36454','36455','36456'); + f('36457','36458','36459','36460'); + f('36461','36462','36463','36464'); + f('36465','36466','36467','36468'); + f('36469','36470','36471','36472'); + f('36473','36474','36475','36476'); + f('36477','36478','36479','36480'); + f('36481','36482','36483','36484'); + f('36485','36486','36487','36488'); + f('36489','36490','36491','36492'); + f('36493','36494','36495','36496'); + f('36497','36498','36499','36500'); + f('36501','36502','36503','36504'); + f('36505','36506','36507','36508'); + f('36509','36510','36511','36512'); + f('36513','36514','36515','36516'); + f('36517','36518','36519','36520'); + f('36521','36522','36523','36524'); + f('36525','36526','36527','36528'); + f('36529','36530','36531','36532'); + f('36533','36534','36535','36536'); + f('36537','36538','36539','36540'); + f('36541','36542','36543','36544'); + f('36545','36546','36547','36548'); + f('36549','36550','36551','36552'); + f('36553','36554','36555','36556'); + f('36557','36558','36559','36560'); + f('36561','36562','36563','36564'); + f('36565','36566','36567','36568'); + f('36569','36570','36571','36572'); + f('36573','36574','36575','36576'); + f('36577','36578','36579','36580'); + f('36581','36582','36583','36584'); + f('36585','36586','36587','36588'); + f('36589','36590','36591','36592'); + f('36593','36594','36595','36596'); + f('36597','36598','36599','36600'); + f('36601','36602','36603','36604'); + f('36605','36606','36607','36608'); + f('36609','36610','36611','36612'); + f('36613','36614','36615','36616'); + f('36617','36618','36619','36620'); + f('36621','36622','36623','36624'); + f('36625','36626','36627','36628'); + f('36629','36630','36631','36632'); + f('36633','36634','36635','36636'); + f('36637','36638','36639','36640'); + f('36641','36642','36643','36644'); + f('36645','36646','36647','36648'); + f('36649','36650','36651','36652'); + f('36653','36654','36655','36656'); + f('36657','36658','36659','36660'); + f('36661','36662','36663','36664'); + f('36665','36666','36667','36668'); + f('36669','36670','36671','36672'); + f('36673','36674','36675','36676'); + f('36677','36678','36679','36680'); + f('36681','36682','36683','36684'); + f('36685','36686','36687','36688'); + f('36689','36690','36691','36692'); + f('36693','36694','36695','36696'); + f('36697','36698','36699','36700'); + f('36701','36702','36703','36704'); + f('36705','36706','36707','36708'); + f('36709','36710','36711','36712'); + f('36713','36714','36715','36716'); + f('36717','36718','36719','36720'); + f('36721','36722','36723','36724'); + f('36725','36726','36727','36728'); + f('36729','36730','36731','36732'); + f('36733','36734','36735','36736'); + f('36737','36738','36739','36740'); + f('36741','36742','36743','36744'); + f('36745','36746','36747','36748'); + f('36749','36750','36751','36752'); + f('36753','36754','36755','36756'); + f('36757','36758','36759','36760'); + f('36761','36762','36763','36764'); + f('36765','36766','36767','36768'); + f('36769','36770','36771','36772'); + f('36773','36774','36775','36776'); + f('36777','36778','36779','36780'); + f('36781','36782','36783','36784'); + f('36785','36786','36787','36788'); + f('36789','36790','36791','36792'); + f('36793','36794','36795','36796'); + f('36797','36798','36799','36800'); + f('36801','36802','36803','36804'); + f('36805','36806','36807','36808'); + f('36809','36810','36811','36812'); + f('36813','36814','36815','36816'); + f('36817','36818','36819','36820'); + f('36821','36822','36823','36824'); + f('36825','36826','36827','36828'); + f('36829','36830','36831','36832'); + f('36833','36834','36835','36836'); + f('36837','36838','36839','36840'); + f('36841','36842','36843','36844'); + f('36845','36846','36847','36848'); + f('36849','36850','36851','36852'); + f('36853','36854','36855','36856'); + f('36857','36858','36859','36860'); + f('36861','36862','36863','36864'); + f('36865','36866','36867','36868'); + f('36869','36870','36871','36872'); + f('36873','36874','36875','36876'); + f('36877','36878','36879','36880'); + f('36881','36882','36883','36884'); + f('36885','36886','36887','36888'); + f('36889','36890','36891','36892'); + f('36893','36894','36895','36896'); + f('36897','36898','36899','36900'); + f('36901','36902','36903','36904'); + f('36905','36906','36907','36908'); + f('36909','36910','36911','36912'); + f('36913','36914','36915','36916'); + f('36917','36918','36919','36920'); + f('36921','36922','36923','36924'); + f('36925','36926','36927','36928'); + f('36929','36930','36931','36932'); + f('36933','36934','36935','36936'); + f('36937','36938','36939','36940'); + f('36941','36942','36943','36944'); + f('36945','36946','36947','36948'); + f('36949','36950','36951','36952'); + f('36953','36954','36955','36956'); + f('36957','36958','36959','36960'); + f('36961','36962','36963','36964'); + f('36965','36966','36967','36968'); + f('36969','36970','36971','36972'); + f('36973','36974','36975','36976'); + f('36977','36978','36979','36980'); + f('36981','36982','36983','36984'); + f('36985','36986','36987','36988'); + f('36989','36990','36991','36992'); + f('36993','36994','36995','36996'); + f('36997','36998','36999','37000'); + f('37001','37002','37003','37004'); + f('37005','37006','37007','37008'); + f('37009','37010','37011','37012'); + f('37013','37014','37015','37016'); + f('37017','37018','37019','37020'); + f('37021','37022','37023','37024'); + f('37025','37026','37027','37028'); + f('37029','37030','37031','37032'); + f('37033','37034','37035','37036'); + f('37037','37038','37039','37040'); + f('37041','37042','37043','37044'); + f('37045','37046','37047','37048'); + f('37049','37050','37051','37052'); + f('37053','37054','37055','37056'); + f('37057','37058','37059','37060'); + f('37061','37062','37063','37064'); + f('37065','37066','37067','37068'); + f('37069','37070','37071','37072'); + f('37073','37074','37075','37076'); + f('37077','37078','37079','37080'); + f('37081','37082','37083','37084'); + f('37085','37086','37087','37088'); + f('37089','37090','37091','37092'); + f('37093','37094','37095','37096'); + f('37097','37098','37099','37100'); + f('37101','37102','37103','37104'); + f('37105','37106','37107','37108'); + f('37109','37110','37111','37112'); + f('37113','37114','37115','37116'); + f('37117','37118','37119','37120'); + f('37121','37122','37123','37124'); + f('37125','37126','37127','37128'); + f('37129','37130','37131','37132'); + f('37133','37134','37135','37136'); + f('37137','37138','37139','37140'); + f('37141','37142','37143','37144'); + f('37145','37146','37147','37148'); + f('37149','37150','37151','37152'); + f('37153','37154','37155','37156'); + f('37157','37158','37159','37160'); + f('37161','37162','37163','37164'); + f('37165','37166','37167','37168'); + f('37169','37170','37171','37172'); + f('37173','37174','37175','37176'); + f('37177','37178','37179','37180'); + f('37181','37182','37183','37184'); + f('37185','37186','37187','37188'); + f('37189','37190','37191','37192'); + f('37193','37194','37195','37196'); + f('37197','37198','37199','37200'); + f('37201','37202','37203','37204'); + f('37205','37206','37207','37208'); + f('37209','37210','37211','37212'); + f('37213','37214','37215','37216'); + f('37217','37218','37219','37220'); + f('37221','37222','37223','37224'); + f('37225','37226','37227','37228'); + f('37229','37230','37231','37232'); + f('37233','37234','37235','37236'); + f('37237','37238','37239','37240'); + f('37241','37242','37243','37244'); + f('37245','37246','37247','37248'); + f('37249','37250','37251','37252'); + f('37253','37254','37255','37256'); + f('37257','37258','37259','37260'); + f('37261','37262','37263','37264'); + f('37265','37266','37267','37268'); + f('37269','37270','37271','37272'); + f('37273','37274','37275','37276'); + f('37277','37278','37279','37280'); + f('37281','37282','37283','37284'); + f('37285','37286','37287','37288'); + f('37289','37290','37291','37292'); + f('37293','37294','37295','37296'); + f('37297','37298','37299','37300'); + f('37301','37302','37303','37304'); + f('37305','37306','37307','37308'); + f('37309','37310','37311','37312'); + f('37313','37314','37315','37316'); + f('37317','37318','37319','37320'); + f('37321','37322','37323','37324'); + f('37325','37326','37327','37328'); + f('37329','37330','37331','37332'); + f('37333','37334','37335','37336'); + f('37337','37338','37339','37340'); + f('37341','37342','37343','37344'); + f('37345','37346','37347','37348'); + f('37349','37350','37351','37352'); + f('37353','37354','37355','37356'); + f('37357','37358','37359','37360'); + f('37361','37362','37363','37364'); + f('37365','37366','37367','37368'); + f('37369','37370','37371','37372'); + f('37373','37374','37375','37376'); + f('37377','37378','37379','37380'); + f('37381','37382','37383','37384'); + f('37385','37386','37387','37388'); + f('37389','37390','37391','37392'); + f('37393','37394','37395','37396'); + f('37397','37398','37399','37400'); + f('37401','37402','37403','37404'); + f('37405','37406','37407','37408'); + f('37409','37410','37411','37412'); + f('37413','37414','37415','37416'); + f('37417','37418','37419','37420'); + f('37421','37422','37423','37424'); + f('37425','37426','37427','37428'); + f('37429','37430','37431','37432'); + f('37433','37434','37435','37436'); + f('37437','37438','37439','37440'); + f('37441','37442','37443','37444'); + f('37445','37446','37447','37448'); + f('37449','37450','37451','37452'); + f('37453','37454','37455','37456'); + f('37457','37458','37459','37460'); + f('37461','37462','37463','37464'); + f('37465','37466','37467','37468'); + f('37469','37470','37471','37472'); + f('37473','37474','37475','37476'); + f('37477','37478','37479','37480'); + f('37481','37482','37483','37484'); + f('37485','37486','37487','37488'); + f('37489','37490','37491','37492'); + f('37493','37494','37495','37496'); + f('37497','37498','37499','37500'); + f('37501','37502','37503','37504'); + f('37505','37506','37507','37508'); + f('37509','37510','37511','37512'); + f('37513','37514','37515','37516'); + f('37517','37518','37519','37520'); + f('37521','37522','37523','37524'); + f('37525','37526','37527','37528'); + f('37529','37530','37531','37532'); + f('37533','37534','37535','37536'); + f('37537','37538','37539','37540'); + f('37541','37542','37543','37544'); + f('37545','37546','37547','37548'); + f('37549','37550','37551','37552'); + f('37553','37554','37555','37556'); + f('37557','37558','37559','37560'); + f('37561','37562','37563','37564'); + f('37565','37566','37567','37568'); + f('37569','37570','37571','37572'); + f('37573','37574','37575','37576'); + f('37577','37578','37579','37580'); + f('37581','37582','37583','37584'); + f('37585','37586','37587','37588'); + f('37589','37590','37591','37592'); + f('37593','37594','37595','37596'); + f('37597','37598','37599','37600'); + f('37601','37602','37603','37604'); + f('37605','37606','37607','37608'); + f('37609','37610','37611','37612'); + f('37613','37614','37615','37616'); + f('37617','37618','37619','37620'); + f('37621','37622','37623','37624'); + f('37625','37626','37627','37628'); + f('37629','37630','37631','37632'); + f('37633','37634','37635','37636'); + f('37637','37638','37639','37640'); + f('37641','37642','37643','37644'); + f('37645','37646','37647','37648'); + f('37649','37650','37651','37652'); + f('37653','37654','37655','37656'); + f('37657','37658','37659','37660'); + f('37661','37662','37663','37664'); + f('37665','37666','37667','37668'); + f('37669','37670','37671','37672'); + f('37673','37674','37675','37676'); + f('37677','37678','37679','37680'); + f('37681','37682','37683','37684'); + f('37685','37686','37687','37688'); + f('37689','37690','37691','37692'); + f('37693','37694','37695','37696'); + f('37697','37698','37699','37700'); + f('37701','37702','37703','37704'); + f('37705','37706','37707','37708'); + f('37709','37710','37711','37712'); + f('37713','37714','37715','37716'); + f('37717','37718','37719','37720'); + f('37721','37722','37723','37724'); + f('37725','37726','37727','37728'); + f('37729','37730','37731','37732'); + f('37733','37734','37735','37736'); + f('37737','37738','37739','37740'); + f('37741','37742','37743','37744'); + f('37745','37746','37747','37748'); + f('37749','37750','37751','37752'); + f('37753','37754','37755','37756'); + f('37757','37758','37759','37760'); + f('37761','37762','37763','37764'); + f('37765','37766','37767','37768'); + f('37769','37770','37771','37772'); + f('37773','37774','37775','37776'); + f('37777','37778','37779','37780'); + f('37781','37782','37783','37784'); + f('37785','37786','37787','37788'); + f('37789','37790','37791','37792'); + f('37793','37794','37795','37796'); + f('37797','37798','37799','37800'); + f('37801','37802','37803','37804'); + f('37805','37806','37807','37808'); + f('37809','37810','37811','37812'); + f('37813','37814','37815','37816'); + f('37817','37818','37819','37820'); + f('37821','37822','37823','37824'); + f('37825','37826','37827','37828'); + f('37829','37830','37831','37832'); + f('37833','37834','37835','37836'); + f('37837','37838','37839','37840'); + f('37841','37842','37843','37844'); + f('37845','37846','37847','37848'); + f('37849','37850','37851','37852'); + f('37853','37854','37855','37856'); + f('37857','37858','37859','37860'); + f('37861','37862','37863','37864'); + f('37865','37866','37867','37868'); + f('37869','37870','37871','37872'); + f('37873','37874','37875','37876'); + f('37877','37878','37879','37880'); + f('37881','37882','37883','37884'); + f('37885','37886','37887','37888'); + f('37889','37890','37891','37892'); + f('37893','37894','37895','37896'); + f('37897','37898','37899','37900'); + f('37901','37902','37903','37904'); + f('37905','37906','37907','37908'); + f('37909','37910','37911','37912'); + f('37913','37914','37915','37916'); + f('37917','37918','37919','37920'); + f('37921','37922','37923','37924'); + f('37925','37926','37927','37928'); + f('37929','37930','37931','37932'); + f('37933','37934','37935','37936'); + f('37937','37938','37939','37940'); + f('37941','37942','37943','37944'); + f('37945','37946','37947','37948'); + f('37949','37950','37951','37952'); + f('37953','37954','37955','37956'); + f('37957','37958','37959','37960'); + f('37961','37962','37963','37964'); + f('37965','37966','37967','37968'); + f('37969','37970','37971','37972'); + f('37973','37974','37975','37976'); + f('37977','37978','37979','37980'); + f('37981','37982','37983','37984'); + f('37985','37986','37987','37988'); + f('37989','37990','37991','37992'); + f('37993','37994','37995','37996'); + f('37997','37998','37999','38000'); + f('38001','38002','38003','38004'); + f('38005','38006','38007','38008'); + f('38009','38010','38011','38012'); + f('38013','38014','38015','38016'); + f('38017','38018','38019','38020'); + f('38021','38022','38023','38024'); + f('38025','38026','38027','38028'); + f('38029','38030','38031','38032'); + f('38033','38034','38035','38036'); + f('38037','38038','38039','38040'); + f('38041','38042','38043','38044'); + f('38045','38046','38047','38048'); + f('38049','38050','38051','38052'); + f('38053','38054','38055','38056'); + f('38057','38058','38059','38060'); + f('38061','38062','38063','38064'); + f('38065','38066','38067','38068'); + f('38069','38070','38071','38072'); + f('38073','38074','38075','38076'); + f('38077','38078','38079','38080'); + f('38081','38082','38083','38084'); + f('38085','38086','38087','38088'); + f('38089','38090','38091','38092'); + f('38093','38094','38095','38096'); + f('38097','38098','38099','38100'); + f('38101','38102','38103','38104'); + f('38105','38106','38107','38108'); + f('38109','38110','38111','38112'); + f('38113','38114','38115','38116'); + f('38117','38118','38119','38120'); + f('38121','38122','38123','38124'); + f('38125','38126','38127','38128'); + f('38129','38130','38131','38132'); + f('38133','38134','38135','38136'); + f('38137','38138','38139','38140'); + f('38141','38142','38143','38144'); + f('38145','38146','38147','38148'); + f('38149','38150','38151','38152'); + f('38153','38154','38155','38156'); + f('38157','38158','38159','38160'); + f('38161','38162','38163','38164'); + f('38165','38166','38167','38168'); + f('38169','38170','38171','38172'); + f('38173','38174','38175','38176'); + f('38177','38178','38179','38180'); + f('38181','38182','38183','38184'); + f('38185','38186','38187','38188'); + f('38189','38190','38191','38192'); + f('38193','38194','38195','38196'); + f('38197','38198','38199','38200'); + f('38201','38202','38203','38204'); + f('38205','38206','38207','38208'); + f('38209','38210','38211','38212'); + f('38213','38214','38215','38216'); + f('38217','38218','38219','38220'); + f('38221','38222','38223','38224'); + f('38225','38226','38227','38228'); + f('38229','38230','38231','38232'); + f('38233','38234','38235','38236'); + f('38237','38238','38239','38240'); + f('38241','38242','38243','38244'); + f('38245','38246','38247','38248'); + f('38249','38250','38251','38252'); + f('38253','38254','38255','38256'); + f('38257','38258','38259','38260'); + f('38261','38262','38263','38264'); + f('38265','38266','38267','38268'); + f('38269','38270','38271','38272'); + f('38273','38274','38275','38276'); + f('38277','38278','38279','38280'); + f('38281','38282','38283','38284'); + f('38285','38286','38287','38288'); + f('38289','38290','38291','38292'); + f('38293','38294','38295','38296'); + f('38297','38298','38299','38300'); + f('38301','38302','38303','38304'); + f('38305','38306','38307','38308'); + f('38309','38310','38311','38312'); + f('38313','38314','38315','38316'); + f('38317','38318','38319','38320'); + f('38321','38322','38323','38324'); + f('38325','38326','38327','38328'); + f('38329','38330','38331','38332'); + f('38333','38334','38335','38336'); + f('38337','38338','38339','38340'); + f('38341','38342','38343','38344'); + f('38345','38346','38347','38348'); + f('38349','38350','38351','38352'); + f('38353','38354','38355','38356'); + f('38357','38358','38359','38360'); + f('38361','38362','38363','38364'); + f('38365','38366','38367','38368'); + f('38369','38370','38371','38372'); + f('38373','38374','38375','38376'); + f('38377','38378','38379','38380'); + f('38381','38382','38383','38384'); + f('38385','38386','38387','38388'); + f('38389','38390','38391','38392'); + f('38393','38394','38395','38396'); + f('38397','38398','38399','38400'); + f('38401','38402','38403','38404'); + f('38405','38406','38407','38408'); + f('38409','38410','38411','38412'); + f('38413','38414','38415','38416'); + f('38417','38418','38419','38420'); + f('38421','38422','38423','38424'); + f('38425','38426','38427','38428'); + f('38429','38430','38431','38432'); + f('38433','38434','38435','38436'); + f('38437','38438','38439','38440'); + f('38441','38442','38443','38444'); + f('38445','38446','38447','38448'); + f('38449','38450','38451','38452'); + f('38453','38454','38455','38456'); + f('38457','38458','38459','38460'); + f('38461','38462','38463','38464'); + f('38465','38466','38467','38468'); + f('38469','38470','38471','38472'); + f('38473','38474','38475','38476'); + f('38477','38478','38479','38480'); + f('38481','38482','38483','38484'); + f('38485','38486','38487','38488'); + f('38489','38490','38491','38492'); + f('38493','38494','38495','38496'); + f('38497','38498','38499','38500'); + f('38501','38502','38503','38504'); + f('38505','38506','38507','38508'); + f('38509','38510','38511','38512'); + f('38513','38514','38515','38516'); + f('38517','38518','38519','38520'); + f('38521','38522','38523','38524'); + f('38525','38526','38527','38528'); + f('38529','38530','38531','38532'); + f('38533','38534','38535','38536'); + f('38537','38538','38539','38540'); + f('38541','38542','38543','38544'); + f('38545','38546','38547','38548'); + f('38549','38550','38551','38552'); + f('38553','38554','38555','38556'); + f('38557','38558','38559','38560'); + f('38561','38562','38563','38564'); + f('38565','38566','38567','38568'); + f('38569','38570','38571','38572'); + f('38573','38574','38575','38576'); + f('38577','38578','38579','38580'); + f('38581','38582','38583','38584'); + f('38585','38586','38587','38588'); + f('38589','38590','38591','38592'); + f('38593','38594','38595','38596'); + f('38597','38598','38599','38600'); + f('38601','38602','38603','38604'); + f('38605','38606','38607','38608'); + f('38609','38610','38611','38612'); + f('38613','38614','38615','38616'); + f('38617','38618','38619','38620'); + f('38621','38622','38623','38624'); + f('38625','38626','38627','38628'); + f('38629','38630','38631','38632'); + f('38633','38634','38635','38636'); + f('38637','38638','38639','38640'); + f('38641','38642','38643','38644'); + f('38645','38646','38647','38648'); + f('38649','38650','38651','38652'); + f('38653','38654','38655','38656'); + f('38657','38658','38659','38660'); + f('38661','38662','38663','38664'); + f('38665','38666','38667','38668'); + f('38669','38670','38671','38672'); + f('38673','38674','38675','38676'); + f('38677','38678','38679','38680'); + f('38681','38682','38683','38684'); + f('38685','38686','38687','38688'); + f('38689','38690','38691','38692'); + f('38693','38694','38695','38696'); + f('38697','38698','38699','38700'); + f('38701','38702','38703','38704'); + f('38705','38706','38707','38708'); + f('38709','38710','38711','38712'); + f('38713','38714','38715','38716'); + f('38717','38718','38719','38720'); + f('38721','38722','38723','38724'); + f('38725','38726','38727','38728'); + f('38729','38730','38731','38732'); + f('38733','38734','38735','38736'); + f('38737','38738','38739','38740'); + f('38741','38742','38743','38744'); + f('38745','38746','38747','38748'); + f('38749','38750','38751','38752'); + f('38753','38754','38755','38756'); + f('38757','38758','38759','38760'); + f('38761','38762','38763','38764'); + f('38765','38766','38767','38768'); + f('38769','38770','38771','38772'); + f('38773','38774','38775','38776'); + f('38777','38778','38779','38780'); + f('38781','38782','38783','38784'); + f('38785','38786','38787','38788'); + f('38789','38790','38791','38792'); + f('38793','38794','38795','38796'); + f('38797','38798','38799','38800'); + f('38801','38802','38803','38804'); + f('38805','38806','38807','38808'); + f('38809','38810','38811','38812'); + f('38813','38814','38815','38816'); + f('38817','38818','38819','38820'); + f('38821','38822','38823','38824'); + f('38825','38826','38827','38828'); + f('38829','38830','38831','38832'); + f('38833','38834','38835','38836'); + f('38837','38838','38839','38840'); + f('38841','38842','38843','38844'); + f('38845','38846','38847','38848'); + f('38849','38850','38851','38852'); + f('38853','38854','38855','38856'); + f('38857','38858','38859','38860'); + f('38861','38862','38863','38864'); + f('38865','38866','38867','38868'); + f('38869','38870','38871','38872'); + f('38873','38874','38875','38876'); + f('38877','38878','38879','38880'); + f('38881','38882','38883','38884'); + f('38885','38886','38887','38888'); + f('38889','38890','38891','38892'); + f('38893','38894','38895','38896'); + f('38897','38898','38899','38900'); + f('38901','38902','38903','38904'); + f('38905','38906','38907','38908'); + f('38909','38910','38911','38912'); + f('38913','38914','38915','38916'); + f('38917','38918','38919','38920'); + f('38921','38922','38923','38924'); + f('38925','38926','38927','38928'); + f('38929','38930','38931','38932'); + f('38933','38934','38935','38936'); + f('38937','38938','38939','38940'); + f('38941','38942','38943','38944'); + f('38945','38946','38947','38948'); + f('38949','38950','38951','38952'); + f('38953','38954','38955','38956'); + f('38957','38958','38959','38960'); + f('38961','38962','38963','38964'); + f('38965','38966','38967','38968'); + f('38969','38970','38971','38972'); + f('38973','38974','38975','38976'); + f('38977','38978','38979','38980'); + f('38981','38982','38983','38984'); + f('38985','38986','38987','38988'); + f('38989','38990','38991','38992'); + f('38993','38994','38995','38996'); + f('38997','38998','38999','39000'); + f('39001','39002','39003','39004'); + f('39005','39006','39007','39008'); + f('39009','39010','39011','39012'); + f('39013','39014','39015','39016'); + f('39017','39018','39019','39020'); + f('39021','39022','39023','39024'); + f('39025','39026','39027','39028'); + f('39029','39030','39031','39032'); + f('39033','39034','39035','39036'); + f('39037','39038','39039','39040'); + f('39041','39042','39043','39044'); + f('39045','39046','39047','39048'); + f('39049','39050','39051','39052'); + f('39053','39054','39055','39056'); + f('39057','39058','39059','39060'); + f('39061','39062','39063','39064'); + f('39065','39066','39067','39068'); + f('39069','39070','39071','39072'); + f('39073','39074','39075','39076'); + f('39077','39078','39079','39080'); + f('39081','39082','39083','39084'); + f('39085','39086','39087','39088'); + f('39089','39090','39091','39092'); + f('39093','39094','39095','39096'); + f('39097','39098','39099','39100'); + f('39101','39102','39103','39104'); + f('39105','39106','39107','39108'); + f('39109','39110','39111','39112'); + f('39113','39114','39115','39116'); + f('39117','39118','39119','39120'); + f('39121','39122','39123','39124'); + f('39125','39126','39127','39128'); + f('39129','39130','39131','39132'); + f('39133','39134','39135','39136'); + f('39137','39138','39139','39140'); + f('39141','39142','39143','39144'); + f('39145','39146','39147','39148'); + f('39149','39150','39151','39152'); + f('39153','39154','39155','39156'); + f('39157','39158','39159','39160'); + f('39161','39162','39163','39164'); + f('39165','39166','39167','39168'); + f('39169','39170','39171','39172'); + f('39173','39174','39175','39176'); + f('39177','39178','39179','39180'); + f('39181','39182','39183','39184'); + f('39185','39186','39187','39188'); + f('39189','39190','39191','39192'); + f('39193','39194','39195','39196'); + f('39197','39198','39199','39200'); + f('39201','39202','39203','39204'); + f('39205','39206','39207','39208'); + f('39209','39210','39211','39212'); + f('39213','39214','39215','39216'); + f('39217','39218','39219','39220'); + f('39221','39222','39223','39224'); + f('39225','39226','39227','39228'); + f('39229','39230','39231','39232'); + f('39233','39234','39235','39236'); + f('39237','39238','39239','39240'); + f('39241','39242','39243','39244'); + f('39245','39246','39247','39248'); + f('39249','39250','39251','39252'); + f('39253','39254','39255','39256'); + f('39257','39258','39259','39260'); + f('39261','39262','39263','39264'); + f('39265','39266','39267','39268'); + f('39269','39270','39271','39272'); + f('39273','39274','39275','39276'); + f('39277','39278','39279','39280'); + f('39281','39282','39283','39284'); + f('39285','39286','39287','39288'); + f('39289','39290','39291','39292'); + f('39293','39294','39295','39296'); + f('39297','39298','39299','39300'); + f('39301','39302','39303','39304'); + f('39305','39306','39307','39308'); + f('39309','39310','39311','39312'); + f('39313','39314','39315','39316'); + f('39317','39318','39319','39320'); + f('39321','39322','39323','39324'); + f('39325','39326','39327','39328'); + f('39329','39330','39331','39332'); + f('39333','39334','39335','39336'); + f('39337','39338','39339','39340'); + f('39341','39342','39343','39344'); + f('39345','39346','39347','39348'); + f('39349','39350','39351','39352'); + f('39353','39354','39355','39356'); + f('39357','39358','39359','39360'); + f('39361','39362','39363','39364'); + f('39365','39366','39367','39368'); + f('39369','39370','39371','39372'); + f('39373','39374','39375','39376'); + f('39377','39378','39379','39380'); + f('39381','39382','39383','39384'); + f('39385','39386','39387','39388'); + f('39389','39390','39391','39392'); + f('39393','39394','39395','39396'); + f('39397','39398','39399','39400'); + f('39401','39402','39403','39404'); + f('39405','39406','39407','39408'); + f('39409','39410','39411','39412'); + f('39413','39414','39415','39416'); + f('39417','39418','39419','39420'); + f('39421','39422','39423','39424'); + f('39425','39426','39427','39428'); + f('39429','39430','39431','39432'); + f('39433','39434','39435','39436'); + f('39437','39438','39439','39440'); + f('39441','39442','39443','39444'); + f('39445','39446','39447','39448'); + f('39449','39450','39451','39452'); + f('39453','39454','39455','39456'); + f('39457','39458','39459','39460'); + f('39461','39462','39463','39464'); + f('39465','39466','39467','39468'); + f('39469','39470','39471','39472'); + f('39473','39474','39475','39476'); + f('39477','39478','39479','39480'); + f('39481','39482','39483','39484'); + f('39485','39486','39487','39488'); + f('39489','39490','39491','39492'); + f('39493','39494','39495','39496'); + f('39497','39498','39499','39500'); + f('39501','39502','39503','39504'); + f('39505','39506','39507','39508'); + f('39509','39510','39511','39512'); + f('39513','39514','39515','39516'); + f('39517','39518','39519','39520'); + f('39521','39522','39523','39524'); + f('39525','39526','39527','39528'); + f('39529','39530','39531','39532'); + f('39533','39534','39535','39536'); + f('39537','39538','39539','39540'); + f('39541','39542','39543','39544'); + f('39545','39546','39547','39548'); + f('39549','39550','39551','39552'); + f('39553','39554','39555','39556'); + f('39557','39558','39559','39560'); + f('39561','39562','39563','39564'); + f('39565','39566','39567','39568'); + f('39569','39570','39571','39572'); + f('39573','39574','39575','39576'); + f('39577','39578','39579','39580'); + f('39581','39582','39583','39584'); + f('39585','39586','39587','39588'); + f('39589','39590','39591','39592'); + f('39593','39594','39595','39596'); + f('39597','39598','39599','39600'); + f('39601','39602','39603','39604'); + f('39605','39606','39607','39608'); + f('39609','39610','39611','39612'); + f('39613','39614','39615','39616'); + f('39617','39618','39619','39620'); + f('39621','39622','39623','39624'); + f('39625','39626','39627','39628'); + f('39629','39630','39631','39632'); + f('39633','39634','39635','39636'); + f('39637','39638','39639','39640'); + f('39641','39642','39643','39644'); + f('39645','39646','39647','39648'); + f('39649','39650','39651','39652'); + f('39653','39654','39655','39656'); + f('39657','39658','39659','39660'); + f('39661','39662','39663','39664'); + f('39665','39666','39667','39668'); + f('39669','39670','39671','39672'); + f('39673','39674','39675','39676'); + f('39677','39678','39679','39680'); + f('39681','39682','39683','39684'); + f('39685','39686','39687','39688'); + f('39689','39690','39691','39692'); + f('39693','39694','39695','39696'); + f('39697','39698','39699','39700'); + f('39701','39702','39703','39704'); + f('39705','39706','39707','39708'); + f('39709','39710','39711','39712'); + f('39713','39714','39715','39716'); + f('39717','39718','39719','39720'); + f('39721','39722','39723','39724'); + f('39725','39726','39727','39728'); + f('39729','39730','39731','39732'); + f('39733','39734','39735','39736'); + f('39737','39738','39739','39740'); + f('39741','39742','39743','39744'); + f('39745','39746','39747','39748'); + f('39749','39750','39751','39752'); + f('39753','39754','39755','39756'); + f('39757','39758','39759','39760'); + f('39761','39762','39763','39764'); + f('39765','39766','39767','39768'); + f('39769','39770','39771','39772'); + f('39773','39774','39775','39776'); + f('39777','39778','39779','39780'); + f('39781','39782','39783','39784'); + f('39785','39786','39787','39788'); + f('39789','39790','39791','39792'); + f('39793','39794','39795','39796'); + f('39797','39798','39799','39800'); + f('39801','39802','39803','39804'); + f('39805','39806','39807','39808'); + f('39809','39810','39811','39812'); + f('39813','39814','39815','39816'); + f('39817','39818','39819','39820'); + f('39821','39822','39823','39824'); + f('39825','39826','39827','39828'); + f('39829','39830','39831','39832'); + f('39833','39834','39835','39836'); + f('39837','39838','39839','39840'); + f('39841','39842','39843','39844'); + f('39845','39846','39847','39848'); + f('39849','39850','39851','39852'); + f('39853','39854','39855','39856'); + f('39857','39858','39859','39860'); + f('39861','39862','39863','39864'); + f('39865','39866','39867','39868'); + f('39869','39870','39871','39872'); + f('39873','39874','39875','39876'); + f('39877','39878','39879','39880'); + f('39881','39882','39883','39884'); + f('39885','39886','39887','39888'); + f('39889','39890','39891','39892'); + f('39893','39894','39895','39896'); + f('39897','39898','39899','39900'); + f('39901','39902','39903','39904'); + f('39905','39906','39907','39908'); + f('39909','39910','39911','39912'); + f('39913','39914','39915','39916'); + f('39917','39918','39919','39920'); + f('39921','39922','39923','39924'); + f('39925','39926','39927','39928'); + f('39929','39930','39931','39932'); + f('39933','39934','39935','39936'); + f('39937','39938','39939','39940'); + f('39941','39942','39943','39944'); + f('39945','39946','39947','39948'); + f('39949','39950','39951','39952'); + f('39953','39954','39955','39956'); + f('39957','39958','39959','39960'); + f('39961','39962','39963','39964'); + f('39965','39966','39967','39968'); + f('39969','39970','39971','39972'); + f('39973','39974','39975','39976'); + f('39977','39978','39979','39980'); + f('39981','39982','39983','39984'); + f('39985','39986','39987','39988'); + f('39989','39990','39991','39992'); + f('39993','39994','39995','39996'); + f('39997','39998','39999','40000'); + f('40001','40002','40003','40004'); + f('40005','40006','40007','40008'); + f('40009','40010','40011','40012'); + f('40013','40014','40015','40016'); + f('40017','40018','40019','40020'); + f('40021','40022','40023','40024'); + f('40025','40026','40027','40028'); + f('40029','40030','40031','40032'); + f('40033','40034','40035','40036'); + f('40037','40038','40039','40040'); + f('40041','40042','40043','40044'); + f('40045','40046','40047','40048'); + f('40049','40050','40051','40052'); + f('40053','40054','40055','40056'); + f('40057','40058','40059','40060'); + f('40061','40062','40063','40064'); + f('40065','40066','40067','40068'); + f('40069','40070','40071','40072'); + f('40073','40074','40075','40076'); + f('40077','40078','40079','40080'); + f('40081','40082','40083','40084'); + f('40085','40086','40087','40088'); + f('40089','40090','40091','40092'); + f('40093','40094','40095','40096'); + f('40097','40098','40099','40100'); + f('40101','40102','40103','40104'); + f('40105','40106','40107','40108'); + f('40109','40110','40111','40112'); + f('40113','40114','40115','40116'); + f('40117','40118','40119','40120'); + f('40121','40122','40123','40124'); + f('40125','40126','40127','40128'); + f('40129','40130','40131','40132'); + f('40133','40134','40135','40136'); + f('40137','40138','40139','40140'); + f('40141','40142','40143','40144'); + f('40145','40146','40147','40148'); + f('40149','40150','40151','40152'); + f('40153','40154','40155','40156'); + f('40157','40158','40159','40160'); + f('40161','40162','40163','40164'); + f('40165','40166','40167','40168'); + f('40169','40170','40171','40172'); + f('40173','40174','40175','40176'); + f('40177','40178','40179','40180'); + f('40181','40182','40183','40184'); + f('40185','40186','40187','40188'); + f('40189','40190','40191','40192'); + f('40193','40194','40195','40196'); + f('40197','40198','40199','40200'); + f('40201','40202','40203','40204'); + f('40205','40206','40207','40208'); + f('40209','40210','40211','40212'); + f('40213','40214','40215','40216'); + f('40217','40218','40219','40220'); + f('40221','40222','40223','40224'); + f('40225','40226','40227','40228'); + f('40229','40230','40231','40232'); + f('40233','40234','40235','40236'); + f('40237','40238','40239','40240'); + f('40241','40242','40243','40244'); + f('40245','40246','40247','40248'); + f('40249','40250','40251','40252'); + f('40253','40254','40255','40256'); + f('40257','40258','40259','40260'); + f('40261','40262','40263','40264'); + f('40265','40266','40267','40268'); + f('40269','40270','40271','40272'); + f('40273','40274','40275','40276'); + f('40277','40278','40279','40280'); + f('40281','40282','40283','40284'); + f('40285','40286','40287','40288'); + f('40289','40290','40291','40292'); + f('40293','40294','40295','40296'); + f('40297','40298','40299','40300'); + f('40301','40302','40303','40304'); + f('40305','40306','40307','40308'); + f('40309','40310','40311','40312'); + f('40313','40314','40315','40316'); + f('40317','40318','40319','40320'); + f('40321','40322','40323','40324'); + f('40325','40326','40327','40328'); + f('40329','40330','40331','40332'); + f('40333','40334','40335','40336'); + f('40337','40338','40339','40340'); + f('40341','40342','40343','40344'); + f('40345','40346','40347','40348'); + f('40349','40350','40351','40352'); + f('40353','40354','40355','40356'); + f('40357','40358','40359','40360'); + f('40361','40362','40363','40364'); + f('40365','40366','40367','40368'); + f('40369','40370','40371','40372'); + f('40373','40374','40375','40376'); + f('40377','40378','40379','40380'); + f('40381','40382','40383','40384'); + f('40385','40386','40387','40388'); + f('40389','40390','40391','40392'); + f('40393','40394','40395','40396'); + f('40397','40398','40399','40400'); + f('40401','40402','40403','40404'); + f('40405','40406','40407','40408'); + f('40409','40410','40411','40412'); + f('40413','40414','40415','40416'); + f('40417','40418','40419','40420'); + f('40421','40422','40423','40424'); + f('40425','40426','40427','40428'); + f('40429','40430','40431','40432'); + f('40433','40434','40435','40436'); + f('40437','40438','40439','40440'); + f('40441','40442','40443','40444'); + f('40445','40446','40447','40448'); + f('40449','40450','40451','40452'); + f('40453','40454','40455','40456'); + f('40457','40458','40459','40460'); + f('40461','40462','40463','40464'); + f('40465','40466','40467','40468'); + f('40469','40470','40471','40472'); + f('40473','40474','40475','40476'); + f('40477','40478','40479','40480'); + f('40481','40482','40483','40484'); + f('40485','40486','40487','40488'); + f('40489','40490','40491','40492'); + f('40493','40494','40495','40496'); + f('40497','40498','40499','40500'); + f('40501','40502','40503','40504'); + f('40505','40506','40507','40508'); + f('40509','40510','40511','40512'); + f('40513','40514','40515','40516'); + f('40517','40518','40519','40520'); + f('40521','40522','40523','40524'); + f('40525','40526','40527','40528'); + f('40529','40530','40531','40532'); + f('40533','40534','40535','40536'); + f('40537','40538','40539','40540'); + f('40541','40542','40543','40544'); + f('40545','40546','40547','40548'); + f('40549','40550','40551','40552'); + f('40553','40554','40555','40556'); + f('40557','40558','40559','40560'); + f('40561','40562','40563','40564'); + f('40565','40566','40567','40568'); + f('40569','40570','40571','40572'); + f('40573','40574','40575','40576'); + f('40577','40578','40579','40580'); + f('40581','40582','40583','40584'); + f('40585','40586','40587','40588'); + f('40589','40590','40591','40592'); + f('40593','40594','40595','40596'); + f('40597','40598','40599','40600'); + f('40601','40602','40603','40604'); + f('40605','40606','40607','40608'); + f('40609','40610','40611','40612'); + f('40613','40614','40615','40616'); + f('40617','40618','40619','40620'); + f('40621','40622','40623','40624'); + f('40625','40626','40627','40628'); + f('40629','40630','40631','40632'); + f('40633','40634','40635','40636'); + f('40637','40638','40639','40640'); + f('40641','40642','40643','40644'); + f('40645','40646','40647','40648'); + f('40649','40650','40651','40652'); + f('40653','40654','40655','40656'); + f('40657','40658','40659','40660'); + f('40661','40662','40663','40664'); + f('40665','40666','40667','40668'); + f('40669','40670','40671','40672'); + f('40673','40674','40675','40676'); + f('40677','40678','40679','40680'); + f('40681','40682','40683','40684'); + f('40685','40686','40687','40688'); + f('40689','40690','40691','40692'); + f('40693','40694','40695','40696'); + f('40697','40698','40699','40700'); + f('40701','40702','40703','40704'); + f('40705','40706','40707','40708'); + f('40709','40710','40711','40712'); + f('40713','40714','40715','40716'); + f('40717','40718','40719','40720'); + f('40721','40722','40723','40724'); + f('40725','40726','40727','40728'); + f('40729','40730','40731','40732'); + f('40733','40734','40735','40736'); + f('40737','40738','40739','40740'); + f('40741','40742','40743','40744'); + f('40745','40746','40747','40748'); + f('40749','40750','40751','40752'); + f('40753','40754','40755','40756'); + f('40757','40758','40759','40760'); + f('40761','40762','40763','40764'); + f('40765','40766','40767','40768'); + f('40769','40770','40771','40772'); + f('40773','40774','40775','40776'); + f('40777','40778','40779','40780'); + f('40781','40782','40783','40784'); + f('40785','40786','40787','40788'); + f('40789','40790','40791','40792'); + f('40793','40794','40795','40796'); + f('40797','40798','40799','40800'); + f('40801','40802','40803','40804'); + f('40805','40806','40807','40808'); + f('40809','40810','40811','40812'); + f('40813','40814','40815','40816'); + f('40817','40818','40819','40820'); + f('40821','40822','40823','40824'); + f('40825','40826','40827','40828'); + f('40829','40830','40831','40832'); + f('40833','40834','40835','40836'); + f('40837','40838','40839','40840'); + f('40841','40842','40843','40844'); + f('40845','40846','40847','40848'); + f('40849','40850','40851','40852'); + f('40853','40854','40855','40856'); + f('40857','40858','40859','40860'); + f('40861','40862','40863','40864'); + f('40865','40866','40867','40868'); + f('40869','40870','40871','40872'); + f('40873','40874','40875','40876'); + f('40877','40878','40879','40880'); + f('40881','40882','40883','40884'); + f('40885','40886','40887','40888'); + f('40889','40890','40891','40892'); + f('40893','40894','40895','40896'); + f('40897','40898','40899','40900'); + f('40901','40902','40903','40904'); + f('40905','40906','40907','40908'); + f('40909','40910','40911','40912'); + f('40913','40914','40915','40916'); + f('40917','40918','40919','40920'); + f('40921','40922','40923','40924'); + f('40925','40926','40927','40928'); + f('40929','40930','40931','40932'); + f('40933','40934','40935','40936'); + f('40937','40938','40939','40940'); + f('40941','40942','40943','40944'); + f('40945','40946','40947','40948'); + f('40949','40950','40951','40952'); + f('40953','40954','40955','40956'); + f('40957','40958','40959','40960'); + f('40961','40962','40963','40964'); + f('40965','40966','40967','40968'); + f('40969','40970','40971','40972'); + f('40973','40974','40975','40976'); + f('40977','40978','40979','40980'); + f('40981','40982','40983','40984'); + f('40985','40986','40987','40988'); + f('40989','40990','40991','40992'); + f('40993','40994','40995','40996'); + f('40997','40998','40999','41000'); + f('41001','41002','41003','41004'); + f('41005','41006','41007','41008'); + f('41009','41010','41011','41012'); + f('41013','41014','41015','41016'); + f('41017','41018','41019','41020'); + f('41021','41022','41023','41024'); + f('41025','41026','41027','41028'); + f('41029','41030','41031','41032'); + f('41033','41034','41035','41036'); + f('41037','41038','41039','41040'); + f('41041','41042','41043','41044'); + f('41045','41046','41047','41048'); + f('41049','41050','41051','41052'); + f('41053','41054','41055','41056'); + f('41057','41058','41059','41060'); + f('41061','41062','41063','41064'); + f('41065','41066','41067','41068'); + f('41069','41070','41071','41072'); + f('41073','41074','41075','41076'); + f('41077','41078','41079','41080'); + f('41081','41082','41083','41084'); + f('41085','41086','41087','41088'); + f('41089','41090','41091','41092'); + f('41093','41094','41095','41096'); + f('41097','41098','41099','41100'); + f('41101','41102','41103','41104'); + f('41105','41106','41107','41108'); + f('41109','41110','41111','41112'); + f('41113','41114','41115','41116'); + f('41117','41118','41119','41120'); + f('41121','41122','41123','41124'); + f('41125','41126','41127','41128'); + f('41129','41130','41131','41132'); + f('41133','41134','41135','41136'); + f('41137','41138','41139','41140'); + f('41141','41142','41143','41144'); + f('41145','41146','41147','41148'); + f('41149','41150','41151','41152'); + f('41153','41154','41155','41156'); + f('41157','41158','41159','41160'); + f('41161','41162','41163','41164'); + f('41165','41166','41167','41168'); + f('41169','41170','41171','41172'); + f('41173','41174','41175','41176'); + f('41177','41178','41179','41180'); + f('41181','41182','41183','41184'); + f('41185','41186','41187','41188'); + f('41189','41190','41191','41192'); + f('41193','41194','41195','41196'); + f('41197','41198','41199','41200'); + f('41201','41202','41203','41204'); + f('41205','41206','41207','41208'); + f('41209','41210','41211','41212'); + f('41213','41214','41215','41216'); + f('41217','41218','41219','41220'); + f('41221','41222','41223','41224'); + f('41225','41226','41227','41228'); + f('41229','41230','41231','41232'); + f('41233','41234','41235','41236'); + f('41237','41238','41239','41240'); + f('41241','41242','41243','41244'); + f('41245','41246','41247','41248'); + f('41249','41250','41251','41252'); + f('41253','41254','41255','41256'); + f('41257','41258','41259','41260'); + f('41261','41262','41263','41264'); + f('41265','41266','41267','41268'); + f('41269','41270','41271','41272'); + f('41273','41274','41275','41276'); + f('41277','41278','41279','41280'); + f('41281','41282','41283','41284'); + f('41285','41286','41287','41288'); + f('41289','41290','41291','41292'); + f('41293','41294','41295','41296'); + f('41297','41298','41299','41300'); + f('41301','41302','41303','41304'); + f('41305','41306','41307','41308'); + f('41309','41310','41311','41312'); + f('41313','41314','41315','41316'); + f('41317','41318','41319','41320'); + f('41321','41322','41323','41324'); + f('41325','41326','41327','41328'); + f('41329','41330','41331','41332'); + f('41333','41334','41335','41336'); + f('41337','41338','41339','41340'); + f('41341','41342','41343','41344'); + f('41345','41346','41347','41348'); + f('41349','41350','41351','41352'); + f('41353','41354','41355','41356'); + f('41357','41358','41359','41360'); + f('41361','41362','41363','41364'); + f('41365','41366','41367','41368'); + f('41369','41370','41371','41372'); + f('41373','41374','41375','41376'); + f('41377','41378','41379','41380'); + f('41381','41382','41383','41384'); + f('41385','41386','41387','41388'); + f('41389','41390','41391','41392'); + f('41393','41394','41395','41396'); + f('41397','41398','41399','41400'); + f('41401','41402','41403','41404'); + f('41405','41406','41407','41408'); + f('41409','41410','41411','41412'); + f('41413','41414','41415','41416'); + f('41417','41418','41419','41420'); + f('41421','41422','41423','41424'); + f('41425','41426','41427','41428'); + f('41429','41430','41431','41432'); + f('41433','41434','41435','41436'); + f('41437','41438','41439','41440'); + f('41441','41442','41443','41444'); + f('41445','41446','41447','41448'); + f('41449','41450','41451','41452'); + f('41453','41454','41455','41456'); + f('41457','41458','41459','41460'); + f('41461','41462','41463','41464'); + f('41465','41466','41467','41468'); + f('41469','41470','41471','41472'); + f('41473','41474','41475','41476'); + f('41477','41478','41479','41480'); + f('41481','41482','41483','41484'); + f('41485','41486','41487','41488'); + f('41489','41490','41491','41492'); + f('41493','41494','41495','41496'); + f('41497','41498','41499','41500'); + f('41501','41502','41503','41504'); + f('41505','41506','41507','41508'); + f('41509','41510','41511','41512'); + f('41513','41514','41515','41516'); + f('41517','41518','41519','41520'); + f('41521','41522','41523','41524'); + f('41525','41526','41527','41528'); + f('41529','41530','41531','41532'); + f('41533','41534','41535','41536'); + f('41537','41538','41539','41540'); + f('41541','41542','41543','41544'); + f('41545','41546','41547','41548'); + f('41549','41550','41551','41552'); + f('41553','41554','41555','41556'); + f('41557','41558','41559','41560'); + f('41561','41562','41563','41564'); + f('41565','41566','41567','41568'); + f('41569','41570','41571','41572'); + f('41573','41574','41575','41576'); + f('41577','41578','41579','41580'); + f('41581','41582','41583','41584'); + f('41585','41586','41587','41588'); + f('41589','41590','41591','41592'); + f('41593','41594','41595','41596'); + f('41597','41598','41599','41600'); + f('41601','41602','41603','41604'); + f('41605','41606','41607','41608'); + f('41609','41610','41611','41612'); + f('41613','41614','41615','41616'); + f('41617','41618','41619','41620'); + f('41621','41622','41623','41624'); + f('41625','41626','41627','41628'); + f('41629','41630','41631','41632'); + f('41633','41634','41635','41636'); + f('41637','41638','41639','41640'); + f('41641','41642','41643','41644'); + f('41645','41646','41647','41648'); + f('41649','41650','41651','41652'); + f('41653','41654','41655','41656'); + f('41657','41658','41659','41660'); + f('41661','41662','41663','41664'); + f('41665','41666','41667','41668'); + f('41669','41670','41671','41672'); + f('41673','41674','41675','41676'); + f('41677','41678','41679','41680'); + f('41681','41682','41683','41684'); + f('41685','41686','41687','41688'); + f('41689','41690','41691','41692'); + f('41693','41694','41695','41696'); + f('41697','41698','41699','41700'); + f('41701','41702','41703','41704'); + f('41705','41706','41707','41708'); + f('41709','41710','41711','41712'); + f('41713','41714','41715','41716'); + f('41717','41718','41719','41720'); + f('41721','41722','41723','41724'); + f('41725','41726','41727','41728'); + f('41729','41730','41731','41732'); + f('41733','41734','41735','41736'); + f('41737','41738','41739','41740'); + f('41741','41742','41743','41744'); + f('41745','41746','41747','41748'); + f('41749','41750','41751','41752'); + f('41753','41754','41755','41756'); + f('41757','41758','41759','41760'); + f('41761','41762','41763','41764'); + f('41765','41766','41767','41768'); + f('41769','41770','41771','41772'); + f('41773','41774','41775','41776'); + f('41777','41778','41779','41780'); + f('41781','41782','41783','41784'); + f('41785','41786','41787','41788'); + f('41789','41790','41791','41792'); + f('41793','41794','41795','41796'); + f('41797','41798','41799','41800'); + f('41801','41802','41803','41804'); + f('41805','41806','41807','41808'); + f('41809','41810','41811','41812'); + f('41813','41814','41815','41816'); + f('41817','41818','41819','41820'); + f('41821','41822','41823','41824'); + f('41825','41826','41827','41828'); + f('41829','41830','41831','41832'); + f('41833','41834','41835','41836'); + f('41837','41838','41839','41840'); + f('41841','41842','41843','41844'); + f('41845','41846','41847','41848'); + f('41849','41850','41851','41852'); + f('41853','41854','41855','41856'); + f('41857','41858','41859','41860'); + f('41861','41862','41863','41864'); + f('41865','41866','41867','41868'); + f('41869','41870','41871','41872'); + f('41873','41874','41875','41876'); + f('41877','41878','41879','41880'); + f('41881','41882','41883','41884'); + f('41885','41886','41887','41888'); + f('41889','41890','41891','41892'); + f('41893','41894','41895','41896'); + f('41897','41898','41899','41900'); + f('41901','41902','41903','41904'); + f('41905','41906','41907','41908'); + f('41909','41910','41911','41912'); + f('41913','41914','41915','41916'); + f('41917','41918','41919','41920'); + f('41921','41922','41923','41924'); + f('41925','41926','41927','41928'); + f('41929','41930','41931','41932'); + f('41933','41934','41935','41936'); + f('41937','41938','41939','41940'); + f('41941','41942','41943','41944'); + f('41945','41946','41947','41948'); + f('41949','41950','41951','41952'); + f('41953','41954','41955','41956'); + f('41957','41958','41959','41960'); + f('41961','41962','41963','41964'); + f('41965','41966','41967','41968'); + f('41969','41970','41971','41972'); + f('41973','41974','41975','41976'); + f('41977','41978','41979','41980'); + f('41981','41982','41983','41984'); + f('41985','41986','41987','41988'); + f('41989','41990','41991','41992'); + f('41993','41994','41995','41996'); + f('41997','41998','41999','42000'); + f('42001','42002','42003','42004'); + f('42005','42006','42007','42008'); + f('42009','42010','42011','42012'); + f('42013','42014','42015','42016'); + f('42017','42018','42019','42020'); + f('42021','42022','42023','42024'); + f('42025','42026','42027','42028'); + f('42029','42030','42031','42032'); + f('42033','42034','42035','42036'); + f('42037','42038','42039','42040'); + f('42041','42042','42043','42044'); + f('42045','42046','42047','42048'); + f('42049','42050','42051','42052'); + f('42053','42054','42055','42056'); + f('42057','42058','42059','42060'); + f('42061','42062','42063','42064'); + f('42065','42066','42067','42068'); + f('42069','42070','42071','42072'); + f('42073','42074','42075','42076'); + f('42077','42078','42079','42080'); + f('42081','42082','42083','42084'); + f('42085','42086','42087','42088'); + f('42089','42090','42091','42092'); + f('42093','42094','42095','42096'); + f('42097','42098','42099','42100'); + f('42101','42102','42103','42104'); + f('42105','42106','42107','42108'); + f('42109','42110','42111','42112'); + f('42113','42114','42115','42116'); + f('42117','42118','42119','42120'); + f('42121','42122','42123','42124'); + f('42125','42126','42127','42128'); + f('42129','42130','42131','42132'); + f('42133','42134','42135','42136'); + f('42137','42138','42139','42140'); + f('42141','42142','42143','42144'); + f('42145','42146','42147','42148'); + f('42149','42150','42151','42152'); + f('42153','42154','42155','42156'); + f('42157','42158','42159','42160'); + f('42161','42162','42163','42164'); + f('42165','42166','42167','42168'); + f('42169','42170','42171','42172'); + f('42173','42174','42175','42176'); + f('42177','42178','42179','42180'); + f('42181','42182','42183','42184'); + f('42185','42186','42187','42188'); + f('42189','42190','42191','42192'); + f('42193','42194','42195','42196'); + f('42197','42198','42199','42200'); + f('42201','42202','42203','42204'); + f('42205','42206','42207','42208'); + f('42209','42210','42211','42212'); + f('42213','42214','42215','42216'); + f('42217','42218','42219','42220'); + f('42221','42222','42223','42224'); + f('42225','42226','42227','42228'); + f('42229','42230','42231','42232'); + f('42233','42234','42235','42236'); + f('42237','42238','42239','42240'); + f('42241','42242','42243','42244'); + f('42245','42246','42247','42248'); + f('42249','42250','42251','42252'); + f('42253','42254','42255','42256'); + f('42257','42258','42259','42260'); + f('42261','42262','42263','42264'); + f('42265','42266','42267','42268'); + f('42269','42270','42271','42272'); + f('42273','42274','42275','42276'); + f('42277','42278','42279','42280'); + f('42281','42282','42283','42284'); + f('42285','42286','42287','42288'); + f('42289','42290','42291','42292'); + f('42293','42294','42295','42296'); + f('42297','42298','42299','42300'); + f('42301','42302','42303','42304'); + f('42305','42306','42307','42308'); + f('42309','42310','42311','42312'); + f('42313','42314','42315','42316'); + f('42317','42318','42319','42320'); + f('42321','42322','42323','42324'); + f('42325','42326','42327','42328'); + f('42329','42330','42331','42332'); + f('42333','42334','42335','42336'); + f('42337','42338','42339','42340'); + f('42341','42342','42343','42344'); + f('42345','42346','42347','42348'); + f('42349','42350','42351','42352'); + f('42353','42354','42355','42356'); + f('42357','42358','42359','42360'); + f('42361','42362','42363','42364'); + f('42365','42366','42367','42368'); + f('42369','42370','42371','42372'); + f('42373','42374','42375','42376'); + f('42377','42378','42379','42380'); + f('42381','42382','42383','42384'); + f('42385','42386','42387','42388'); + f('42389','42390','42391','42392'); + f('42393','42394','42395','42396'); + f('42397','42398','42399','42400'); + f('42401','42402','42403','42404'); + f('42405','42406','42407','42408'); + f('42409','42410','42411','42412'); + f('42413','42414','42415','42416'); + f('42417','42418','42419','42420'); + f('42421','42422','42423','42424'); + f('42425','42426','42427','42428'); + f('42429','42430','42431','42432'); + f('42433','42434','42435','42436'); + f('42437','42438','42439','42440'); + f('42441','42442','42443','42444'); + f('42445','42446','42447','42448'); + f('42449','42450','42451','42452'); + f('42453','42454','42455','42456'); + f('42457','42458','42459','42460'); + f('42461','42462','42463','42464'); + f('42465','42466','42467','42468'); + f('42469','42470','42471','42472'); + f('42473','42474','42475','42476'); + f('42477','42478','42479','42480'); + f('42481','42482','42483','42484'); + f('42485','42486','42487','42488'); + f('42489','42490','42491','42492'); + f('42493','42494','42495','42496'); + f('42497','42498','42499','42500'); + f('42501','42502','42503','42504'); + f('42505','42506','42507','42508'); + f('42509','42510','42511','42512'); + f('42513','42514','42515','42516'); + f('42517','42518','42519','42520'); + f('42521','42522','42523','42524'); + f('42525','42526','42527','42528'); + f('42529','42530','42531','42532'); + f('42533','42534','42535','42536'); + f('42537','42538','42539','42540'); + f('42541','42542','42543','42544'); + f('42545','42546','42547','42548'); + f('42549','42550','42551','42552'); + f('42553','42554','42555','42556'); + f('42557','42558','42559','42560'); + f('42561','42562','42563','42564'); + f('42565','42566','42567','42568'); + f('42569','42570','42571','42572'); + f('42573','42574','42575','42576'); + f('42577','42578','42579','42580'); + f('42581','42582','42583','42584'); + f('42585','42586','42587','42588'); + f('42589','42590','42591','42592'); + f('42593','42594','42595','42596'); + f('42597','42598','42599','42600'); + f('42601','42602','42603','42604'); + f('42605','42606','42607','42608'); + f('42609','42610','42611','42612'); + f('42613','42614','42615','42616'); + f('42617','42618','42619','42620'); + f('42621','42622','42623','42624'); + f('42625','42626','42627','42628'); + f('42629','42630','42631','42632'); + f('42633','42634','42635','42636'); + f('42637','42638','42639','42640'); + f('42641','42642','42643','42644'); + f('42645','42646','42647','42648'); + f('42649','42650','42651','42652'); + f('42653','42654','42655','42656'); + f('42657','42658','42659','42660'); + f('42661','42662','42663','42664'); + f('42665','42666','42667','42668'); + f('42669','42670','42671','42672'); + f('42673','42674','42675','42676'); + f('42677','42678','42679','42680'); + f('42681','42682','42683','42684'); + f('42685','42686','42687','42688'); + f('42689','42690','42691','42692'); + f('42693','42694','42695','42696'); + f('42697','42698','42699','42700'); + f('42701','42702','42703','42704'); + f('42705','42706','42707','42708'); + f('42709','42710','42711','42712'); + f('42713','42714','42715','42716'); + f('42717','42718','42719','42720'); + f('42721','42722','42723','42724'); + f('42725','42726','42727','42728'); + f('42729','42730','42731','42732'); + f('42733','42734','42735','42736'); + f('42737','42738','42739','42740'); + f('42741','42742','42743','42744'); + f('42745','42746','42747','42748'); + f('42749','42750','42751','42752'); + f('42753','42754','42755','42756'); + f('42757','42758','42759','42760'); + f('42761','42762','42763','42764'); + f('42765','42766','42767','42768'); + f('42769','42770','42771','42772'); + f('42773','42774','42775','42776'); + f('42777','42778','42779','42780'); + f('42781','42782','42783','42784'); + f('42785','42786','42787','42788'); + f('42789','42790','42791','42792'); + f('42793','42794','42795','42796'); + f('42797','42798','42799','42800'); + f('42801','42802','42803','42804'); + f('42805','42806','42807','42808'); + f('42809','42810','42811','42812'); + f('42813','42814','42815','42816'); + f('42817','42818','42819','42820'); + f('42821','42822','42823','42824'); + f('42825','42826','42827','42828'); + f('42829','42830','42831','42832'); + f('42833','42834','42835','42836'); + f('42837','42838','42839','42840'); + f('42841','42842','42843','42844'); + f('42845','42846','42847','42848'); + f('42849','42850','42851','42852'); + f('42853','42854','42855','42856'); + f('42857','42858','42859','42860'); + f('42861','42862','42863','42864'); + f('42865','42866','42867','42868'); + f('42869','42870','42871','42872'); + f('42873','42874','42875','42876'); + f('42877','42878','42879','42880'); + f('42881','42882','42883','42884'); + f('42885','42886','42887','42888'); + f('42889','42890','42891','42892'); + f('42893','42894','42895','42896'); + f('42897','42898','42899','42900'); + f('42901','42902','42903','42904'); + f('42905','42906','42907','42908'); + f('42909','42910','42911','42912'); + f('42913','42914','42915','42916'); + f('42917','42918','42919','42920'); + f('42921','42922','42923','42924'); + f('42925','42926','42927','42928'); + f('42929','42930','42931','42932'); + f('42933','42934','42935','42936'); + f('42937','42938','42939','42940'); + f('42941','42942','42943','42944'); + f('42945','42946','42947','42948'); + f('42949','42950','42951','42952'); + f('42953','42954','42955','42956'); + f('42957','42958','42959','42960'); + f('42961','42962','42963','42964'); + f('42965','42966','42967','42968'); + f('42969','42970','42971','42972'); + f('42973','42974','42975','42976'); + f('42977','42978','42979','42980'); + f('42981','42982','42983','42984'); + f('42985','42986','42987','42988'); + f('42989','42990','42991','42992'); + f('42993','42994','42995','42996'); + f('42997','42998','42999','43000'); + f('43001','43002','43003','43004'); + f('43005','43006','43007','43008'); + f('43009','43010','43011','43012'); + f('43013','43014','43015','43016'); + f('43017','43018','43019','43020'); + f('43021','43022','43023','43024'); + f('43025','43026','43027','43028'); + f('43029','43030','43031','43032'); + f('43033','43034','43035','43036'); + f('43037','43038','43039','43040'); + f('43041','43042','43043','43044'); + f('43045','43046','43047','43048'); + f('43049','43050','43051','43052'); + f('43053','43054','43055','43056'); + f('43057','43058','43059','43060'); + f('43061','43062','43063','43064'); + f('43065','43066','43067','43068'); + f('43069','43070','43071','43072'); + f('43073','43074','43075','43076'); + f('43077','43078','43079','43080'); + f('43081','43082','43083','43084'); + f('43085','43086','43087','43088'); + f('43089','43090','43091','43092'); + f('43093','43094','43095','43096'); + f('43097','43098','43099','43100'); + f('43101','43102','43103','43104'); + f('43105','43106','43107','43108'); + f('43109','43110','43111','43112'); + f('43113','43114','43115','43116'); + f('43117','43118','43119','43120'); + f('43121','43122','43123','43124'); + f('43125','43126','43127','43128'); + f('43129','43130','43131','43132'); + f('43133','43134','43135','43136'); + f('43137','43138','43139','43140'); + f('43141','43142','43143','43144'); + f('43145','43146','43147','43148'); + f('43149','43150','43151','43152'); + f('43153','43154','43155','43156'); + f('43157','43158','43159','43160'); + f('43161','43162','43163','43164'); + f('43165','43166','43167','43168'); + f('43169','43170','43171','43172'); + f('43173','43174','43175','43176'); + f('43177','43178','43179','43180'); + f('43181','43182','43183','43184'); + f('43185','43186','43187','43188'); + f('43189','43190','43191','43192'); + f('43193','43194','43195','43196'); + f('43197','43198','43199','43200'); + f('43201','43202','43203','43204'); + f('43205','43206','43207','43208'); + f('43209','43210','43211','43212'); + f('43213','43214','43215','43216'); + f('43217','43218','43219','43220'); + f('43221','43222','43223','43224'); + f('43225','43226','43227','43228'); + f('43229','43230','43231','43232'); + f('43233','43234','43235','43236'); + f('43237','43238','43239','43240'); + f('43241','43242','43243','43244'); + f('43245','43246','43247','43248'); + f('43249','43250','43251','43252'); + f('43253','43254','43255','43256'); + f('43257','43258','43259','43260'); + f('43261','43262','43263','43264'); + f('43265','43266','43267','43268'); + f('43269','43270','43271','43272'); + f('43273','43274','43275','43276'); + f('43277','43278','43279','43280'); + f('43281','43282','43283','43284'); + f('43285','43286','43287','43288'); + f('43289','43290','43291','43292'); + f('43293','43294','43295','43296'); + f('43297','43298','43299','43300'); + f('43301','43302','43303','43304'); + f('43305','43306','43307','43308'); + f('43309','43310','43311','43312'); + f('43313','43314','43315','43316'); + f('43317','43318','43319','43320'); + f('43321','43322','43323','43324'); + f('43325','43326','43327','43328'); + f('43329','43330','43331','43332'); + f('43333','43334','43335','43336'); + f('43337','43338','43339','43340'); + f('43341','43342','43343','43344'); + f('43345','43346','43347','43348'); + f('43349','43350','43351','43352'); + f('43353','43354','43355','43356'); + f('43357','43358','43359','43360'); + f('43361','43362','43363','43364'); + f('43365','43366','43367','43368'); + f('43369','43370','43371','43372'); + f('43373','43374','43375','43376'); + f('43377','43378','43379','43380'); + f('43381','43382','43383','43384'); + f('43385','43386','43387','43388'); + f('43389','43390','43391','43392'); + f('43393','43394','43395','43396'); + f('43397','43398','43399','43400'); + f('43401','43402','43403','43404'); + f('43405','43406','43407','43408'); + f('43409','43410','43411','43412'); + f('43413','43414','43415','43416'); + f('43417','43418','43419','43420'); + f('43421','43422','43423','43424'); + f('43425','43426','43427','43428'); + f('43429','43430','43431','43432'); + f('43433','43434','43435','43436'); + f('43437','43438','43439','43440'); + f('43441','43442','43443','43444'); + f('43445','43446','43447','43448'); + f('43449','43450','43451','43452'); + f('43453','43454','43455','43456'); + f('43457','43458','43459','43460'); + f('43461','43462','43463','43464'); + f('43465','43466','43467','43468'); + f('43469','43470','43471','43472'); + f('43473','43474','43475','43476'); + f('43477','43478','43479','43480'); + f('43481','43482','43483','43484'); + f('43485','43486','43487','43488'); + f('43489','43490','43491','43492'); + f('43493','43494','43495','43496'); + f('43497','43498','43499','43500'); + f('43501','43502','43503','43504'); + f('43505','43506','43507','43508'); + f('43509','43510','43511','43512'); + f('43513','43514','43515','43516'); + f('43517','43518','43519','43520'); + f('43521','43522','43523','43524'); + f('43525','43526','43527','43528'); + f('43529','43530','43531','43532'); + f('43533','43534','43535','43536'); + f('43537','43538','43539','43540'); + f('43541','43542','43543','43544'); + f('43545','43546','43547','43548'); + f('43549','43550','43551','43552'); + f('43553','43554','43555','43556'); + f('43557','43558','43559','43560'); + f('43561','43562','43563','43564'); + f('43565','43566','43567','43568'); + f('43569','43570','43571','43572'); + f('43573','43574','43575','43576'); + f('43577','43578','43579','43580'); + f('43581','43582','43583','43584'); + f('43585','43586','43587','43588'); + f('43589','43590','43591','43592'); + f('43593','43594','43595','43596'); + f('43597','43598','43599','43600'); + f('43601','43602','43603','43604'); + f('43605','43606','43607','43608'); + f('43609','43610','43611','43612'); + f('43613','43614','43615','43616'); + f('43617','43618','43619','43620'); + f('43621','43622','43623','43624'); + f('43625','43626','43627','43628'); + f('43629','43630','43631','43632'); + f('43633','43634','43635','43636'); + f('43637','43638','43639','43640'); + f('43641','43642','43643','43644'); + f('43645','43646','43647','43648'); + f('43649','43650','43651','43652'); + f('43653','43654','43655','43656'); + f('43657','43658','43659','43660'); + f('43661','43662','43663','43664'); + f('43665','43666','43667','43668'); + f('43669','43670','43671','43672'); + f('43673','43674','43675','43676'); + f('43677','43678','43679','43680'); + f('43681','43682','43683','43684'); + f('43685','43686','43687','43688'); + f('43689','43690','43691','43692'); + f('43693','43694','43695','43696'); + f('43697','43698','43699','43700'); + f('43701','43702','43703','43704'); + f('43705','43706','43707','43708'); + f('43709','43710','43711','43712'); + f('43713','43714','43715','43716'); + f('43717','43718','43719','43720'); + f('43721','43722','43723','43724'); + f('43725','43726','43727','43728'); + f('43729','43730','43731','43732'); + f('43733','43734','43735','43736'); + f('43737','43738','43739','43740'); + f('43741','43742','43743','43744'); + f('43745','43746','43747','43748'); + f('43749','43750','43751','43752'); + f('43753','43754','43755','43756'); + f('43757','43758','43759','43760'); + f('43761','43762','43763','43764'); + f('43765','43766','43767','43768'); + f('43769','43770','43771','43772'); + f('43773','43774','43775','43776'); + f('43777','43778','43779','43780'); + f('43781','43782','43783','43784'); + f('43785','43786','43787','43788'); + f('43789','43790','43791','43792'); + f('43793','43794','43795','43796'); + f('43797','43798','43799','43800'); + f('43801','43802','43803','43804'); + f('43805','43806','43807','43808'); + f('43809','43810','43811','43812'); + f('43813','43814','43815','43816'); + f('43817','43818','43819','43820'); + f('43821','43822','43823','43824'); + f('43825','43826','43827','43828'); + f('43829','43830','43831','43832'); + f('43833','43834','43835','43836'); + f('43837','43838','43839','43840'); + f('43841','43842','43843','43844'); + f('43845','43846','43847','43848'); + f('43849','43850','43851','43852'); + f('43853','43854','43855','43856'); + f('43857','43858','43859','43860'); + f('43861','43862','43863','43864'); + f('43865','43866','43867','43868'); + f('43869','43870','43871','43872'); + f('43873','43874','43875','43876'); + f('43877','43878','43879','43880'); + f('43881','43882','43883','43884'); + f('43885','43886','43887','43888'); + f('43889','43890','43891','43892'); + f('43893','43894','43895','43896'); + f('43897','43898','43899','43900'); + f('43901','43902','43903','43904'); + f('43905','43906','43907','43908'); + f('43909','43910','43911','43912'); + f('43913','43914','43915','43916'); + f('43917','43918','43919','43920'); + f('43921','43922','43923','43924'); + f('43925','43926','43927','43928'); + f('43929','43930','43931','43932'); + f('43933','43934','43935','43936'); + f('43937','43938','43939','43940'); + f('43941','43942','43943','43944'); + f('43945','43946','43947','43948'); + f('43949','43950','43951','43952'); + f('43953','43954','43955','43956'); + f('43957','43958','43959','43960'); + f('43961','43962','43963','43964'); + f('43965','43966','43967','43968'); + f('43969','43970','43971','43972'); + f('43973','43974','43975','43976'); + f('43977','43978','43979','43980'); + f('43981','43982','43983','43984'); + f('43985','43986','43987','43988'); + f('43989','43990','43991','43992'); + f('43993','43994','43995','43996'); + f('43997','43998','43999','44000'); + f('44001','44002','44003','44004'); + f('44005','44006','44007','44008'); + f('44009','44010','44011','44012'); + f('44013','44014','44015','44016'); + f('44017','44018','44019','44020'); + f('44021','44022','44023','44024'); + f('44025','44026','44027','44028'); + f('44029','44030','44031','44032'); + f('44033','44034','44035','44036'); + f('44037','44038','44039','44040'); + f('44041','44042','44043','44044'); + f('44045','44046','44047','44048'); + f('44049','44050','44051','44052'); + f('44053','44054','44055','44056'); + f('44057','44058','44059','44060'); + f('44061','44062','44063','44064'); + f('44065','44066','44067','44068'); + f('44069','44070','44071','44072'); + f('44073','44074','44075','44076'); + f('44077','44078','44079','44080'); + f('44081','44082','44083','44084'); + f('44085','44086','44087','44088'); + f('44089','44090','44091','44092'); + f('44093','44094','44095','44096'); + f('44097','44098','44099','44100'); + f('44101','44102','44103','44104'); + f('44105','44106','44107','44108'); + f('44109','44110','44111','44112'); + f('44113','44114','44115','44116'); + f('44117','44118','44119','44120'); + f('44121','44122','44123','44124'); + f('44125','44126','44127','44128'); + f('44129','44130','44131','44132'); + f('44133','44134','44135','44136'); + f('44137','44138','44139','44140'); + f('44141','44142','44143','44144'); + f('44145','44146','44147','44148'); + f('44149','44150','44151','44152'); + f('44153','44154','44155','44156'); + f('44157','44158','44159','44160'); + f('44161','44162','44163','44164'); + f('44165','44166','44167','44168'); + f('44169','44170','44171','44172'); + f('44173','44174','44175','44176'); + f('44177','44178','44179','44180'); + f('44181','44182','44183','44184'); + f('44185','44186','44187','44188'); + f('44189','44190','44191','44192'); + f('44193','44194','44195','44196'); + f('44197','44198','44199','44200'); + f('44201','44202','44203','44204'); + f('44205','44206','44207','44208'); + f('44209','44210','44211','44212'); + f('44213','44214','44215','44216'); + f('44217','44218','44219','44220'); + f('44221','44222','44223','44224'); + f('44225','44226','44227','44228'); + f('44229','44230','44231','44232'); + f('44233','44234','44235','44236'); + f('44237','44238','44239','44240'); + f('44241','44242','44243','44244'); + f('44245','44246','44247','44248'); + f('44249','44250','44251','44252'); + f('44253','44254','44255','44256'); + f('44257','44258','44259','44260'); + f('44261','44262','44263','44264'); + f('44265','44266','44267','44268'); + f('44269','44270','44271','44272'); + f('44273','44274','44275','44276'); + f('44277','44278','44279','44280'); + f('44281','44282','44283','44284'); + f('44285','44286','44287','44288'); + f('44289','44290','44291','44292'); + f('44293','44294','44295','44296'); + f('44297','44298','44299','44300'); + f('44301','44302','44303','44304'); + f('44305','44306','44307','44308'); + f('44309','44310','44311','44312'); + f('44313','44314','44315','44316'); + f('44317','44318','44319','44320'); + f('44321','44322','44323','44324'); + f('44325','44326','44327','44328'); + f('44329','44330','44331','44332'); + f('44333','44334','44335','44336'); + f('44337','44338','44339','44340'); + f('44341','44342','44343','44344'); + f('44345','44346','44347','44348'); + f('44349','44350','44351','44352'); + f('44353','44354','44355','44356'); + f('44357','44358','44359','44360'); + f('44361','44362','44363','44364'); + f('44365','44366','44367','44368'); + f('44369','44370','44371','44372'); + f('44373','44374','44375','44376'); + f('44377','44378','44379','44380'); + f('44381','44382','44383','44384'); + f('44385','44386','44387','44388'); + f('44389','44390','44391','44392'); + f('44393','44394','44395','44396'); + f('44397','44398','44399','44400'); + f('44401','44402','44403','44404'); + f('44405','44406','44407','44408'); + f('44409','44410','44411','44412'); + f('44413','44414','44415','44416'); + f('44417','44418','44419','44420'); + f('44421','44422','44423','44424'); + f('44425','44426','44427','44428'); + f('44429','44430','44431','44432'); + f('44433','44434','44435','44436'); + f('44437','44438','44439','44440'); + f('44441','44442','44443','44444'); + f('44445','44446','44447','44448'); + f('44449','44450','44451','44452'); + f('44453','44454','44455','44456'); + f('44457','44458','44459','44460'); + f('44461','44462','44463','44464'); + f('44465','44466','44467','44468'); + f('44469','44470','44471','44472'); + f('44473','44474','44475','44476'); + f('44477','44478','44479','44480'); + f('44481','44482','44483','44484'); + f('44485','44486','44487','44488'); + f('44489','44490','44491','44492'); + f('44493','44494','44495','44496'); + f('44497','44498','44499','44500'); + f('44501','44502','44503','44504'); + f('44505','44506','44507','44508'); + f('44509','44510','44511','44512'); + f('44513','44514','44515','44516'); + f('44517','44518','44519','44520'); + f('44521','44522','44523','44524'); + f('44525','44526','44527','44528'); + f('44529','44530','44531','44532'); + f('44533','44534','44535','44536'); + f('44537','44538','44539','44540'); + f('44541','44542','44543','44544'); + f('44545','44546','44547','44548'); + f('44549','44550','44551','44552'); + f('44553','44554','44555','44556'); + f('44557','44558','44559','44560'); + f('44561','44562','44563','44564'); + f('44565','44566','44567','44568'); + f('44569','44570','44571','44572'); + f('44573','44574','44575','44576'); + f('44577','44578','44579','44580'); + f('44581','44582','44583','44584'); + f('44585','44586','44587','44588'); + f('44589','44590','44591','44592'); + f('44593','44594','44595','44596'); + f('44597','44598','44599','44600'); + f('44601','44602','44603','44604'); + f('44605','44606','44607','44608'); + f('44609','44610','44611','44612'); + f('44613','44614','44615','44616'); + f('44617','44618','44619','44620'); + f('44621','44622','44623','44624'); + f('44625','44626','44627','44628'); + f('44629','44630','44631','44632'); + f('44633','44634','44635','44636'); + f('44637','44638','44639','44640'); + f('44641','44642','44643','44644'); + f('44645','44646','44647','44648'); + f('44649','44650','44651','44652'); + f('44653','44654','44655','44656'); + f('44657','44658','44659','44660'); + f('44661','44662','44663','44664'); + f('44665','44666','44667','44668'); + f('44669','44670','44671','44672'); + f('44673','44674','44675','44676'); + f('44677','44678','44679','44680'); + f('44681','44682','44683','44684'); + f('44685','44686','44687','44688'); + f('44689','44690','44691','44692'); + f('44693','44694','44695','44696'); + f('44697','44698','44699','44700'); + f('44701','44702','44703','44704'); + f('44705','44706','44707','44708'); + f('44709','44710','44711','44712'); + f('44713','44714','44715','44716'); + f('44717','44718','44719','44720'); + f('44721','44722','44723','44724'); + f('44725','44726','44727','44728'); + f('44729','44730','44731','44732'); + f('44733','44734','44735','44736'); + f('44737','44738','44739','44740'); + f('44741','44742','44743','44744'); + f('44745','44746','44747','44748'); + f('44749','44750','44751','44752'); + f('44753','44754','44755','44756'); + f('44757','44758','44759','44760'); + f('44761','44762','44763','44764'); + f('44765','44766','44767','44768'); + f('44769','44770','44771','44772'); + f('44773','44774','44775','44776'); + f('44777','44778','44779','44780'); + f('44781','44782','44783','44784'); + f('44785','44786','44787','44788'); + f('44789','44790','44791','44792'); + f('44793','44794','44795','44796'); + f('44797','44798','44799','44800'); + f('44801','44802','44803','44804'); + f('44805','44806','44807','44808'); + f('44809','44810','44811','44812'); + f('44813','44814','44815','44816'); + f('44817','44818','44819','44820'); + f('44821','44822','44823','44824'); + f('44825','44826','44827','44828'); + f('44829','44830','44831','44832'); + f('44833','44834','44835','44836'); + f('44837','44838','44839','44840'); + f('44841','44842','44843','44844'); + f('44845','44846','44847','44848'); + f('44849','44850','44851','44852'); + f('44853','44854','44855','44856'); + f('44857','44858','44859','44860'); + f('44861','44862','44863','44864'); + f('44865','44866','44867','44868'); + f('44869','44870','44871','44872'); + f('44873','44874','44875','44876'); + f('44877','44878','44879','44880'); + f('44881','44882','44883','44884'); + f('44885','44886','44887','44888'); + f('44889','44890','44891','44892'); + f('44893','44894','44895','44896'); + f('44897','44898','44899','44900'); + f('44901','44902','44903','44904'); + f('44905','44906','44907','44908'); + f('44909','44910','44911','44912'); + f('44913','44914','44915','44916'); + f('44917','44918','44919','44920'); + f('44921','44922','44923','44924'); + f('44925','44926','44927','44928'); + f('44929','44930','44931','44932'); + f('44933','44934','44935','44936'); + f('44937','44938','44939','44940'); + f('44941','44942','44943','44944'); + f('44945','44946','44947','44948'); + f('44949','44950','44951','44952'); + f('44953','44954','44955','44956'); + f('44957','44958','44959','44960'); + f('44961','44962','44963','44964'); + f('44965','44966','44967','44968'); + f('44969','44970','44971','44972'); + f('44973','44974','44975','44976'); + f('44977','44978','44979','44980'); + f('44981','44982','44983','44984'); + f('44985','44986','44987','44988'); + f('44989','44990','44991','44992'); + f('44993','44994','44995','44996'); + f('44997','44998','44999','45000'); + f('45001','45002','45003','45004'); + f('45005','45006','45007','45008'); + f('45009','45010','45011','45012'); + f('45013','45014','45015','45016'); + f('45017','45018','45019','45020'); + f('45021','45022','45023','45024'); + f('45025','45026','45027','45028'); + f('45029','45030','45031','45032'); + f('45033','45034','45035','45036'); + f('45037','45038','45039','45040'); + f('45041','45042','45043','45044'); + f('45045','45046','45047','45048'); + f('45049','45050','45051','45052'); + f('45053','45054','45055','45056'); + f('45057','45058','45059','45060'); + f('45061','45062','45063','45064'); + f('45065','45066','45067','45068'); + f('45069','45070','45071','45072'); + f('45073','45074','45075','45076'); + f('45077','45078','45079','45080'); + f('45081','45082','45083','45084'); + f('45085','45086','45087','45088'); + f('45089','45090','45091','45092'); + f('45093','45094','45095','45096'); + f('45097','45098','45099','45100'); + f('45101','45102','45103','45104'); + f('45105','45106','45107','45108'); + f('45109','45110','45111','45112'); + f('45113','45114','45115','45116'); + f('45117','45118','45119','45120'); + f('45121','45122','45123','45124'); + f('45125','45126','45127','45128'); + f('45129','45130','45131','45132'); + f('45133','45134','45135','45136'); + f('45137','45138','45139','45140'); + f('45141','45142','45143','45144'); + f('45145','45146','45147','45148'); + f('45149','45150','45151','45152'); + f('45153','45154','45155','45156'); + f('45157','45158','45159','45160'); + f('45161','45162','45163','45164'); + f('45165','45166','45167','45168'); + f('45169','45170','45171','45172'); + f('45173','45174','45175','45176'); + f('45177','45178','45179','45180'); + f('45181','45182','45183','45184'); + f('45185','45186','45187','45188'); + f('45189','45190','45191','45192'); + f('45193','45194','45195','45196'); + f('45197','45198','45199','45200'); + f('45201','45202','45203','45204'); + f('45205','45206','45207','45208'); + f('45209','45210','45211','45212'); + f('45213','45214','45215','45216'); + f('45217','45218','45219','45220'); + f('45221','45222','45223','45224'); + f('45225','45226','45227','45228'); + f('45229','45230','45231','45232'); + f('45233','45234','45235','45236'); + f('45237','45238','45239','45240'); + f('45241','45242','45243','45244'); + f('45245','45246','45247','45248'); + f('45249','45250','45251','45252'); + f('45253','45254','45255','45256'); + f('45257','45258','45259','45260'); + f('45261','45262','45263','45264'); + f('45265','45266','45267','45268'); + f('45269','45270','45271','45272'); + f('45273','45274','45275','45276'); + f('45277','45278','45279','45280'); + f('45281','45282','45283','45284'); + f('45285','45286','45287','45288'); + f('45289','45290','45291','45292'); + f('45293','45294','45295','45296'); + f('45297','45298','45299','45300'); + f('45301','45302','45303','45304'); + f('45305','45306','45307','45308'); + f('45309','45310','45311','45312'); + f('45313','45314','45315','45316'); + f('45317','45318','45319','45320'); + f('45321','45322','45323','45324'); + f('45325','45326','45327','45328'); + f('45329','45330','45331','45332'); + f('45333','45334','45335','45336'); + f('45337','45338','45339','45340'); + f('45341','45342','45343','45344'); + f('45345','45346','45347','45348'); + f('45349','45350','45351','45352'); + f('45353','45354','45355','45356'); + f('45357','45358','45359','45360'); + f('45361','45362','45363','45364'); + f('45365','45366','45367','45368'); + f('45369','45370','45371','45372'); + f('45373','45374','45375','45376'); + f('45377','45378','45379','45380'); + f('45381','45382','45383','45384'); + f('45385','45386','45387','45388'); + f('45389','45390','45391','45392'); + f('45393','45394','45395','45396'); + f('45397','45398','45399','45400'); + f('45401','45402','45403','45404'); + f('45405','45406','45407','45408'); + f('45409','45410','45411','45412'); + f('45413','45414','45415','45416'); + f('45417','45418','45419','45420'); + f('45421','45422','45423','45424'); + f('45425','45426','45427','45428'); + f('45429','45430','45431','45432'); + f('45433','45434','45435','45436'); + f('45437','45438','45439','45440'); + f('45441','45442','45443','45444'); + f('45445','45446','45447','45448'); + f('45449','45450','45451','45452'); + f('45453','45454','45455','45456'); + f('45457','45458','45459','45460'); + f('45461','45462','45463','45464'); + f('45465','45466','45467','45468'); + f('45469','45470','45471','45472'); + f('45473','45474','45475','45476'); + f('45477','45478','45479','45480'); + f('45481','45482','45483','45484'); + f('45485','45486','45487','45488'); + f('45489','45490','45491','45492'); + f('45493','45494','45495','45496'); + f('45497','45498','45499','45500'); + f('45501','45502','45503','45504'); + f('45505','45506','45507','45508'); + f('45509','45510','45511','45512'); + f('45513','45514','45515','45516'); + f('45517','45518','45519','45520'); + f('45521','45522','45523','45524'); + f('45525','45526','45527','45528'); + f('45529','45530','45531','45532'); + f('45533','45534','45535','45536'); + f('45537','45538','45539','45540'); + f('45541','45542','45543','45544'); + f('45545','45546','45547','45548'); + f('45549','45550','45551','45552'); + f('45553','45554','45555','45556'); + f('45557','45558','45559','45560'); + f('45561','45562','45563','45564'); + f('45565','45566','45567','45568'); + f('45569','45570','45571','45572'); + f('45573','45574','45575','45576'); + f('45577','45578','45579','45580'); + f('45581','45582','45583','45584'); + f('45585','45586','45587','45588'); + f('45589','45590','45591','45592'); + f('45593','45594','45595','45596'); + f('45597','45598','45599','45600'); + f('45601','45602','45603','45604'); + f('45605','45606','45607','45608'); + f('45609','45610','45611','45612'); + f('45613','45614','45615','45616'); + f('45617','45618','45619','45620'); + f('45621','45622','45623','45624'); + f('45625','45626','45627','45628'); + f('45629','45630','45631','45632'); + f('45633','45634','45635','45636'); + f('45637','45638','45639','45640'); + f('45641','45642','45643','45644'); + f('45645','45646','45647','45648'); + f('45649','45650','45651','45652'); + f('45653','45654','45655','45656'); + f('45657','45658','45659','45660'); + f('45661','45662','45663','45664'); + f('45665','45666','45667','45668'); + f('45669','45670','45671','45672'); + f('45673','45674','45675','45676'); + f('45677','45678','45679','45680'); + f('45681','45682','45683','45684'); + f('45685','45686','45687','45688'); + f('45689','45690','45691','45692'); + f('45693','45694','45695','45696'); + f('45697','45698','45699','45700'); + f('45701','45702','45703','45704'); + f('45705','45706','45707','45708'); + f('45709','45710','45711','45712'); + f('45713','45714','45715','45716'); + f('45717','45718','45719','45720'); + f('45721','45722','45723','45724'); + f('45725','45726','45727','45728'); + f('45729','45730','45731','45732'); + f('45733','45734','45735','45736'); + f('45737','45738','45739','45740'); + f('45741','45742','45743','45744'); + f('45745','45746','45747','45748'); + f('45749','45750','45751','45752'); + f('45753','45754','45755','45756'); + f('45757','45758','45759','45760'); + f('45761','45762','45763','45764'); + f('45765','45766','45767','45768'); + f('45769','45770','45771','45772'); + f('45773','45774','45775','45776'); + f('45777','45778','45779','45780'); + f('45781','45782','45783','45784'); + f('45785','45786','45787','45788'); + f('45789','45790','45791','45792'); + f('45793','45794','45795','45796'); + f('45797','45798','45799','45800'); + f('45801','45802','45803','45804'); + f('45805','45806','45807','45808'); + f('45809','45810','45811','45812'); + f('45813','45814','45815','45816'); + f('45817','45818','45819','45820'); + f('45821','45822','45823','45824'); + f('45825','45826','45827','45828'); + f('45829','45830','45831','45832'); + f('45833','45834','45835','45836'); + f('45837','45838','45839','45840'); + f('45841','45842','45843','45844'); + f('45845','45846','45847','45848'); + f('45849','45850','45851','45852'); + f('45853','45854','45855','45856'); + f('45857','45858','45859','45860'); + f('45861','45862','45863','45864'); + f('45865','45866','45867','45868'); + f('45869','45870','45871','45872'); + f('45873','45874','45875','45876'); + f('45877','45878','45879','45880'); + f('45881','45882','45883','45884'); + f('45885','45886','45887','45888'); + f('45889','45890','45891','45892'); + f('45893','45894','45895','45896'); + f('45897','45898','45899','45900'); + f('45901','45902','45903','45904'); + f('45905','45906','45907','45908'); + f('45909','45910','45911','45912'); + f('45913','45914','45915','45916'); + f('45917','45918','45919','45920'); + f('45921','45922','45923','45924'); + f('45925','45926','45927','45928'); + f('45929','45930','45931','45932'); + f('45933','45934','45935','45936'); + f('45937','45938','45939','45940'); + f('45941','45942','45943','45944'); + f('45945','45946','45947','45948'); + f('45949','45950','45951','45952'); + f('45953','45954','45955','45956'); + f('45957','45958','45959','45960'); + f('45961','45962','45963','45964'); + f('45965','45966','45967','45968'); + f('45969','45970','45971','45972'); + f('45973','45974','45975','45976'); + f('45977','45978','45979','45980'); + f('45981','45982','45983','45984'); + f('45985','45986','45987','45988'); + f('45989','45990','45991','45992'); + f('45993','45994','45995','45996'); + f('45997','45998','45999','46000'); + f('46001','46002','46003','46004'); + f('46005','46006','46007','46008'); + f('46009','46010','46011','46012'); + f('46013','46014','46015','46016'); + f('46017','46018','46019','46020'); + f('46021','46022','46023','46024'); + f('46025','46026','46027','46028'); + f('46029','46030','46031','46032'); + f('46033','46034','46035','46036'); + f('46037','46038','46039','46040'); + f('46041','46042','46043','46044'); + f('46045','46046','46047','46048'); + f('46049','46050','46051','46052'); + f('46053','46054','46055','46056'); + f('46057','46058','46059','46060'); + f('46061','46062','46063','46064'); + f('46065','46066','46067','46068'); + f('46069','46070','46071','46072'); + f('46073','46074','46075','46076'); + f('46077','46078','46079','46080'); + f('46081','46082','46083','46084'); + f('46085','46086','46087','46088'); + f('46089','46090','46091','46092'); + f('46093','46094','46095','46096'); + f('46097','46098','46099','46100'); + f('46101','46102','46103','46104'); + f('46105','46106','46107','46108'); + f('46109','46110','46111','46112'); + f('46113','46114','46115','46116'); + f('46117','46118','46119','46120'); + f('46121','46122','46123','46124'); + f('46125','46126','46127','46128'); + f('46129','46130','46131','46132'); + f('46133','46134','46135','46136'); + f('46137','46138','46139','46140'); + f('46141','46142','46143','46144'); + f('46145','46146','46147','46148'); + f('46149','46150','46151','46152'); + f('46153','46154','46155','46156'); + f('46157','46158','46159','46160'); + f('46161','46162','46163','46164'); + f('46165','46166','46167','46168'); + f('46169','46170','46171','46172'); + f('46173','46174','46175','46176'); + f('46177','46178','46179','46180'); + f('46181','46182','46183','46184'); + f('46185','46186','46187','46188'); + f('46189','46190','46191','46192'); + f('46193','46194','46195','46196'); + f('46197','46198','46199','46200'); + f('46201','46202','46203','46204'); + f('46205','46206','46207','46208'); + f('46209','46210','46211','46212'); + f('46213','46214','46215','46216'); + f('46217','46218','46219','46220'); + f('46221','46222','46223','46224'); + f('46225','46226','46227','46228'); + f('46229','46230','46231','46232'); + f('46233','46234','46235','46236'); + f('46237','46238','46239','46240'); + f('46241','46242','46243','46244'); + f('46245','46246','46247','46248'); + f('46249','46250','46251','46252'); + f('46253','46254','46255','46256'); + f('46257','46258','46259','46260'); + f('46261','46262','46263','46264'); + f('46265','46266','46267','46268'); + f('46269','46270','46271','46272'); + f('46273','46274','46275','46276'); + f('46277','46278','46279','46280'); + f('46281','46282','46283','46284'); + f('46285','46286','46287','46288'); + f('46289','46290','46291','46292'); + f('46293','46294','46295','46296'); + f('46297','46298','46299','46300'); + f('46301','46302','46303','46304'); + f('46305','46306','46307','46308'); + f('46309','46310','46311','46312'); + f('46313','46314','46315','46316'); + f('46317','46318','46319','46320'); + f('46321','46322','46323','46324'); + f('46325','46326','46327','46328'); + f('46329','46330','46331','46332'); + f('46333','46334','46335','46336'); + f('46337','46338','46339','46340'); + f('46341','46342','46343','46344'); + f('46345','46346','46347','46348'); + f('46349','46350','46351','46352'); + f('46353','46354','46355','46356'); + f('46357','46358','46359','46360'); + f('46361','46362','46363','46364'); + f('46365','46366','46367','46368'); + f('46369','46370','46371','46372'); + f('46373','46374','46375','46376'); + f('46377','46378','46379','46380'); + f('46381','46382','46383','46384'); + f('46385','46386','46387','46388'); + f('46389','46390','46391','46392'); + f('46393','46394','46395','46396'); + f('46397','46398','46399','46400'); + f('46401','46402','46403','46404'); + f('46405','46406','46407','46408'); + f('46409','46410','46411','46412'); + f('46413','46414','46415','46416'); + f('46417','46418','46419','46420'); + f('46421','46422','46423','46424'); + f('46425','46426','46427','46428'); + f('46429','46430','46431','46432'); + f('46433','46434','46435','46436'); + f('46437','46438','46439','46440'); + f('46441','46442','46443','46444'); + f('46445','46446','46447','46448'); + f('46449','46450','46451','46452'); + f('46453','46454','46455','46456'); + f('46457','46458','46459','46460'); + f('46461','46462','46463','46464'); + f('46465','46466','46467','46468'); + f('46469','46470','46471','46472'); + f('46473','46474','46475','46476'); + f('46477','46478','46479','46480'); + f('46481','46482','46483','46484'); + f('46485','46486','46487','46488'); + f('46489','46490','46491','46492'); + f('46493','46494','46495','46496'); + f('46497','46498','46499','46500'); + f('46501','46502','46503','46504'); + f('46505','46506','46507','46508'); + f('46509','46510','46511','46512'); + f('46513','46514','46515','46516'); + f('46517','46518','46519','46520'); + f('46521','46522','46523','46524'); + f('46525','46526','46527','46528'); + f('46529','46530','46531','46532'); + f('46533','46534','46535','46536'); + f('46537','46538','46539','46540'); + f('46541','46542','46543','46544'); + f('46545','46546','46547','46548'); + f('46549','46550','46551','46552'); + f('46553','46554','46555','46556'); + f('46557','46558','46559','46560'); + f('46561','46562','46563','46564'); + f('46565','46566','46567','46568'); + f('46569','46570','46571','46572'); + f('46573','46574','46575','46576'); + f('46577','46578','46579','46580'); + f('46581','46582','46583','46584'); + f('46585','46586','46587','46588'); + f('46589','46590','46591','46592'); + f('46593','46594','46595','46596'); + f('46597','46598','46599','46600'); + f('46601','46602','46603','46604'); + f('46605','46606','46607','46608'); + f('46609','46610','46611','46612'); + f('46613','46614','46615','46616'); + f('46617','46618','46619','46620'); + f('46621','46622','46623','46624'); + f('46625','46626','46627','46628'); + f('46629','46630','46631','46632'); + f('46633','46634','46635','46636'); + f('46637','46638','46639','46640'); + f('46641','46642','46643','46644'); + f('46645','46646','46647','46648'); + f('46649','46650','46651','46652'); + f('46653','46654','46655','46656'); + f('46657','46658','46659','46660'); + f('46661','46662','46663','46664'); + f('46665','46666','46667','46668'); + f('46669','46670','46671','46672'); + f('46673','46674','46675','46676'); + f('46677','46678','46679','46680'); + f('46681','46682','46683','46684'); + f('46685','46686','46687','46688'); + f('46689','46690','46691','46692'); + f('46693','46694','46695','46696'); + f('46697','46698','46699','46700'); + f('46701','46702','46703','46704'); + f('46705','46706','46707','46708'); + f('46709','46710','46711','46712'); + f('46713','46714','46715','46716'); + f('46717','46718','46719','46720'); + f('46721','46722','46723','46724'); + f('46725','46726','46727','46728'); + f('46729','46730','46731','46732'); + f('46733','46734','46735','46736'); + f('46737','46738','46739','46740'); + f('46741','46742','46743','46744'); + f('46745','46746','46747','46748'); + f('46749','46750','46751','46752'); + f('46753','46754','46755','46756'); + f('46757','46758','46759','46760'); + f('46761','46762','46763','46764'); + f('46765','46766','46767','46768'); + f('46769','46770','46771','46772'); + f('46773','46774','46775','46776'); + f('46777','46778','46779','46780'); + f('46781','46782','46783','46784'); + f('46785','46786','46787','46788'); + f('46789','46790','46791','46792'); + f('46793','46794','46795','46796'); + f('46797','46798','46799','46800'); + f('46801','46802','46803','46804'); + f('46805','46806','46807','46808'); + f('46809','46810','46811','46812'); + f('46813','46814','46815','46816'); + f('46817','46818','46819','46820'); + f('46821','46822','46823','46824'); + f('46825','46826','46827','46828'); + f('46829','46830','46831','46832'); + f('46833','46834','46835','46836'); + f('46837','46838','46839','46840'); + f('46841','46842','46843','46844'); + f('46845','46846','46847','46848'); + f('46849','46850','46851','46852'); + f('46853','46854','46855','46856'); + f('46857','46858','46859','46860'); + f('46861','46862','46863','46864'); + f('46865','46866','46867','46868'); + f('46869','46870','46871','46872'); + f('46873','46874','46875','46876'); + f('46877','46878','46879','46880'); + f('46881','46882','46883','46884'); + f('46885','46886','46887','46888'); + f('46889','46890','46891','46892'); + f('46893','46894','46895','46896'); + f('46897','46898','46899','46900'); + f('46901','46902','46903','46904'); + f('46905','46906','46907','46908'); + f('46909','46910','46911','46912'); + f('46913','46914','46915','46916'); + f('46917','46918','46919','46920'); + f('46921','46922','46923','46924'); + f('46925','46926','46927','46928'); + f('46929','46930','46931','46932'); + f('46933','46934','46935','46936'); + f('46937','46938','46939','46940'); + f('46941','46942','46943','46944'); + f('46945','46946','46947','46948'); + f('46949','46950','46951','46952'); + f('46953','46954','46955','46956'); + f('46957','46958','46959','46960'); + f('46961','46962','46963','46964'); + f('46965','46966','46967','46968'); + f('46969','46970','46971','46972'); + f('46973','46974','46975','46976'); + f('46977','46978','46979','46980'); + f('46981','46982','46983','46984'); + f('46985','46986','46987','46988'); + f('46989','46990','46991','46992'); + f('46993','46994','46995','46996'); + f('46997','46998','46999','47000'); + f('47001','47002','47003','47004'); + f('47005','47006','47007','47008'); + f('47009','47010','47011','47012'); + f('47013','47014','47015','47016'); + f('47017','47018','47019','47020'); + f('47021','47022','47023','47024'); + f('47025','47026','47027','47028'); + f('47029','47030','47031','47032'); + f('47033','47034','47035','47036'); + f('47037','47038','47039','47040'); + f('47041','47042','47043','47044'); + f('47045','47046','47047','47048'); + f('47049','47050','47051','47052'); + f('47053','47054','47055','47056'); + f('47057','47058','47059','47060'); + f('47061','47062','47063','47064'); + f('47065','47066','47067','47068'); + f('47069','47070','47071','47072'); + f('47073','47074','47075','47076'); + f('47077','47078','47079','47080'); + f('47081','47082','47083','47084'); + f('47085','47086','47087','47088'); + f('47089','47090','47091','47092'); + f('47093','47094','47095','47096'); + f('47097','47098','47099','47100'); + f('47101','47102','47103','47104'); + f('47105','47106','47107','47108'); + f('47109','47110','47111','47112'); + f('47113','47114','47115','47116'); + f('47117','47118','47119','47120'); + f('47121','47122','47123','47124'); + f('47125','47126','47127','47128'); + f('47129','47130','47131','47132'); + f('47133','47134','47135','47136'); + f('47137','47138','47139','47140'); + f('47141','47142','47143','47144'); + f('47145','47146','47147','47148'); + f('47149','47150','47151','47152'); + f('47153','47154','47155','47156'); + f('47157','47158','47159','47160'); + f('47161','47162','47163','47164'); + f('47165','47166','47167','47168'); + f('47169','47170','47171','47172'); + f('47173','47174','47175','47176'); + f('47177','47178','47179','47180'); + f('47181','47182','47183','47184'); + f('47185','47186','47187','47188'); + f('47189','47190','47191','47192'); + f('47193','47194','47195','47196'); + f('47197','47198','47199','47200'); + f('47201','47202','47203','47204'); + f('47205','47206','47207','47208'); + f('47209','47210','47211','47212'); + f('47213','47214','47215','47216'); + f('47217','47218','47219','47220'); + f('47221','47222','47223','47224'); + f('47225','47226','47227','47228'); + f('47229','47230','47231','47232'); + f('47233','47234','47235','47236'); + f('47237','47238','47239','47240'); + f('47241','47242','47243','47244'); + f('47245','47246','47247','47248'); + f('47249','47250','47251','47252'); + f('47253','47254','47255','47256'); + f('47257','47258','47259','47260'); + f('47261','47262','47263','47264'); + f('47265','47266','47267','47268'); + f('47269','47270','47271','47272'); + f('47273','47274','47275','47276'); + f('47277','47278','47279','47280'); + f('47281','47282','47283','47284'); + f('47285','47286','47287','47288'); + f('47289','47290','47291','47292'); + f('47293','47294','47295','47296'); + f('47297','47298','47299','47300'); + f('47301','47302','47303','47304'); + f('47305','47306','47307','47308'); + f('47309','47310','47311','47312'); + f('47313','47314','47315','47316'); + f('47317','47318','47319','47320'); + f('47321','47322','47323','47324'); + f('47325','47326','47327','47328'); + f('47329','47330','47331','47332'); + f('47333','47334','47335','47336'); + f('47337','47338','47339','47340'); + f('47341','47342','47343','47344'); + f('47345','47346','47347','47348'); + f('47349','47350','47351','47352'); + f('47353','47354','47355','47356'); + f('47357','47358','47359','47360'); + f('47361','47362','47363','47364'); + f('47365','47366','47367','47368'); + f('47369','47370','47371','47372'); + f('47373','47374','47375','47376'); + f('47377','47378','47379','47380'); + f('47381','47382','47383','47384'); + f('47385','47386','47387','47388'); + f('47389','47390','47391','47392'); + f('47393','47394','47395','47396'); + f('47397','47398','47399','47400'); + f('47401','47402','47403','47404'); + f('47405','47406','47407','47408'); + f('47409','47410','47411','47412'); + f('47413','47414','47415','47416'); + f('47417','47418','47419','47420'); + f('47421','47422','47423','47424'); + f('47425','47426','47427','47428'); + f('47429','47430','47431','47432'); + f('47433','47434','47435','47436'); + f('47437','47438','47439','47440'); + f('47441','47442','47443','47444'); + f('47445','47446','47447','47448'); + f('47449','47450','47451','47452'); + f('47453','47454','47455','47456'); + f('47457','47458','47459','47460'); + f('47461','47462','47463','47464'); + f('47465','47466','47467','47468'); + f('47469','47470','47471','47472'); + f('47473','47474','47475','47476'); + f('47477','47478','47479','47480'); + f('47481','47482','47483','47484'); + f('47485','47486','47487','47488'); + f('47489','47490','47491','47492'); + f('47493','47494','47495','47496'); + f('47497','47498','47499','47500'); + f('47501','47502','47503','47504'); + f('47505','47506','47507','47508'); + f('47509','47510','47511','47512'); + f('47513','47514','47515','47516'); + f('47517','47518','47519','47520'); + f('47521','47522','47523','47524'); + f('47525','47526','47527','47528'); + f('47529','47530','47531','47532'); + f('47533','47534','47535','47536'); + f('47537','47538','47539','47540'); + f('47541','47542','47543','47544'); + f('47545','47546','47547','47548'); + f('47549','47550','47551','47552'); + f('47553','47554','47555','47556'); + f('47557','47558','47559','47560'); + f('47561','47562','47563','47564'); + f('47565','47566','47567','47568'); + f('47569','47570','47571','47572'); + f('47573','47574','47575','47576'); + f('47577','47578','47579','47580'); + f('47581','47582','47583','47584'); + f('47585','47586','47587','47588'); + f('47589','47590','47591','47592'); + f('47593','47594','47595','47596'); + f('47597','47598','47599','47600'); + f('47601','47602','47603','47604'); + f('47605','47606','47607','47608'); + f('47609','47610','47611','47612'); + f('47613','47614','47615','47616'); + f('47617','47618','47619','47620'); + f('47621','47622','47623','47624'); + f('47625','47626','47627','47628'); + f('47629','47630','47631','47632'); + f('47633','47634','47635','47636'); + f('47637','47638','47639','47640'); + f('47641','47642','47643','47644'); + f('47645','47646','47647','47648'); + f('47649','47650','47651','47652'); + f('47653','47654','47655','47656'); + f('47657','47658','47659','47660'); + f('47661','47662','47663','47664'); + f('47665','47666','47667','47668'); + f('47669','47670','47671','47672'); + f('47673','47674','47675','47676'); + f('47677','47678','47679','47680'); + f('47681','47682','47683','47684'); + f('47685','47686','47687','47688'); + f('47689','47690','47691','47692'); + f('47693','47694','47695','47696'); + f('47697','47698','47699','47700'); + f('47701','47702','47703','47704'); + f('47705','47706','47707','47708'); + f('47709','47710','47711','47712'); + f('47713','47714','47715','47716'); + f('47717','47718','47719','47720'); + f('47721','47722','47723','47724'); + f('47725','47726','47727','47728'); + f('47729','47730','47731','47732'); + f('47733','47734','47735','47736'); + f('47737','47738','47739','47740'); + f('47741','47742','47743','47744'); + f('47745','47746','47747','47748'); + f('47749','47750','47751','47752'); + f('47753','47754','47755','47756'); + f('47757','47758','47759','47760'); + f('47761','47762','47763','47764'); + f('47765','47766','47767','47768'); + f('47769','47770','47771','47772'); + f('47773','47774','47775','47776'); + f('47777','47778','47779','47780'); + f('47781','47782','47783','47784'); + f('47785','47786','47787','47788'); + f('47789','47790','47791','47792'); + f('47793','47794','47795','47796'); + f('47797','47798','47799','47800'); + f('47801','47802','47803','47804'); + f('47805','47806','47807','47808'); + f('47809','47810','47811','47812'); + f('47813','47814','47815','47816'); + f('47817','47818','47819','47820'); + f('47821','47822','47823','47824'); + f('47825','47826','47827','47828'); + f('47829','47830','47831','47832'); + f('47833','47834','47835','47836'); + f('47837','47838','47839','47840'); + f('47841','47842','47843','47844'); + f('47845','47846','47847','47848'); + f('47849','47850','47851','47852'); + f('47853','47854','47855','47856'); + f('47857','47858','47859','47860'); + f('47861','47862','47863','47864'); + f('47865','47866','47867','47868'); + f('47869','47870','47871','47872'); + f('47873','47874','47875','47876'); + f('47877','47878','47879','47880'); + f('47881','47882','47883','47884'); + f('47885','47886','47887','47888'); + f('47889','47890','47891','47892'); + f('47893','47894','47895','47896'); + f('47897','47898','47899','47900'); + f('47901','47902','47903','47904'); + f('47905','47906','47907','47908'); + f('47909','47910','47911','47912'); + f('47913','47914','47915','47916'); + f('47917','47918','47919','47920'); + f('47921','47922','47923','47924'); + f('47925','47926','47927','47928'); + f('47929','47930','47931','47932'); + f('47933','47934','47935','47936'); + f('47937','47938','47939','47940'); + f('47941','47942','47943','47944'); + f('47945','47946','47947','47948'); + f('47949','47950','47951','47952'); + f('47953','47954','47955','47956'); + f('47957','47958','47959','47960'); + f('47961','47962','47963','47964'); + f('47965','47966','47967','47968'); + f('47969','47970','47971','47972'); + f('47973','47974','47975','47976'); + f('47977','47978','47979','47980'); + f('47981','47982','47983','47984'); + f('47985','47986','47987','47988'); + f('47989','47990','47991','47992'); + f('47993','47994','47995','47996'); + f('47997','47998','47999','48000'); + f('48001','48002','48003','48004'); + f('48005','48006','48007','48008'); + f('48009','48010','48011','48012'); + f('48013','48014','48015','48016'); + f('48017','48018','48019','48020'); + f('48021','48022','48023','48024'); + f('48025','48026','48027','48028'); + f('48029','48030','48031','48032'); + f('48033','48034','48035','48036'); + f('48037','48038','48039','48040'); + f('48041','48042','48043','48044'); + f('48045','48046','48047','48048'); + f('48049','48050','48051','48052'); + f('48053','48054','48055','48056'); + f('48057','48058','48059','48060'); + f('48061','48062','48063','48064'); + f('48065','48066','48067','48068'); + f('48069','48070','48071','48072'); + f('48073','48074','48075','48076'); + f('48077','48078','48079','48080'); + f('48081','48082','48083','48084'); + f('48085','48086','48087','48088'); + f('48089','48090','48091','48092'); + f('48093','48094','48095','48096'); + f('48097','48098','48099','48100'); + f('48101','48102','48103','48104'); + f('48105','48106','48107','48108'); + f('48109','48110','48111','48112'); + f('48113','48114','48115','48116'); + f('48117','48118','48119','48120'); + f('48121','48122','48123','48124'); + f('48125','48126','48127','48128'); + f('48129','48130','48131','48132'); + f('48133','48134','48135','48136'); + f('48137','48138','48139','48140'); + f('48141','48142','48143','48144'); + f('48145','48146','48147','48148'); + f('48149','48150','48151','48152'); + f('48153','48154','48155','48156'); + f('48157','48158','48159','48160'); + f('48161','48162','48163','48164'); + f('48165','48166','48167','48168'); + f('48169','48170','48171','48172'); + f('48173','48174','48175','48176'); + f('48177','48178','48179','48180'); + f('48181','48182','48183','48184'); + f('48185','48186','48187','48188'); + f('48189','48190','48191','48192'); + f('48193','48194','48195','48196'); + f('48197','48198','48199','48200'); + f('48201','48202','48203','48204'); + f('48205','48206','48207','48208'); + f('48209','48210','48211','48212'); + f('48213','48214','48215','48216'); + f('48217','48218','48219','48220'); + f('48221','48222','48223','48224'); + f('48225','48226','48227','48228'); + f('48229','48230','48231','48232'); + f('48233','48234','48235','48236'); + f('48237','48238','48239','48240'); + f('48241','48242','48243','48244'); + f('48245','48246','48247','48248'); + f('48249','48250','48251','48252'); + f('48253','48254','48255','48256'); + f('48257','48258','48259','48260'); + f('48261','48262','48263','48264'); + f('48265','48266','48267','48268'); + f('48269','48270','48271','48272'); + f('48273','48274','48275','48276'); + f('48277','48278','48279','48280'); + f('48281','48282','48283','48284'); + f('48285','48286','48287','48288'); + f('48289','48290','48291','48292'); + f('48293','48294','48295','48296'); + f('48297','48298','48299','48300'); + f('48301','48302','48303','48304'); + f('48305','48306','48307','48308'); + f('48309','48310','48311','48312'); + f('48313','48314','48315','48316'); + f('48317','48318','48319','48320'); + f('48321','48322','48323','48324'); + f('48325','48326','48327','48328'); + f('48329','48330','48331','48332'); + f('48333','48334','48335','48336'); + f('48337','48338','48339','48340'); + f('48341','48342','48343','48344'); + f('48345','48346','48347','48348'); + f('48349','48350','48351','48352'); + f('48353','48354','48355','48356'); + f('48357','48358','48359','48360'); + f('48361','48362','48363','48364'); + f('48365','48366','48367','48368'); + f('48369','48370','48371','48372'); + f('48373','48374','48375','48376'); + f('48377','48378','48379','48380'); + f('48381','48382','48383','48384'); + f('48385','48386','48387','48388'); + f('48389','48390','48391','48392'); + f('48393','48394','48395','48396'); + f('48397','48398','48399','48400'); + f('48401','48402','48403','48404'); + f('48405','48406','48407','48408'); + f('48409','48410','48411','48412'); + f('48413','48414','48415','48416'); + f('48417','48418','48419','48420'); + f('48421','48422','48423','48424'); + f('48425','48426','48427','48428'); + f('48429','48430','48431','48432'); + f('48433','48434','48435','48436'); + f('48437','48438','48439','48440'); + f('48441','48442','48443','48444'); + f('48445','48446','48447','48448'); + f('48449','48450','48451','48452'); + f('48453','48454','48455','48456'); + f('48457','48458','48459','48460'); + f('48461','48462','48463','48464'); + f('48465','48466','48467','48468'); + f('48469','48470','48471','48472'); + f('48473','48474','48475','48476'); + f('48477','48478','48479','48480'); + f('48481','48482','48483','48484'); + f('48485','48486','48487','48488'); + f('48489','48490','48491','48492'); + f('48493','48494','48495','48496'); + f('48497','48498','48499','48500'); + f('48501','48502','48503','48504'); + f('48505','48506','48507','48508'); + f('48509','48510','48511','48512'); + f('48513','48514','48515','48516'); + f('48517','48518','48519','48520'); + f('48521','48522','48523','48524'); + f('48525','48526','48527','48528'); + f('48529','48530','48531','48532'); + f('48533','48534','48535','48536'); + f('48537','48538','48539','48540'); + f('48541','48542','48543','48544'); + f('48545','48546','48547','48548'); + f('48549','48550','48551','48552'); + f('48553','48554','48555','48556'); + f('48557','48558','48559','48560'); + f('48561','48562','48563','48564'); + f('48565','48566','48567','48568'); + f('48569','48570','48571','48572'); + f('48573','48574','48575','48576'); + f('48577','48578','48579','48580'); + f('48581','48582','48583','48584'); + f('48585','48586','48587','48588'); + f('48589','48590','48591','48592'); + f('48593','48594','48595','48596'); + f('48597','48598','48599','48600'); + f('48601','48602','48603','48604'); + f('48605','48606','48607','48608'); + f('48609','48610','48611','48612'); + f('48613','48614','48615','48616'); + f('48617','48618','48619','48620'); + f('48621','48622','48623','48624'); + f('48625','48626','48627','48628'); + f('48629','48630','48631','48632'); + f('48633','48634','48635','48636'); + f('48637','48638','48639','48640'); + f('48641','48642','48643','48644'); + f('48645','48646','48647','48648'); + f('48649','48650','48651','48652'); + f('48653','48654','48655','48656'); + f('48657','48658','48659','48660'); + f('48661','48662','48663','48664'); + f('48665','48666','48667','48668'); + f('48669','48670','48671','48672'); + f('48673','48674','48675','48676'); + f('48677','48678','48679','48680'); + f('48681','48682','48683','48684'); + f('48685','48686','48687','48688'); + f('48689','48690','48691','48692'); + f('48693','48694','48695','48696'); + f('48697','48698','48699','48700'); + f('48701','48702','48703','48704'); + f('48705','48706','48707','48708'); + f('48709','48710','48711','48712'); + f('48713','48714','48715','48716'); + f('48717','48718','48719','48720'); + f('48721','48722','48723','48724'); + f('48725','48726','48727','48728'); + f('48729','48730','48731','48732'); + f('48733','48734','48735','48736'); + f('48737','48738','48739','48740'); + f('48741','48742','48743','48744'); + f('48745','48746','48747','48748'); + f('48749','48750','48751','48752'); + f('48753','48754','48755','48756'); + f('48757','48758','48759','48760'); + f('48761','48762','48763','48764'); + f('48765','48766','48767','48768'); + f('48769','48770','48771','48772'); + f('48773','48774','48775','48776'); + f('48777','48778','48779','48780'); + f('48781','48782','48783','48784'); + f('48785','48786','48787','48788'); + f('48789','48790','48791','48792'); + f('48793','48794','48795','48796'); + f('48797','48798','48799','48800'); + f('48801','48802','48803','48804'); + f('48805','48806','48807','48808'); + f('48809','48810','48811','48812'); + f('48813','48814','48815','48816'); + f('48817','48818','48819','48820'); + f('48821','48822','48823','48824'); + f('48825','48826','48827','48828'); + f('48829','48830','48831','48832'); + f('48833','48834','48835','48836'); + f('48837','48838','48839','48840'); + f('48841','48842','48843','48844'); + f('48845','48846','48847','48848'); + f('48849','48850','48851','48852'); + f('48853','48854','48855','48856'); + f('48857','48858','48859','48860'); + f('48861','48862','48863','48864'); + f('48865','48866','48867','48868'); + f('48869','48870','48871','48872'); + f('48873','48874','48875','48876'); + f('48877','48878','48879','48880'); + f('48881','48882','48883','48884'); + f('48885','48886','48887','48888'); + f('48889','48890','48891','48892'); + f('48893','48894','48895','48896'); + f('48897','48898','48899','48900'); + f('48901','48902','48903','48904'); + f('48905','48906','48907','48908'); + f('48909','48910','48911','48912'); + f('48913','48914','48915','48916'); + f('48917','48918','48919','48920'); + f('48921','48922','48923','48924'); + f('48925','48926','48927','48928'); + f('48929','48930','48931','48932'); + f('48933','48934','48935','48936'); + f('48937','48938','48939','48940'); + f('48941','48942','48943','48944'); + f('48945','48946','48947','48948'); + f('48949','48950','48951','48952'); + f('48953','48954','48955','48956'); + f('48957','48958','48959','48960'); + f('48961','48962','48963','48964'); + f('48965','48966','48967','48968'); + f('48969','48970','48971','48972'); + f('48973','48974','48975','48976'); + f('48977','48978','48979','48980'); + f('48981','48982','48983','48984'); + f('48985','48986','48987','48988'); + f('48989','48990','48991','48992'); + f('48993','48994','48995','48996'); + f('48997','48998','48999','49000'); + f('49001','49002','49003','49004'); + f('49005','49006','49007','49008'); + f('49009','49010','49011','49012'); + f('49013','49014','49015','49016'); + f('49017','49018','49019','49020'); + f('49021','49022','49023','49024'); + f('49025','49026','49027','49028'); + f('49029','49030','49031','49032'); + f('49033','49034','49035','49036'); + f('49037','49038','49039','49040'); + f('49041','49042','49043','49044'); + f('49045','49046','49047','49048'); + f('49049','49050','49051','49052'); + f('49053','49054','49055','49056'); + f('49057','49058','49059','49060'); + f('49061','49062','49063','49064'); + f('49065','49066','49067','49068'); + f('49069','49070','49071','49072'); + f('49073','49074','49075','49076'); + f('49077','49078','49079','49080'); + f('49081','49082','49083','49084'); + f('49085','49086','49087','49088'); + f('49089','49090','49091','49092'); + f('49093','49094','49095','49096'); + f('49097','49098','49099','49100'); + f('49101','49102','49103','49104'); + f('49105','49106','49107','49108'); + f('49109','49110','49111','49112'); + f('49113','49114','49115','49116'); + f('49117','49118','49119','49120'); + f('49121','49122','49123','49124'); + f('49125','49126','49127','49128'); + f('49129','49130','49131','49132'); + f('49133','49134','49135','49136'); + f('49137','49138','49139','49140'); + f('49141','49142','49143','49144'); + f('49145','49146','49147','49148'); + f('49149','49150','49151','49152'); + f('49153','49154','49155','49156'); + f('49157','49158','49159','49160'); + f('49161','49162','49163','49164'); + f('49165','49166','49167','49168'); + f('49169','49170','49171','49172'); + f('49173','49174','49175','49176'); + f('49177','49178','49179','49180'); + f('49181','49182','49183','49184'); + f('49185','49186','49187','49188'); + f('49189','49190','49191','49192'); + f('49193','49194','49195','49196'); + f('49197','49198','49199','49200'); + f('49201','49202','49203','49204'); + f('49205','49206','49207','49208'); + f('49209','49210','49211','49212'); + f('49213','49214','49215','49216'); + f('49217','49218','49219','49220'); + f('49221','49222','49223','49224'); + f('49225','49226','49227','49228'); + f('49229','49230','49231','49232'); + f('49233','49234','49235','49236'); + f('49237','49238','49239','49240'); + f('49241','49242','49243','49244'); + f('49245','49246','49247','49248'); + f('49249','49250','49251','49252'); + f('49253','49254','49255','49256'); + f('49257','49258','49259','49260'); + f('49261','49262','49263','49264'); + f('49265','49266','49267','49268'); + f('49269','49270','49271','49272'); + f('49273','49274','49275','49276'); + f('49277','49278','49279','49280'); + f('49281','49282','49283','49284'); + f('49285','49286','49287','49288'); + f('49289','49290','49291','49292'); + f('49293','49294','49295','49296'); + f('49297','49298','49299','49300'); + f('49301','49302','49303','49304'); + f('49305','49306','49307','49308'); + f('49309','49310','49311','49312'); + f('49313','49314','49315','49316'); + f('49317','49318','49319','49320'); + f('49321','49322','49323','49324'); + f('49325','49326','49327','49328'); + f('49329','49330','49331','49332'); + f('49333','49334','49335','49336'); + f('49337','49338','49339','49340'); + f('49341','49342','49343','49344'); + f('49345','49346','49347','49348'); + f('49349','49350','49351','49352'); + f('49353','49354','49355','49356'); + f('49357','49358','49359','49360'); + f('49361','49362','49363','49364'); + f('49365','49366','49367','49368'); + f('49369','49370','49371','49372'); + f('49373','49374','49375','49376'); + f('49377','49378','49379','49380'); + f('49381','49382','49383','49384'); + f('49385','49386','49387','49388'); + f('49389','49390','49391','49392'); + f('49393','49394','49395','49396'); + f('49397','49398','49399','49400'); + f('49401','49402','49403','49404'); + f('49405','49406','49407','49408'); + f('49409','49410','49411','49412'); + f('49413','49414','49415','49416'); + f('49417','49418','49419','49420'); + f('49421','49422','49423','49424'); + f('49425','49426','49427','49428'); + f('49429','49430','49431','49432'); + f('49433','49434','49435','49436'); + f('49437','49438','49439','49440'); + f('49441','49442','49443','49444'); + f('49445','49446','49447','49448'); + f('49449','49450','49451','49452'); + f('49453','49454','49455','49456'); + f('49457','49458','49459','49460'); + f('49461','49462','49463','49464'); + f('49465','49466','49467','49468'); + f('49469','49470','49471','49472'); + f('49473','49474','49475','49476'); + f('49477','49478','49479','49480'); + f('49481','49482','49483','49484'); + f('49485','49486','49487','49488'); + f('49489','49490','49491','49492'); + f('49493','49494','49495','49496'); + f('49497','49498','49499','49500'); + f('49501','49502','49503','49504'); + f('49505','49506','49507','49508'); + f('49509','49510','49511','49512'); + f('49513','49514','49515','49516'); + f('49517','49518','49519','49520'); + f('49521','49522','49523','49524'); + f('49525','49526','49527','49528'); + f('49529','49530','49531','49532'); + f('49533','49534','49535','49536'); + f('49537','49538','49539','49540'); + f('49541','49542','49543','49544'); + f('49545','49546','49547','49548'); + f('49549','49550','49551','49552'); + f('49553','49554','49555','49556'); + f('49557','49558','49559','49560'); + f('49561','49562','49563','49564'); + f('49565','49566','49567','49568'); + f('49569','49570','49571','49572'); + f('49573','49574','49575','49576'); + f('49577','49578','49579','49580'); + f('49581','49582','49583','49584'); + f('49585','49586','49587','49588'); + f('49589','49590','49591','49592'); + f('49593','49594','49595','49596'); + f('49597','49598','49599','49600'); + f('49601','49602','49603','49604'); + f('49605','49606','49607','49608'); + f('49609','49610','49611','49612'); + f('49613','49614','49615','49616'); + f('49617','49618','49619','49620'); + f('49621','49622','49623','49624'); + f('49625','49626','49627','49628'); + f('49629','49630','49631','49632'); + f('49633','49634','49635','49636'); + f('49637','49638','49639','49640'); + f('49641','49642','49643','49644'); + f('49645','49646','49647','49648'); + f('49649','49650','49651','49652'); + f('49653','49654','49655','49656'); + f('49657','49658','49659','49660'); + f('49661','49662','49663','49664'); + f('49665','49666','49667','49668'); + f('49669','49670','49671','49672'); + f('49673','49674','49675','49676'); + f('49677','49678','49679','49680'); + f('49681','49682','49683','49684'); + f('49685','49686','49687','49688'); + f('49689','49690','49691','49692'); + f('49693','49694','49695','49696'); + f('49697','49698','49699','49700'); + f('49701','49702','49703','49704'); + f('49705','49706','49707','49708'); + f('49709','49710','49711','49712'); + f('49713','49714','49715','49716'); + f('49717','49718','49719','49720'); + f('49721','49722','49723','49724'); + f('49725','49726','49727','49728'); + f('49729','49730','49731','49732'); + f('49733','49734','49735','49736'); + f('49737','49738','49739','49740'); + f('49741','49742','49743','49744'); + f('49745','49746','49747','49748'); + f('49749','49750','49751','49752'); + f('49753','49754','49755','49756'); + f('49757','49758','49759','49760'); + f('49761','49762','49763','49764'); + f('49765','49766','49767','49768'); + f('49769','49770','49771','49772'); + f('49773','49774','49775','49776'); + f('49777','49778','49779','49780'); + f('49781','49782','49783','49784'); + f('49785','49786','49787','49788'); + f('49789','49790','49791','49792'); + f('49793','49794','49795','49796'); + f('49797','49798','49799','49800'); + f('49801','49802','49803','49804'); + f('49805','49806','49807','49808'); + f('49809','49810','49811','49812'); + f('49813','49814','49815','49816'); + f('49817','49818','49819','49820'); + f('49821','49822','49823','49824'); + f('49825','49826','49827','49828'); + f('49829','49830','49831','49832'); + f('49833','49834','49835','49836'); + f('49837','49838','49839','49840'); + f('49841','49842','49843','49844'); + f('49845','49846','49847','49848'); + f('49849','49850','49851','49852'); + f('49853','49854','49855','49856'); + f('49857','49858','49859','49860'); + f('49861','49862','49863','49864'); + f('49865','49866','49867','49868'); + f('49869','49870','49871','49872'); + f('49873','49874','49875','49876'); + f('49877','49878','49879','49880'); + f('49881','49882','49883','49884'); + f('49885','49886','49887','49888'); + f('49889','49890','49891','49892'); + f('49893','49894','49895','49896'); + f('49897','49898','49899','49900'); + f('49901','49902','49903','49904'); + f('49905','49906','49907','49908'); + f('49909','49910','49911','49912'); + f('49913','49914','49915','49916'); + f('49917','49918','49919','49920'); + f('49921','49922','49923','49924'); + f('49925','49926','49927','49928'); + f('49929','49930','49931','49932'); + f('49933','49934','49935','49936'); + f('49937','49938','49939','49940'); + f('49941','49942','49943','49944'); + f('49945','49946','49947','49948'); + f('49949','49950','49951','49952'); + f('49953','49954','49955','49956'); + f('49957','49958','49959','49960'); + f('49961','49962','49963','49964'); + f('49965','49966','49967','49968'); + f('49969','49970','49971','49972'); + f('49973','49974','49975','49976'); + f('49977','49978','49979','49980'); + f('49981','49982','49983','49984'); + f('49985','49986','49987','49988'); + f('49989','49990','49991','49992'); + f('49993','49994','49995','49996'); + f('49997','49998','49999','50000'); + f('50001','50002','50003','50004'); + f('50005','50006','50007','50008'); + f('50009','50010','50011','50012'); + f('50013','50014','50015','50016'); + f('50017','50018','50019','50020'); + f('50021','50022','50023','50024'); + f('50025','50026','50027','50028'); + f('50029','50030','50031','50032'); + f('50033','50034','50035','50036'); + f('50037','50038','50039','50040'); + f('50041','50042','50043','50044'); + f('50045','50046','50047','50048'); + f('50049','50050','50051','50052'); + f('50053','50054','50055','50056'); + f('50057','50058','50059','50060'); + f('50061','50062','50063','50064'); + f('50065','50066','50067','50068'); + f('50069','50070','50071','50072'); + f('50073','50074','50075','50076'); + f('50077','50078','50079','50080'); + f('50081','50082','50083','50084'); + f('50085','50086','50087','50088'); + f('50089','50090','50091','50092'); + f('50093','50094','50095','50096'); + f('50097','50098','50099','50100'); + f('50101','50102','50103','50104'); + f('50105','50106','50107','50108'); + f('50109','50110','50111','50112'); + f('50113','50114','50115','50116'); + f('50117','50118','50119','50120'); + f('50121','50122','50123','50124'); + f('50125','50126','50127','50128'); + f('50129','50130','50131','50132'); + f('50133','50134','50135','50136'); + f('50137','50138','50139','50140'); + f('50141','50142','50143','50144'); + f('50145','50146','50147','50148'); + f('50149','50150','50151','50152'); + f('50153','50154','50155','50156'); + f('50157','50158','50159','50160'); + f('50161','50162','50163','50164'); + f('50165','50166','50167','50168'); + f('50169','50170','50171','50172'); + f('50173','50174','50175','50176'); + f('50177','50178','50179','50180'); + f('50181','50182','50183','50184'); + f('50185','50186','50187','50188'); + f('50189','50190','50191','50192'); + f('50193','50194','50195','50196'); + f('50197','50198','50199','50200'); + f('50201','50202','50203','50204'); + f('50205','50206','50207','50208'); + f('50209','50210','50211','50212'); + f('50213','50214','50215','50216'); + f('50217','50218','50219','50220'); + f('50221','50222','50223','50224'); + f('50225','50226','50227','50228'); + f('50229','50230','50231','50232'); + f('50233','50234','50235','50236'); + f('50237','50238','50239','50240'); + f('50241','50242','50243','50244'); + f('50245','50246','50247','50248'); + f('50249','50250','50251','50252'); + f('50253','50254','50255','50256'); + f('50257','50258','50259','50260'); + f('50261','50262','50263','50264'); + f('50265','50266','50267','50268'); + f('50269','50270','50271','50272'); + f('50273','50274','50275','50276'); + f('50277','50278','50279','50280'); + f('50281','50282','50283','50284'); + f('50285','50286','50287','50288'); + f('50289','50290','50291','50292'); + f('50293','50294','50295','50296'); + f('50297','50298','50299','50300'); + f('50301','50302','50303','50304'); + f('50305','50306','50307','50308'); + f('50309','50310','50311','50312'); + f('50313','50314','50315','50316'); + f('50317','50318','50319','50320'); + f('50321','50322','50323','50324'); + f('50325','50326','50327','50328'); + f('50329','50330','50331','50332'); + f('50333','50334','50335','50336'); + f('50337','50338','50339','50340'); + f('50341','50342','50343','50344'); + f('50345','50346','50347','50348'); + f('50349','50350','50351','50352'); + f('50353','50354','50355','50356'); + f('50357','50358','50359','50360'); + f('50361','50362','50363','50364'); + f('50365','50366','50367','50368'); + f('50369','50370','50371','50372'); + f('50373','50374','50375','50376'); + f('50377','50378','50379','50380'); + f('50381','50382','50383','50384'); + f('50385','50386','50387','50388'); + f('50389','50390','50391','50392'); + f('50393','50394','50395','50396'); + f('50397','50398','50399','50400'); + f('50401','50402','50403','50404'); + f('50405','50406','50407','50408'); + f('50409','50410','50411','50412'); + f('50413','50414','50415','50416'); + f('50417','50418','50419','50420'); + f('50421','50422','50423','50424'); + f('50425','50426','50427','50428'); + f('50429','50430','50431','50432'); + f('50433','50434','50435','50436'); + f('50437','50438','50439','50440'); + f('50441','50442','50443','50444'); + f('50445','50446','50447','50448'); + f('50449','50450','50451','50452'); + f('50453','50454','50455','50456'); + f('50457','50458','50459','50460'); + f('50461','50462','50463','50464'); + f('50465','50466','50467','50468'); + f('50469','50470','50471','50472'); + f('50473','50474','50475','50476'); + f('50477','50478','50479','50480'); + f('50481','50482','50483','50484'); + f('50485','50486','50487','50488'); + f('50489','50490','50491','50492'); + f('50493','50494','50495','50496'); + f('50497','50498','50499','50500'); + f('50501','50502','50503','50504'); + f('50505','50506','50507','50508'); + f('50509','50510','50511','50512'); + f('50513','50514','50515','50516'); + f('50517','50518','50519','50520'); + f('50521','50522','50523','50524'); + f('50525','50526','50527','50528'); + f('50529','50530','50531','50532'); + f('50533','50534','50535','50536'); + f('50537','50538','50539','50540'); + f('50541','50542','50543','50544'); + f('50545','50546','50547','50548'); + f('50549','50550','50551','50552'); + f('50553','50554','50555','50556'); + f('50557','50558','50559','50560'); + f('50561','50562','50563','50564'); + f('50565','50566','50567','50568'); + f('50569','50570','50571','50572'); + f('50573','50574','50575','50576'); + f('50577','50578','50579','50580'); + f('50581','50582','50583','50584'); + f('50585','50586','50587','50588'); + f('50589','50590','50591','50592'); + f('50593','50594','50595','50596'); + f('50597','50598','50599','50600'); + f('50601','50602','50603','50604'); + f('50605','50606','50607','50608'); + f('50609','50610','50611','50612'); + f('50613','50614','50615','50616'); + f('50617','50618','50619','50620'); + f('50621','50622','50623','50624'); + f('50625','50626','50627','50628'); + f('50629','50630','50631','50632'); + f('50633','50634','50635','50636'); + f('50637','50638','50639','50640'); + f('50641','50642','50643','50644'); + f('50645','50646','50647','50648'); + f('50649','50650','50651','50652'); + f('50653','50654','50655','50656'); + f('50657','50658','50659','50660'); + f('50661','50662','50663','50664'); + f('50665','50666','50667','50668'); + f('50669','50670','50671','50672'); + f('50673','50674','50675','50676'); + f('50677','50678','50679','50680'); + f('50681','50682','50683','50684'); + f('50685','50686','50687','50688'); + f('50689','50690','50691','50692'); + f('50693','50694','50695','50696'); + f('50697','50698','50699','50700'); + f('50701','50702','50703','50704'); + f('50705','50706','50707','50708'); + f('50709','50710','50711','50712'); + f('50713','50714','50715','50716'); + f('50717','50718','50719','50720'); + f('50721','50722','50723','50724'); + f('50725','50726','50727','50728'); + f('50729','50730','50731','50732'); + f('50733','50734','50735','50736'); + f('50737','50738','50739','50740'); + f('50741','50742','50743','50744'); + f('50745','50746','50747','50748'); + f('50749','50750','50751','50752'); + f('50753','50754','50755','50756'); + f('50757','50758','50759','50760'); + f('50761','50762','50763','50764'); + f('50765','50766','50767','50768'); + f('50769','50770','50771','50772'); + f('50773','50774','50775','50776'); + f('50777','50778','50779','50780'); + f('50781','50782','50783','50784'); + f('50785','50786','50787','50788'); + f('50789','50790','50791','50792'); + f('50793','50794','50795','50796'); + f('50797','50798','50799','50800'); + f('50801','50802','50803','50804'); + f('50805','50806','50807','50808'); + f('50809','50810','50811','50812'); + f('50813','50814','50815','50816'); + f('50817','50818','50819','50820'); + f('50821','50822','50823','50824'); + f('50825','50826','50827','50828'); + f('50829','50830','50831','50832'); + f('50833','50834','50835','50836'); + f('50837','50838','50839','50840'); + f('50841','50842','50843','50844'); + f('50845','50846','50847','50848'); + f('50849','50850','50851','50852'); + f('50853','50854','50855','50856'); + f('50857','50858','50859','50860'); + f('50861','50862','50863','50864'); + f('50865','50866','50867','50868'); + f('50869','50870','50871','50872'); + f('50873','50874','50875','50876'); + f('50877','50878','50879','50880'); + f('50881','50882','50883','50884'); + f('50885','50886','50887','50888'); + f('50889','50890','50891','50892'); + f('50893','50894','50895','50896'); + f('50897','50898','50899','50900'); + f('50901','50902','50903','50904'); + f('50905','50906','50907','50908'); + f('50909','50910','50911','50912'); + f('50913','50914','50915','50916'); + f('50917','50918','50919','50920'); + f('50921','50922','50923','50924'); + f('50925','50926','50927','50928'); + f('50929','50930','50931','50932'); + f('50933','50934','50935','50936'); + f('50937','50938','50939','50940'); + f('50941','50942','50943','50944'); + f('50945','50946','50947','50948'); + f('50949','50950','50951','50952'); + f('50953','50954','50955','50956'); + f('50957','50958','50959','50960'); + f('50961','50962','50963','50964'); + f('50965','50966','50967','50968'); + f('50969','50970','50971','50972'); + f('50973','50974','50975','50976'); + f('50977','50978','50979','50980'); + f('50981','50982','50983','50984'); + f('50985','50986','50987','50988'); + f('50989','50990','50991','50992'); + f('50993','50994','50995','50996'); + f('50997','50998','50999','51000'); + f('51001','51002','51003','51004'); + f('51005','51006','51007','51008'); + f('51009','51010','51011','51012'); + f('51013','51014','51015','51016'); + f('51017','51018','51019','51020'); + f('51021','51022','51023','51024'); + f('51025','51026','51027','51028'); + f('51029','51030','51031','51032'); + f('51033','51034','51035','51036'); + f('51037','51038','51039','51040'); + f('51041','51042','51043','51044'); + f('51045','51046','51047','51048'); + f('51049','51050','51051','51052'); + f('51053','51054','51055','51056'); + f('51057','51058','51059','51060'); + f('51061','51062','51063','51064'); + f('51065','51066','51067','51068'); + f('51069','51070','51071','51072'); + f('51073','51074','51075','51076'); + f('51077','51078','51079','51080'); + f('51081','51082','51083','51084'); + f('51085','51086','51087','51088'); + f('51089','51090','51091','51092'); + f('51093','51094','51095','51096'); + f('51097','51098','51099','51100'); + f('51101','51102','51103','51104'); + f('51105','51106','51107','51108'); + f('51109','51110','51111','51112'); + f('51113','51114','51115','51116'); + f('51117','51118','51119','51120'); + f('51121','51122','51123','51124'); + f('51125','51126','51127','51128'); + f('51129','51130','51131','51132'); + f('51133','51134','51135','51136'); + f('51137','51138','51139','51140'); + f('51141','51142','51143','51144'); + f('51145','51146','51147','51148'); + f('51149','51150','51151','51152'); + f('51153','51154','51155','51156'); + f('51157','51158','51159','51160'); + f('51161','51162','51163','51164'); + f('51165','51166','51167','51168'); + f('51169','51170','51171','51172'); + f('51173','51174','51175','51176'); + f('51177','51178','51179','51180'); + f('51181','51182','51183','51184'); + f('51185','51186','51187','51188'); + f('51189','51190','51191','51192'); + f('51193','51194','51195','51196'); + f('51197','51198','51199','51200'); + f('51201','51202','51203','51204'); + f('51205','51206','51207','51208'); + f('51209','51210','51211','51212'); + f('51213','51214','51215','51216'); + f('51217','51218','51219','51220'); + f('51221','51222','51223','51224'); + f('51225','51226','51227','51228'); + f('51229','51230','51231','51232'); + f('51233','51234','51235','51236'); + f('51237','51238','51239','51240'); + f('51241','51242','51243','51244'); + f('51245','51246','51247','51248'); + f('51249','51250','51251','51252'); + f('51253','51254','51255','51256'); + f('51257','51258','51259','51260'); + f('51261','51262','51263','51264'); + f('51265','51266','51267','51268'); + f('51269','51270','51271','51272'); + f('51273','51274','51275','51276'); + f('51277','51278','51279','51280'); + f('51281','51282','51283','51284'); + f('51285','51286','51287','51288'); + f('51289','51290','51291','51292'); + f('51293','51294','51295','51296'); + f('51297','51298','51299','51300'); + f('51301','51302','51303','51304'); + f('51305','51306','51307','51308'); + f('51309','51310','51311','51312'); + f('51313','51314','51315','51316'); + f('51317','51318','51319','51320'); + f('51321','51322','51323','51324'); + f('51325','51326','51327','51328'); + f('51329','51330','51331','51332'); + f('51333','51334','51335','51336'); + f('51337','51338','51339','51340'); + f('51341','51342','51343','51344'); + f('51345','51346','51347','51348'); + f('51349','51350','51351','51352'); + f('51353','51354','51355','51356'); + f('51357','51358','51359','51360'); + f('51361','51362','51363','51364'); + f('51365','51366','51367','51368'); + f('51369','51370','51371','51372'); + f('51373','51374','51375','51376'); + f('51377','51378','51379','51380'); + f('51381','51382','51383','51384'); + f('51385','51386','51387','51388'); + f('51389','51390','51391','51392'); + f('51393','51394','51395','51396'); + f('51397','51398','51399','51400'); + f('51401','51402','51403','51404'); + f('51405','51406','51407','51408'); + f('51409','51410','51411','51412'); + f('51413','51414','51415','51416'); + f('51417','51418','51419','51420'); + f('51421','51422','51423','51424'); + f('51425','51426','51427','51428'); + f('51429','51430','51431','51432'); + f('51433','51434','51435','51436'); + f('51437','51438','51439','51440'); + f('51441','51442','51443','51444'); + f('51445','51446','51447','51448'); + f('51449','51450','51451','51452'); + f('51453','51454','51455','51456'); + f('51457','51458','51459','51460'); + f('51461','51462','51463','51464'); + f('51465','51466','51467','51468'); + f('51469','51470','51471','51472'); + f('51473','51474','51475','51476'); + f('51477','51478','51479','51480'); + f('51481','51482','51483','51484'); + f('51485','51486','51487','51488'); + f('51489','51490','51491','51492'); + f('51493','51494','51495','51496'); + f('51497','51498','51499','51500'); + f('51501','51502','51503','51504'); + f('51505','51506','51507','51508'); + f('51509','51510','51511','51512'); + f('51513','51514','51515','51516'); + f('51517','51518','51519','51520'); + f('51521','51522','51523','51524'); + f('51525','51526','51527','51528'); + f('51529','51530','51531','51532'); + f('51533','51534','51535','51536'); + f('51537','51538','51539','51540'); + f('51541','51542','51543','51544'); + f('51545','51546','51547','51548'); + f('51549','51550','51551','51552'); + f('51553','51554','51555','51556'); + f('51557','51558','51559','51560'); + f('51561','51562','51563','51564'); + f('51565','51566','51567','51568'); + f('51569','51570','51571','51572'); + f('51573','51574','51575','51576'); + f('51577','51578','51579','51580'); + f('51581','51582','51583','51584'); + f('51585','51586','51587','51588'); + f('51589','51590','51591','51592'); + f('51593','51594','51595','51596'); + f('51597','51598','51599','51600'); + f('51601','51602','51603','51604'); + f('51605','51606','51607','51608'); + f('51609','51610','51611','51612'); + f('51613','51614','51615','51616'); + f('51617','51618','51619','51620'); + f('51621','51622','51623','51624'); + f('51625','51626','51627','51628'); + f('51629','51630','51631','51632'); + f('51633','51634','51635','51636'); + f('51637','51638','51639','51640'); + f('51641','51642','51643','51644'); + f('51645','51646','51647','51648'); + f('51649','51650','51651','51652'); + f('51653','51654','51655','51656'); + f('51657','51658','51659','51660'); + f('51661','51662','51663','51664'); + f('51665','51666','51667','51668'); + f('51669','51670','51671','51672'); + f('51673','51674','51675','51676'); + f('51677','51678','51679','51680'); + f('51681','51682','51683','51684'); + f('51685','51686','51687','51688'); + f('51689','51690','51691','51692'); + f('51693','51694','51695','51696'); + f('51697','51698','51699','51700'); + f('51701','51702','51703','51704'); + f('51705','51706','51707','51708'); + f('51709','51710','51711','51712'); + f('51713','51714','51715','51716'); + f('51717','51718','51719','51720'); + f('51721','51722','51723','51724'); + f('51725','51726','51727','51728'); + f('51729','51730','51731','51732'); + f('51733','51734','51735','51736'); + f('51737','51738','51739','51740'); + f('51741','51742','51743','51744'); + f('51745','51746','51747','51748'); + f('51749','51750','51751','51752'); + f('51753','51754','51755','51756'); + f('51757','51758','51759','51760'); + f('51761','51762','51763','51764'); + f('51765','51766','51767','51768'); + f('51769','51770','51771','51772'); + f('51773','51774','51775','51776'); + f('51777','51778','51779','51780'); + f('51781','51782','51783','51784'); + f('51785','51786','51787','51788'); + f('51789','51790','51791','51792'); + f('51793','51794','51795','51796'); + f('51797','51798','51799','51800'); + f('51801','51802','51803','51804'); + f('51805','51806','51807','51808'); + f('51809','51810','51811','51812'); + f('51813','51814','51815','51816'); + f('51817','51818','51819','51820'); + f('51821','51822','51823','51824'); + f('51825','51826','51827','51828'); + f('51829','51830','51831','51832'); + f('51833','51834','51835','51836'); + f('51837','51838','51839','51840'); + f('51841','51842','51843','51844'); + f('51845','51846','51847','51848'); + f('51849','51850','51851','51852'); + f('51853','51854','51855','51856'); + f('51857','51858','51859','51860'); + f('51861','51862','51863','51864'); + f('51865','51866','51867','51868'); + f('51869','51870','51871','51872'); + f('51873','51874','51875','51876'); + f('51877','51878','51879','51880'); + f('51881','51882','51883','51884'); + f('51885','51886','51887','51888'); + f('51889','51890','51891','51892'); + f('51893','51894','51895','51896'); + f('51897','51898','51899','51900'); + f('51901','51902','51903','51904'); + f('51905','51906','51907','51908'); + f('51909','51910','51911','51912'); + f('51913','51914','51915','51916'); + f('51917','51918','51919','51920'); + f('51921','51922','51923','51924'); + f('51925','51926','51927','51928'); + f('51929','51930','51931','51932'); + f('51933','51934','51935','51936'); + f('51937','51938','51939','51940'); + f('51941','51942','51943','51944'); + f('51945','51946','51947','51948'); + f('51949','51950','51951','51952'); + f('51953','51954','51955','51956'); + f('51957','51958','51959','51960'); + f('51961','51962','51963','51964'); + f('51965','51966','51967','51968'); + f('51969','51970','51971','51972'); + f('51973','51974','51975','51976'); + f('51977','51978','51979','51980'); + f('51981','51982','51983','51984'); + f('51985','51986','51987','51988'); + f('51989','51990','51991','51992'); + f('51993','51994','51995','51996'); + f('51997','51998','51999','52000'); + f('52001','52002','52003','52004'); + f('52005','52006','52007','52008'); + f('52009','52010','52011','52012'); + f('52013','52014','52015','52016'); + f('52017','52018','52019','52020'); + f('52021','52022','52023','52024'); + f('52025','52026','52027','52028'); + f('52029','52030','52031','52032'); + f('52033','52034','52035','52036'); + f('52037','52038','52039','52040'); + f('52041','52042','52043','52044'); + f('52045','52046','52047','52048'); + f('52049','52050','52051','52052'); + f('52053','52054','52055','52056'); + f('52057','52058','52059','52060'); + f('52061','52062','52063','52064'); + f('52065','52066','52067','52068'); + f('52069','52070','52071','52072'); + f('52073','52074','52075','52076'); + f('52077','52078','52079','52080'); + f('52081','52082','52083','52084'); + f('52085','52086','52087','52088'); + f('52089','52090','52091','52092'); + f('52093','52094','52095','52096'); + f('52097','52098','52099','52100'); + f('52101','52102','52103','52104'); + f('52105','52106','52107','52108'); + f('52109','52110','52111','52112'); + f('52113','52114','52115','52116'); + f('52117','52118','52119','52120'); + f('52121','52122','52123','52124'); + f('52125','52126','52127','52128'); + f('52129','52130','52131','52132'); + f('52133','52134','52135','52136'); + f('52137','52138','52139','52140'); + f('52141','52142','52143','52144'); + f('52145','52146','52147','52148'); + f('52149','52150','52151','52152'); + f('52153','52154','52155','52156'); + f('52157','52158','52159','52160'); + f('52161','52162','52163','52164'); + f('52165','52166','52167','52168'); + f('52169','52170','52171','52172'); + f('52173','52174','52175','52176'); + f('52177','52178','52179','52180'); + f('52181','52182','52183','52184'); + f('52185','52186','52187','52188'); + f('52189','52190','52191','52192'); + f('52193','52194','52195','52196'); + f('52197','52198','52199','52200'); + f('52201','52202','52203','52204'); + f('52205','52206','52207','52208'); + f('52209','52210','52211','52212'); + f('52213','52214','52215','52216'); + f('52217','52218','52219','52220'); + f('52221','52222','52223','52224'); + f('52225','52226','52227','52228'); + f('52229','52230','52231','52232'); + f('52233','52234','52235','52236'); + f('52237','52238','52239','52240'); + f('52241','52242','52243','52244'); + f('52245','52246','52247','52248'); + f('52249','52250','52251','52252'); + f('52253','52254','52255','52256'); + f('52257','52258','52259','52260'); + f('52261','52262','52263','52264'); + f('52265','52266','52267','52268'); + f('52269','52270','52271','52272'); + f('52273','52274','52275','52276'); + f('52277','52278','52279','52280'); + f('52281','52282','52283','52284'); + f('52285','52286','52287','52288'); + f('52289','52290','52291','52292'); + f('52293','52294','52295','52296'); + f('52297','52298','52299','52300'); + f('52301','52302','52303','52304'); + f('52305','52306','52307','52308'); + f('52309','52310','52311','52312'); + f('52313','52314','52315','52316'); + f('52317','52318','52319','52320'); + f('52321','52322','52323','52324'); + f('52325','52326','52327','52328'); + f('52329','52330','52331','52332'); + f('52333','52334','52335','52336'); + f('52337','52338','52339','52340'); + f('52341','52342','52343','52344'); + f('52345','52346','52347','52348'); + f('52349','52350','52351','52352'); + f('52353','52354','52355','52356'); + f('52357','52358','52359','52360'); + f('52361','52362','52363','52364'); + f('52365','52366','52367','52368'); + f('52369','52370','52371','52372'); + f('52373','52374','52375','52376'); + f('52377','52378','52379','52380'); + f('52381','52382','52383','52384'); + f('52385','52386','52387','52388'); + f('52389','52390','52391','52392'); + f('52393','52394','52395','52396'); + f('52397','52398','52399','52400'); + f('52401','52402','52403','52404'); + f('52405','52406','52407','52408'); + f('52409','52410','52411','52412'); + f('52413','52414','52415','52416'); + f('52417','52418','52419','52420'); + f('52421','52422','52423','52424'); + f('52425','52426','52427','52428'); + f('52429','52430','52431','52432'); + f('52433','52434','52435','52436'); + f('52437','52438','52439','52440'); + f('52441','52442','52443','52444'); + f('52445','52446','52447','52448'); + f('52449','52450','52451','52452'); + f('52453','52454','52455','52456'); + f('52457','52458','52459','52460'); + f('52461','52462','52463','52464'); + f('52465','52466','52467','52468'); + f('52469','52470','52471','52472'); + f('52473','52474','52475','52476'); + f('52477','52478','52479','52480'); + f('52481','52482','52483','52484'); + f('52485','52486','52487','52488'); + f('52489','52490','52491','52492'); + f('52493','52494','52495','52496'); + f('52497','52498','52499','52500'); + f('52501','52502','52503','52504'); + f('52505','52506','52507','52508'); + f('52509','52510','52511','52512'); + f('52513','52514','52515','52516'); + f('52517','52518','52519','52520'); + f('52521','52522','52523','52524'); + f('52525','52526','52527','52528'); + f('52529','52530','52531','52532'); + f('52533','52534','52535','52536'); + f('52537','52538','52539','52540'); + f('52541','52542','52543','52544'); + f('52545','52546','52547','52548'); + f('52549','52550','52551','52552'); + f('52553','52554','52555','52556'); + f('52557','52558','52559','52560'); + f('52561','52562','52563','52564'); + f('52565','52566','52567','52568'); + f('52569','52570','52571','52572'); + f('52573','52574','52575','52576'); + f('52577','52578','52579','52580'); + f('52581','52582','52583','52584'); + f('52585','52586','52587','52588'); + f('52589','52590','52591','52592'); + f('52593','52594','52595','52596'); + f('52597','52598','52599','52600'); + f('52601','52602','52603','52604'); + f('52605','52606','52607','52608'); + f('52609','52610','52611','52612'); + f('52613','52614','52615','52616'); + f('52617','52618','52619','52620'); + f('52621','52622','52623','52624'); + f('52625','52626','52627','52628'); + f('52629','52630','52631','52632'); + f('52633','52634','52635','52636'); + f('52637','52638','52639','52640'); + f('52641','52642','52643','52644'); + f('52645','52646','52647','52648'); + f('52649','52650','52651','52652'); + f('52653','52654','52655','52656'); + f('52657','52658','52659','52660'); + f('52661','52662','52663','52664'); + f('52665','52666','52667','52668'); + f('52669','52670','52671','52672'); + f('52673','52674','52675','52676'); + f('52677','52678','52679','52680'); + f('52681','52682','52683','52684'); + f('52685','52686','52687','52688'); + f('52689','52690','52691','52692'); + f('52693','52694','52695','52696'); + f('52697','52698','52699','52700'); + f('52701','52702','52703','52704'); + f('52705','52706','52707','52708'); + f('52709','52710','52711','52712'); + f('52713','52714','52715','52716'); + f('52717','52718','52719','52720'); + f('52721','52722','52723','52724'); + f('52725','52726','52727','52728'); + f('52729','52730','52731','52732'); + f('52733','52734','52735','52736'); + f('52737','52738','52739','52740'); + f('52741','52742','52743','52744'); + f('52745','52746','52747','52748'); + f('52749','52750','52751','52752'); + f('52753','52754','52755','52756'); + f('52757','52758','52759','52760'); + f('52761','52762','52763','52764'); + f('52765','52766','52767','52768'); + f('52769','52770','52771','52772'); + f('52773','52774','52775','52776'); + f('52777','52778','52779','52780'); + f('52781','52782','52783','52784'); + f('52785','52786','52787','52788'); + f('52789','52790','52791','52792'); + f('52793','52794','52795','52796'); + f('52797','52798','52799','52800'); + f('52801','52802','52803','52804'); + f('52805','52806','52807','52808'); + f('52809','52810','52811','52812'); + f('52813','52814','52815','52816'); + f('52817','52818','52819','52820'); + f('52821','52822','52823','52824'); + f('52825','52826','52827','52828'); + f('52829','52830','52831','52832'); + f('52833','52834','52835','52836'); + f('52837','52838','52839','52840'); + f('52841','52842','52843','52844'); + f('52845','52846','52847','52848'); + f('52849','52850','52851','52852'); + f('52853','52854','52855','52856'); + f('52857','52858','52859','52860'); + f('52861','52862','52863','52864'); + f('52865','52866','52867','52868'); + f('52869','52870','52871','52872'); + f('52873','52874','52875','52876'); + f('52877','52878','52879','52880'); + f('52881','52882','52883','52884'); + f('52885','52886','52887','52888'); + f('52889','52890','52891','52892'); + f('52893','52894','52895','52896'); + f('52897','52898','52899','52900'); + f('52901','52902','52903','52904'); + f('52905','52906','52907','52908'); + f('52909','52910','52911','52912'); + f('52913','52914','52915','52916'); + f('52917','52918','52919','52920'); + f('52921','52922','52923','52924'); + f('52925','52926','52927','52928'); + f('52929','52930','52931','52932'); + f('52933','52934','52935','52936'); + f('52937','52938','52939','52940'); + f('52941','52942','52943','52944'); + f('52945','52946','52947','52948'); + f('52949','52950','52951','52952'); + f('52953','52954','52955','52956'); + f('52957','52958','52959','52960'); + f('52961','52962','52963','52964'); + f('52965','52966','52967','52968'); + f('52969','52970','52971','52972'); + f('52973','52974','52975','52976'); + f('52977','52978','52979','52980'); + f('52981','52982','52983','52984'); + f('52985','52986','52987','52988'); + f('52989','52990','52991','52992'); + f('52993','52994','52995','52996'); + f('52997','52998','52999','53000'); + f('53001','53002','53003','53004'); + f('53005','53006','53007','53008'); + f('53009','53010','53011','53012'); + f('53013','53014','53015','53016'); + f('53017','53018','53019','53020'); + f('53021','53022','53023','53024'); + f('53025','53026','53027','53028'); + f('53029','53030','53031','53032'); + f('53033','53034','53035','53036'); + f('53037','53038','53039','53040'); + f('53041','53042','53043','53044'); + f('53045','53046','53047','53048'); + f('53049','53050','53051','53052'); + f('53053','53054','53055','53056'); + f('53057','53058','53059','53060'); + f('53061','53062','53063','53064'); + f('53065','53066','53067','53068'); + f('53069','53070','53071','53072'); + f('53073','53074','53075','53076'); + f('53077','53078','53079','53080'); + f('53081','53082','53083','53084'); + f('53085','53086','53087','53088'); + f('53089','53090','53091','53092'); + f('53093','53094','53095','53096'); + f('53097','53098','53099','53100'); + f('53101','53102','53103','53104'); + f('53105','53106','53107','53108'); + f('53109','53110','53111','53112'); + f('53113','53114','53115','53116'); + f('53117','53118','53119','53120'); + f('53121','53122','53123','53124'); + f('53125','53126','53127','53128'); + f('53129','53130','53131','53132'); + f('53133','53134','53135','53136'); + f('53137','53138','53139','53140'); + f('53141','53142','53143','53144'); + f('53145','53146','53147','53148'); + f('53149','53150','53151','53152'); + f('53153','53154','53155','53156'); + f('53157','53158','53159','53160'); + f('53161','53162','53163','53164'); + f('53165','53166','53167','53168'); + f('53169','53170','53171','53172'); + f('53173','53174','53175','53176'); + f('53177','53178','53179','53180'); + f('53181','53182','53183','53184'); + f('53185','53186','53187','53188'); + f('53189','53190','53191','53192'); + f('53193','53194','53195','53196'); + f('53197','53198','53199','53200'); + f('53201','53202','53203','53204'); + f('53205','53206','53207','53208'); + f('53209','53210','53211','53212'); + f('53213','53214','53215','53216'); + f('53217','53218','53219','53220'); + f('53221','53222','53223','53224'); + f('53225','53226','53227','53228'); + f('53229','53230','53231','53232'); + f('53233','53234','53235','53236'); + f('53237','53238','53239','53240'); + f('53241','53242','53243','53244'); + f('53245','53246','53247','53248'); + f('53249','53250','53251','53252'); + f('53253','53254','53255','53256'); + f('53257','53258','53259','53260'); + f('53261','53262','53263','53264'); + f('53265','53266','53267','53268'); + f('53269','53270','53271','53272'); + f('53273','53274','53275','53276'); + f('53277','53278','53279','53280'); + f('53281','53282','53283','53284'); + f('53285','53286','53287','53288'); + f('53289','53290','53291','53292'); + f('53293','53294','53295','53296'); + f('53297','53298','53299','53300'); + f('53301','53302','53303','53304'); + f('53305','53306','53307','53308'); + f('53309','53310','53311','53312'); + f('53313','53314','53315','53316'); + f('53317','53318','53319','53320'); + f('53321','53322','53323','53324'); + f('53325','53326','53327','53328'); + f('53329','53330','53331','53332'); + f('53333','53334','53335','53336'); + f('53337','53338','53339','53340'); + f('53341','53342','53343','53344'); + f('53345','53346','53347','53348'); + f('53349','53350','53351','53352'); + f('53353','53354','53355','53356'); + f('53357','53358','53359','53360'); + f('53361','53362','53363','53364'); + f('53365','53366','53367','53368'); + f('53369','53370','53371','53372'); + f('53373','53374','53375','53376'); + f('53377','53378','53379','53380'); + f('53381','53382','53383','53384'); + f('53385','53386','53387','53388'); + f('53389','53390','53391','53392'); + f('53393','53394','53395','53396'); + f('53397','53398','53399','53400'); + f('53401','53402','53403','53404'); + f('53405','53406','53407','53408'); + f('53409','53410','53411','53412'); + f('53413','53414','53415','53416'); + f('53417','53418','53419','53420'); + f('53421','53422','53423','53424'); + f('53425','53426','53427','53428'); + f('53429','53430','53431','53432'); + f('53433','53434','53435','53436'); + f('53437','53438','53439','53440'); + f('53441','53442','53443','53444'); + f('53445','53446','53447','53448'); + f('53449','53450','53451','53452'); + f('53453','53454','53455','53456'); + f('53457','53458','53459','53460'); + f('53461','53462','53463','53464'); + f('53465','53466','53467','53468'); + f('53469','53470','53471','53472'); + f('53473','53474','53475','53476'); + f('53477','53478','53479','53480'); + f('53481','53482','53483','53484'); + f('53485','53486','53487','53488'); + f('53489','53490','53491','53492'); + f('53493','53494','53495','53496'); + f('53497','53498','53499','53500'); + f('53501','53502','53503','53504'); + f('53505','53506','53507','53508'); + f('53509','53510','53511','53512'); + f('53513','53514','53515','53516'); + f('53517','53518','53519','53520'); + f('53521','53522','53523','53524'); + f('53525','53526','53527','53528'); + f('53529','53530','53531','53532'); + f('53533','53534','53535','53536'); + f('53537','53538','53539','53540'); + f('53541','53542','53543','53544'); + f('53545','53546','53547','53548'); + f('53549','53550','53551','53552'); + f('53553','53554','53555','53556'); + f('53557','53558','53559','53560'); + f('53561','53562','53563','53564'); + f('53565','53566','53567','53568'); + f('53569','53570','53571','53572'); + f('53573','53574','53575','53576'); + f('53577','53578','53579','53580'); + f('53581','53582','53583','53584'); + f('53585','53586','53587','53588'); + f('53589','53590','53591','53592'); + f('53593','53594','53595','53596'); + f('53597','53598','53599','53600'); + f('53601','53602','53603','53604'); + f('53605','53606','53607','53608'); + f('53609','53610','53611','53612'); + f('53613','53614','53615','53616'); + f('53617','53618','53619','53620'); + f('53621','53622','53623','53624'); + f('53625','53626','53627','53628'); + f('53629','53630','53631','53632'); + f('53633','53634','53635','53636'); + f('53637','53638','53639','53640'); + f('53641','53642','53643','53644'); + f('53645','53646','53647','53648'); + f('53649','53650','53651','53652'); + f('53653','53654','53655','53656'); + f('53657','53658','53659','53660'); + f('53661','53662','53663','53664'); + f('53665','53666','53667','53668'); + f('53669','53670','53671','53672'); + f('53673','53674','53675','53676'); + f('53677','53678','53679','53680'); + f('53681','53682','53683','53684'); + f('53685','53686','53687','53688'); + f('53689','53690','53691','53692'); + f('53693','53694','53695','53696'); + f('53697','53698','53699','53700'); + f('53701','53702','53703','53704'); + f('53705','53706','53707','53708'); + f('53709','53710','53711','53712'); + f('53713','53714','53715','53716'); + f('53717','53718','53719','53720'); + f('53721','53722','53723','53724'); + f('53725','53726','53727','53728'); + f('53729','53730','53731','53732'); + f('53733','53734','53735','53736'); + f('53737','53738','53739','53740'); + f('53741','53742','53743','53744'); + f('53745','53746','53747','53748'); + f('53749','53750','53751','53752'); + f('53753','53754','53755','53756'); + f('53757','53758','53759','53760'); + f('53761','53762','53763','53764'); + f('53765','53766','53767','53768'); + f('53769','53770','53771','53772'); + f('53773','53774','53775','53776'); + f('53777','53778','53779','53780'); + f('53781','53782','53783','53784'); + f('53785','53786','53787','53788'); + f('53789','53790','53791','53792'); + f('53793','53794','53795','53796'); + f('53797','53798','53799','53800'); + f('53801','53802','53803','53804'); + f('53805','53806','53807','53808'); + f('53809','53810','53811','53812'); + f('53813','53814','53815','53816'); + f('53817','53818','53819','53820'); + f('53821','53822','53823','53824'); + f('53825','53826','53827','53828'); + f('53829','53830','53831','53832'); + f('53833','53834','53835','53836'); + f('53837','53838','53839','53840'); + f('53841','53842','53843','53844'); + f('53845','53846','53847','53848'); + f('53849','53850','53851','53852'); + f('53853','53854','53855','53856'); + f('53857','53858','53859','53860'); + f('53861','53862','53863','53864'); + f('53865','53866','53867','53868'); + f('53869','53870','53871','53872'); + f('53873','53874','53875','53876'); + f('53877','53878','53879','53880'); + f('53881','53882','53883','53884'); + f('53885','53886','53887','53888'); + f('53889','53890','53891','53892'); + f('53893','53894','53895','53896'); + f('53897','53898','53899','53900'); + f('53901','53902','53903','53904'); + f('53905','53906','53907','53908'); + f('53909','53910','53911','53912'); + f('53913','53914','53915','53916'); + f('53917','53918','53919','53920'); + f('53921','53922','53923','53924'); + f('53925','53926','53927','53928'); + f('53929','53930','53931','53932'); + f('53933','53934','53935','53936'); + f('53937','53938','53939','53940'); + f('53941','53942','53943','53944'); + f('53945','53946','53947','53948'); + f('53949','53950','53951','53952'); + f('53953','53954','53955','53956'); + f('53957','53958','53959','53960'); + f('53961','53962','53963','53964'); + f('53965','53966','53967','53968'); + f('53969','53970','53971','53972'); + f('53973','53974','53975','53976'); + f('53977','53978','53979','53980'); + f('53981','53982','53983','53984'); + f('53985','53986','53987','53988'); + f('53989','53990','53991','53992'); + f('53993','53994','53995','53996'); + f('53997','53998','53999','54000'); + f('54001','54002','54003','54004'); + f('54005','54006','54007','54008'); + f('54009','54010','54011','54012'); + f('54013','54014','54015','54016'); + f('54017','54018','54019','54020'); + f('54021','54022','54023','54024'); + f('54025','54026','54027','54028'); + f('54029','54030','54031','54032'); + f('54033','54034','54035','54036'); + f('54037','54038','54039','54040'); + f('54041','54042','54043','54044'); + f('54045','54046','54047','54048'); + f('54049','54050','54051','54052'); + f('54053','54054','54055','54056'); + f('54057','54058','54059','54060'); + f('54061','54062','54063','54064'); + f('54065','54066','54067','54068'); + f('54069','54070','54071','54072'); + f('54073','54074','54075','54076'); + f('54077','54078','54079','54080'); + f('54081','54082','54083','54084'); + f('54085','54086','54087','54088'); + f('54089','54090','54091','54092'); + f('54093','54094','54095','54096'); + f('54097','54098','54099','54100'); + f('54101','54102','54103','54104'); + f('54105','54106','54107','54108'); + f('54109','54110','54111','54112'); + f('54113','54114','54115','54116'); + f('54117','54118','54119','54120'); + f('54121','54122','54123','54124'); + f('54125','54126','54127','54128'); + f('54129','54130','54131','54132'); + f('54133','54134','54135','54136'); + f('54137','54138','54139','54140'); + f('54141','54142','54143','54144'); + f('54145','54146','54147','54148'); + f('54149','54150','54151','54152'); + f('54153','54154','54155','54156'); + f('54157','54158','54159','54160'); + f('54161','54162','54163','54164'); + f('54165','54166','54167','54168'); + f('54169','54170','54171','54172'); + f('54173','54174','54175','54176'); + f('54177','54178','54179','54180'); + f('54181','54182','54183','54184'); + f('54185','54186','54187','54188'); + f('54189','54190','54191','54192'); + f('54193','54194','54195','54196'); + f('54197','54198','54199','54200'); + f('54201','54202','54203','54204'); + f('54205','54206','54207','54208'); + f('54209','54210','54211','54212'); + f('54213','54214','54215','54216'); + f('54217','54218','54219','54220'); + f('54221','54222','54223','54224'); + f('54225','54226','54227','54228'); + f('54229','54230','54231','54232'); + f('54233','54234','54235','54236'); + f('54237','54238','54239','54240'); + f('54241','54242','54243','54244'); + f('54245','54246','54247','54248'); + f('54249','54250','54251','54252'); + f('54253','54254','54255','54256'); + f('54257','54258','54259','54260'); + f('54261','54262','54263','54264'); + f('54265','54266','54267','54268'); + f('54269','54270','54271','54272'); + f('54273','54274','54275','54276'); + f('54277','54278','54279','54280'); + f('54281','54282','54283','54284'); + f('54285','54286','54287','54288'); + f('54289','54290','54291','54292'); + f('54293','54294','54295','54296'); + f('54297','54298','54299','54300'); + f('54301','54302','54303','54304'); + f('54305','54306','54307','54308'); + f('54309','54310','54311','54312'); + f('54313','54314','54315','54316'); + f('54317','54318','54319','54320'); + f('54321','54322','54323','54324'); + f('54325','54326','54327','54328'); + f('54329','54330','54331','54332'); + f('54333','54334','54335','54336'); + f('54337','54338','54339','54340'); + f('54341','54342','54343','54344'); + f('54345','54346','54347','54348'); + f('54349','54350','54351','54352'); + f('54353','54354','54355','54356'); + f('54357','54358','54359','54360'); + f('54361','54362','54363','54364'); + f('54365','54366','54367','54368'); + f('54369','54370','54371','54372'); + f('54373','54374','54375','54376'); + f('54377','54378','54379','54380'); + f('54381','54382','54383','54384'); + f('54385','54386','54387','54388'); + f('54389','54390','54391','54392'); + f('54393','54394','54395','54396'); + f('54397','54398','54399','54400'); + f('54401','54402','54403','54404'); + f('54405','54406','54407','54408'); + f('54409','54410','54411','54412'); + f('54413','54414','54415','54416'); + f('54417','54418','54419','54420'); + f('54421','54422','54423','54424'); + f('54425','54426','54427','54428'); + f('54429','54430','54431','54432'); + f('54433','54434','54435','54436'); + f('54437','54438','54439','54440'); + f('54441','54442','54443','54444'); + f('54445','54446','54447','54448'); + f('54449','54450','54451','54452'); + f('54453','54454','54455','54456'); + f('54457','54458','54459','54460'); + f('54461','54462','54463','54464'); + f('54465','54466','54467','54468'); + f('54469','54470','54471','54472'); + f('54473','54474','54475','54476'); + f('54477','54478','54479','54480'); + f('54481','54482','54483','54484'); + f('54485','54486','54487','54488'); + f('54489','54490','54491','54492'); + f('54493','54494','54495','54496'); + f('54497','54498','54499','54500'); + f('54501','54502','54503','54504'); + f('54505','54506','54507','54508'); + f('54509','54510','54511','54512'); + f('54513','54514','54515','54516'); + f('54517','54518','54519','54520'); + f('54521','54522','54523','54524'); + f('54525','54526','54527','54528'); + f('54529','54530','54531','54532'); + f('54533','54534','54535','54536'); + f('54537','54538','54539','54540'); + f('54541','54542','54543','54544'); + f('54545','54546','54547','54548'); + f('54549','54550','54551','54552'); + f('54553','54554','54555','54556'); + f('54557','54558','54559','54560'); + f('54561','54562','54563','54564'); + f('54565','54566','54567','54568'); + f('54569','54570','54571','54572'); + f('54573','54574','54575','54576'); + f('54577','54578','54579','54580'); + f('54581','54582','54583','54584'); + f('54585','54586','54587','54588'); + f('54589','54590','54591','54592'); + f('54593','54594','54595','54596'); + f('54597','54598','54599','54600'); + f('54601','54602','54603','54604'); + f('54605','54606','54607','54608'); + f('54609','54610','54611','54612'); + f('54613','54614','54615','54616'); + f('54617','54618','54619','54620'); + f('54621','54622','54623','54624'); + f('54625','54626','54627','54628'); + f('54629','54630','54631','54632'); + f('54633','54634','54635','54636'); + f('54637','54638','54639','54640'); + f('54641','54642','54643','54644'); + f('54645','54646','54647','54648'); + f('54649','54650','54651','54652'); + f('54653','54654','54655','54656'); + f('54657','54658','54659','54660'); + f('54661','54662','54663','54664'); + f('54665','54666','54667','54668'); + f('54669','54670','54671','54672'); + f('54673','54674','54675','54676'); + f('54677','54678','54679','54680'); + f('54681','54682','54683','54684'); + f('54685','54686','54687','54688'); + f('54689','54690','54691','54692'); + f('54693','54694','54695','54696'); + f('54697','54698','54699','54700'); + f('54701','54702','54703','54704'); + f('54705','54706','54707','54708'); + f('54709','54710','54711','54712'); + f('54713','54714','54715','54716'); + f('54717','54718','54719','54720'); + f('54721','54722','54723','54724'); + f('54725','54726','54727','54728'); + f('54729','54730','54731','54732'); + f('54733','54734','54735','54736'); + f('54737','54738','54739','54740'); + f('54741','54742','54743','54744'); + f('54745','54746','54747','54748'); + f('54749','54750','54751','54752'); + f('54753','54754','54755','54756'); + f('54757','54758','54759','54760'); + f('54761','54762','54763','54764'); + f('54765','54766','54767','54768'); + f('54769','54770','54771','54772'); + f('54773','54774','54775','54776'); + f('54777','54778','54779','54780'); + f('54781','54782','54783','54784'); + f('54785','54786','54787','54788'); + f('54789','54790','54791','54792'); + f('54793','54794','54795','54796'); + f('54797','54798','54799','54800'); + f('54801','54802','54803','54804'); + f('54805','54806','54807','54808'); + f('54809','54810','54811','54812'); + f('54813','54814','54815','54816'); + f('54817','54818','54819','54820'); + f('54821','54822','54823','54824'); + f('54825','54826','54827','54828'); + f('54829','54830','54831','54832'); + f('54833','54834','54835','54836'); + f('54837','54838','54839','54840'); + f('54841','54842','54843','54844'); + f('54845','54846','54847','54848'); + f('54849','54850','54851','54852'); + f('54853','54854','54855','54856'); + f('54857','54858','54859','54860'); + f('54861','54862','54863','54864'); + f('54865','54866','54867','54868'); + f('54869','54870','54871','54872'); + f('54873','54874','54875','54876'); + f('54877','54878','54879','54880'); + f('54881','54882','54883','54884'); + f('54885','54886','54887','54888'); + f('54889','54890','54891','54892'); + f('54893','54894','54895','54896'); + f('54897','54898','54899','54900'); + f('54901','54902','54903','54904'); + f('54905','54906','54907','54908'); + f('54909','54910','54911','54912'); + f('54913','54914','54915','54916'); + f('54917','54918','54919','54920'); + f('54921','54922','54923','54924'); + f('54925','54926','54927','54928'); + f('54929','54930','54931','54932'); + f('54933','54934','54935','54936'); + f('54937','54938','54939','54940'); + f('54941','54942','54943','54944'); + f('54945','54946','54947','54948'); + f('54949','54950','54951','54952'); + f('54953','54954','54955','54956'); + f('54957','54958','54959','54960'); + f('54961','54962','54963','54964'); + f('54965','54966','54967','54968'); + f('54969','54970','54971','54972'); + f('54973','54974','54975','54976'); + f('54977','54978','54979','54980'); + f('54981','54982','54983','54984'); + f('54985','54986','54987','54988'); + f('54989','54990','54991','54992'); + f('54993','54994','54995','54996'); + f('54997','54998','54999','55000'); + f('55001','55002','55003','55004'); + f('55005','55006','55007','55008'); + f('55009','55010','55011','55012'); + f('55013','55014','55015','55016'); + f('55017','55018','55019','55020'); + f('55021','55022','55023','55024'); + f('55025','55026','55027','55028'); + f('55029','55030','55031','55032'); + f('55033','55034','55035','55036'); + f('55037','55038','55039','55040'); + f('55041','55042','55043','55044'); + f('55045','55046','55047','55048'); + f('55049','55050','55051','55052'); + f('55053','55054','55055','55056'); + f('55057','55058','55059','55060'); + f('55061','55062','55063','55064'); + f('55065','55066','55067','55068'); + f('55069','55070','55071','55072'); + f('55073','55074','55075','55076'); + f('55077','55078','55079','55080'); + f('55081','55082','55083','55084'); + f('55085','55086','55087','55088'); + f('55089','55090','55091','55092'); + f('55093','55094','55095','55096'); + f('55097','55098','55099','55100'); + f('55101','55102','55103','55104'); + f('55105','55106','55107','55108'); + f('55109','55110','55111','55112'); + f('55113','55114','55115','55116'); + f('55117','55118','55119','55120'); + f('55121','55122','55123','55124'); + f('55125','55126','55127','55128'); + f('55129','55130','55131','55132'); + f('55133','55134','55135','55136'); + f('55137','55138','55139','55140'); + f('55141','55142','55143','55144'); + f('55145','55146','55147','55148'); + f('55149','55150','55151','55152'); + f('55153','55154','55155','55156'); + f('55157','55158','55159','55160'); + f('55161','55162','55163','55164'); + f('55165','55166','55167','55168'); + f('55169','55170','55171','55172'); + f('55173','55174','55175','55176'); + f('55177','55178','55179','55180'); + f('55181','55182','55183','55184'); + f('55185','55186','55187','55188'); + f('55189','55190','55191','55192'); + f('55193','55194','55195','55196'); + f('55197','55198','55199','55200'); + f('55201','55202','55203','55204'); + f('55205','55206','55207','55208'); + f('55209','55210','55211','55212'); + f('55213','55214','55215','55216'); + f('55217','55218','55219','55220'); + f('55221','55222','55223','55224'); + f('55225','55226','55227','55228'); + f('55229','55230','55231','55232'); + f('55233','55234','55235','55236'); + f('55237','55238','55239','55240'); + f('55241','55242','55243','55244'); + f('55245','55246','55247','55248'); + f('55249','55250','55251','55252'); + f('55253','55254','55255','55256'); + f('55257','55258','55259','55260'); + f('55261','55262','55263','55264'); + f('55265','55266','55267','55268'); + f('55269','55270','55271','55272'); + f('55273','55274','55275','55276'); + f('55277','55278','55279','55280'); + f('55281','55282','55283','55284'); + f('55285','55286','55287','55288'); + f('55289','55290','55291','55292'); + f('55293','55294','55295','55296'); + f('55297','55298','55299','55300'); + f('55301','55302','55303','55304'); + f('55305','55306','55307','55308'); + f('55309','55310','55311','55312'); + f('55313','55314','55315','55316'); + f('55317','55318','55319','55320'); + f('55321','55322','55323','55324'); + f('55325','55326','55327','55328'); + f('55329','55330','55331','55332'); + f('55333','55334','55335','55336'); + f('55337','55338','55339','55340'); + f('55341','55342','55343','55344'); + f('55345','55346','55347','55348'); + f('55349','55350','55351','55352'); + f('55353','55354','55355','55356'); + f('55357','55358','55359','55360'); + f('55361','55362','55363','55364'); + f('55365','55366','55367','55368'); + f('55369','55370','55371','55372'); + f('55373','55374','55375','55376'); + f('55377','55378','55379','55380'); + f('55381','55382','55383','55384'); + f('55385','55386','55387','55388'); + f('55389','55390','55391','55392'); + f('55393','55394','55395','55396'); + f('55397','55398','55399','55400'); + f('55401','55402','55403','55404'); + f('55405','55406','55407','55408'); + f('55409','55410','55411','55412'); + f('55413','55414','55415','55416'); + f('55417','55418','55419','55420'); + f('55421','55422','55423','55424'); + f('55425','55426','55427','55428'); + f('55429','55430','55431','55432'); + f('55433','55434','55435','55436'); + f('55437','55438','55439','55440'); + f('55441','55442','55443','55444'); + f('55445','55446','55447','55448'); + f('55449','55450','55451','55452'); + f('55453','55454','55455','55456'); + f('55457','55458','55459','55460'); + f('55461','55462','55463','55464'); + f('55465','55466','55467','55468'); + f('55469','55470','55471','55472'); + f('55473','55474','55475','55476'); + f('55477','55478','55479','55480'); + f('55481','55482','55483','55484'); + f('55485','55486','55487','55488'); + f('55489','55490','55491','55492'); + f('55493','55494','55495','55496'); + f('55497','55498','55499','55500'); + f('55501','55502','55503','55504'); + f('55505','55506','55507','55508'); + f('55509','55510','55511','55512'); + f('55513','55514','55515','55516'); + f('55517','55518','55519','55520'); + f('55521','55522','55523','55524'); + f('55525','55526','55527','55528'); + f('55529','55530','55531','55532'); + f('55533','55534','55535','55536'); + f('55537','55538','55539','55540'); + f('55541','55542','55543','55544'); + f('55545','55546','55547','55548'); + f('55549','55550','55551','55552'); + f('55553','55554','55555','55556'); + f('55557','55558','55559','55560'); + f('55561','55562','55563','55564'); + f('55565','55566','55567','55568'); + f('55569','55570','55571','55572'); + f('55573','55574','55575','55576'); + f('55577','55578','55579','55580'); + f('55581','55582','55583','55584'); + f('55585','55586','55587','55588'); + f('55589','55590','55591','55592'); + f('55593','55594','55595','55596'); + f('55597','55598','55599','55600'); + f('55601','55602','55603','55604'); + f('55605','55606','55607','55608'); + f('55609','55610','55611','55612'); + f('55613','55614','55615','55616'); + f('55617','55618','55619','55620'); + f('55621','55622','55623','55624'); + f('55625','55626','55627','55628'); + f('55629','55630','55631','55632'); + f('55633','55634','55635','55636'); + f('55637','55638','55639','55640'); + f('55641','55642','55643','55644'); + f('55645','55646','55647','55648'); + f('55649','55650','55651','55652'); + f('55653','55654','55655','55656'); + f('55657','55658','55659','55660'); + f('55661','55662','55663','55664'); + f('55665','55666','55667','55668'); + f('55669','55670','55671','55672'); + f('55673','55674','55675','55676'); + f('55677','55678','55679','55680'); + f('55681','55682','55683','55684'); + f('55685','55686','55687','55688'); + f('55689','55690','55691','55692'); + f('55693','55694','55695','55696'); + f('55697','55698','55699','55700'); + f('55701','55702','55703','55704'); + f('55705','55706','55707','55708'); + f('55709','55710','55711','55712'); + f('55713','55714','55715','55716'); + f('55717','55718','55719','55720'); + f('55721','55722','55723','55724'); + f('55725','55726','55727','55728'); + f('55729','55730','55731','55732'); + f('55733','55734','55735','55736'); + f('55737','55738','55739','55740'); + f('55741','55742','55743','55744'); + f('55745','55746','55747','55748'); + f('55749','55750','55751','55752'); + f('55753','55754','55755','55756'); + f('55757','55758','55759','55760'); + f('55761','55762','55763','55764'); + f('55765','55766','55767','55768'); + f('55769','55770','55771','55772'); + f('55773','55774','55775','55776'); + f('55777','55778','55779','55780'); + f('55781','55782','55783','55784'); + f('55785','55786','55787','55788'); + f('55789','55790','55791','55792'); + f('55793','55794','55795','55796'); + f('55797','55798','55799','55800'); + f('55801','55802','55803','55804'); + f('55805','55806','55807','55808'); + f('55809','55810','55811','55812'); + f('55813','55814','55815','55816'); + f('55817','55818','55819','55820'); + f('55821','55822','55823','55824'); + f('55825','55826','55827','55828'); + f('55829','55830','55831','55832'); + f('55833','55834','55835','55836'); + f('55837','55838','55839','55840'); + f('55841','55842','55843','55844'); + f('55845','55846','55847','55848'); + f('55849','55850','55851','55852'); + f('55853','55854','55855','55856'); + f('55857','55858','55859','55860'); + f('55861','55862','55863','55864'); + f('55865','55866','55867','55868'); + f('55869','55870','55871','55872'); + f('55873','55874','55875','55876'); + f('55877','55878','55879','55880'); + f('55881','55882','55883','55884'); + f('55885','55886','55887','55888'); + f('55889','55890','55891','55892'); + f('55893','55894','55895','55896'); + f('55897','55898','55899','55900'); + f('55901','55902','55903','55904'); + f('55905','55906','55907','55908'); + f('55909','55910','55911','55912'); + f('55913','55914','55915','55916'); + f('55917','55918','55919','55920'); + f('55921','55922','55923','55924'); + f('55925','55926','55927','55928'); + f('55929','55930','55931','55932'); + f('55933','55934','55935','55936'); + f('55937','55938','55939','55940'); + f('55941','55942','55943','55944'); + f('55945','55946','55947','55948'); + f('55949','55950','55951','55952'); + f('55953','55954','55955','55956'); + f('55957','55958','55959','55960'); + f('55961','55962','55963','55964'); + f('55965','55966','55967','55968'); + f('55969','55970','55971','55972'); + f('55973','55974','55975','55976'); + f('55977','55978','55979','55980'); + f('55981','55982','55983','55984'); + f('55985','55986','55987','55988'); + f('55989','55990','55991','55992'); + f('55993','55994','55995','55996'); + f('55997','55998','55999','56000'); + f('56001','56002','56003','56004'); + f('56005','56006','56007','56008'); + f('56009','56010','56011','56012'); + f('56013','56014','56015','56016'); + f('56017','56018','56019','56020'); + f('56021','56022','56023','56024'); + f('56025','56026','56027','56028'); + f('56029','56030','56031','56032'); + f('56033','56034','56035','56036'); + f('56037','56038','56039','56040'); + f('56041','56042','56043','56044'); + f('56045','56046','56047','56048'); + f('56049','56050','56051','56052'); + f('56053','56054','56055','56056'); + f('56057','56058','56059','56060'); + f('56061','56062','56063','56064'); + f('56065','56066','56067','56068'); + f('56069','56070','56071','56072'); + f('56073','56074','56075','56076'); + f('56077','56078','56079','56080'); + f('56081','56082','56083','56084'); + f('56085','56086','56087','56088'); + f('56089','56090','56091','56092'); + f('56093','56094','56095','56096'); + f('56097','56098','56099','56100'); + f('56101','56102','56103','56104'); + f('56105','56106','56107','56108'); + f('56109','56110','56111','56112'); + f('56113','56114','56115','56116'); + f('56117','56118','56119','56120'); + f('56121','56122','56123','56124'); + f('56125','56126','56127','56128'); + f('56129','56130','56131','56132'); + f('56133','56134','56135','56136'); + f('56137','56138','56139','56140'); + f('56141','56142','56143','56144'); + f('56145','56146','56147','56148'); + f('56149','56150','56151','56152'); + f('56153','56154','56155','56156'); + f('56157','56158','56159','56160'); + f('56161','56162','56163','56164'); + f('56165','56166','56167','56168'); + f('56169','56170','56171','56172'); + f('56173','56174','56175','56176'); + f('56177','56178','56179','56180'); + f('56181','56182','56183','56184'); + f('56185','56186','56187','56188'); + f('56189','56190','56191','56192'); + f('56193','56194','56195','56196'); + f('56197','56198','56199','56200'); + f('56201','56202','56203','56204'); + f('56205','56206','56207','56208'); + f('56209','56210','56211','56212'); + f('56213','56214','56215','56216'); + f('56217','56218','56219','56220'); + f('56221','56222','56223','56224'); + f('56225','56226','56227','56228'); + f('56229','56230','56231','56232'); + f('56233','56234','56235','56236'); + f('56237','56238','56239','56240'); + f('56241','56242','56243','56244'); + f('56245','56246','56247','56248'); + f('56249','56250','56251','56252'); + f('56253','56254','56255','56256'); + f('56257','56258','56259','56260'); + f('56261','56262','56263','56264'); + f('56265','56266','56267','56268'); + f('56269','56270','56271','56272'); + f('56273','56274','56275','56276'); + f('56277','56278','56279','56280'); + f('56281','56282','56283','56284'); + f('56285','56286','56287','56288'); + f('56289','56290','56291','56292'); + f('56293','56294','56295','56296'); + f('56297','56298','56299','56300'); + f('56301','56302','56303','56304'); + f('56305','56306','56307','56308'); + f('56309','56310','56311','56312'); + f('56313','56314','56315','56316'); + f('56317','56318','56319','56320'); + f('56321','56322','56323','56324'); + f('56325','56326','56327','56328'); + f('56329','56330','56331','56332'); + f('56333','56334','56335','56336'); + f('56337','56338','56339','56340'); + f('56341','56342','56343','56344'); + f('56345','56346','56347','56348'); + f('56349','56350','56351','56352'); + f('56353','56354','56355','56356'); + f('56357','56358','56359','56360'); + f('56361','56362','56363','56364'); + f('56365','56366','56367','56368'); + f('56369','56370','56371','56372'); + f('56373','56374','56375','56376'); + f('56377','56378','56379','56380'); + f('56381','56382','56383','56384'); + f('56385','56386','56387','56388'); + f('56389','56390','56391','56392'); + f('56393','56394','56395','56396'); + f('56397','56398','56399','56400'); + f('56401','56402','56403','56404'); + f('56405','56406','56407','56408'); + f('56409','56410','56411','56412'); + f('56413','56414','56415','56416'); + f('56417','56418','56419','56420'); + f('56421','56422','56423','56424'); + f('56425','56426','56427','56428'); + f('56429','56430','56431','56432'); + f('56433','56434','56435','56436'); + f('56437','56438','56439','56440'); + f('56441','56442','56443','56444'); + f('56445','56446','56447','56448'); + f('56449','56450','56451','56452'); + f('56453','56454','56455','56456'); + f('56457','56458','56459','56460'); + f('56461','56462','56463','56464'); + f('56465','56466','56467','56468'); + f('56469','56470','56471','56472'); + f('56473','56474','56475','56476'); + f('56477','56478','56479','56480'); + f('56481','56482','56483','56484'); + f('56485','56486','56487','56488'); + f('56489','56490','56491','56492'); + f('56493','56494','56495','56496'); + f('56497','56498','56499','56500'); + f('56501','56502','56503','56504'); + f('56505','56506','56507','56508'); + f('56509','56510','56511','56512'); + f('56513','56514','56515','56516'); + f('56517','56518','56519','56520'); + f('56521','56522','56523','56524'); + f('56525','56526','56527','56528'); + f('56529','56530','56531','56532'); + f('56533','56534','56535','56536'); + f('56537','56538','56539','56540'); + f('56541','56542','56543','56544'); + f('56545','56546','56547','56548'); + f('56549','56550','56551','56552'); + f('56553','56554','56555','56556'); + f('56557','56558','56559','56560'); + f('56561','56562','56563','56564'); + f('56565','56566','56567','56568'); + f('56569','56570','56571','56572'); + f('56573','56574','56575','56576'); + f('56577','56578','56579','56580'); + f('56581','56582','56583','56584'); + f('56585','56586','56587','56588'); + f('56589','56590','56591','56592'); + f('56593','56594','56595','56596'); + f('56597','56598','56599','56600'); + f('56601','56602','56603','56604'); + f('56605','56606','56607','56608'); + f('56609','56610','56611','56612'); + f('56613','56614','56615','56616'); + f('56617','56618','56619','56620'); + f('56621','56622','56623','56624'); + f('56625','56626','56627','56628'); + f('56629','56630','56631','56632'); + f('56633','56634','56635','56636'); + f('56637','56638','56639','56640'); + f('56641','56642','56643','56644'); + f('56645','56646','56647','56648'); + f('56649','56650','56651','56652'); + f('56653','56654','56655','56656'); + f('56657','56658','56659','56660'); + f('56661','56662','56663','56664'); + f('56665','56666','56667','56668'); + f('56669','56670','56671','56672'); + f('56673','56674','56675','56676'); + f('56677','56678','56679','56680'); + f('56681','56682','56683','56684'); + f('56685','56686','56687','56688'); + f('56689','56690','56691','56692'); + f('56693','56694','56695','56696'); + f('56697','56698','56699','56700'); + f('56701','56702','56703','56704'); + f('56705','56706','56707','56708'); + f('56709','56710','56711','56712'); + f('56713','56714','56715','56716'); + f('56717','56718','56719','56720'); + f('56721','56722','56723','56724'); + f('56725','56726','56727','56728'); + f('56729','56730','56731','56732'); + f('56733','56734','56735','56736'); + f('56737','56738','56739','56740'); + f('56741','56742','56743','56744'); + f('56745','56746','56747','56748'); + f('56749','56750','56751','56752'); + f('56753','56754','56755','56756'); + f('56757','56758','56759','56760'); + f('56761','56762','56763','56764'); + f('56765','56766','56767','56768'); + f('56769','56770','56771','56772'); + f('56773','56774','56775','56776'); + f('56777','56778','56779','56780'); + f('56781','56782','56783','56784'); + f('56785','56786','56787','56788'); + f('56789','56790','56791','56792'); + f('56793','56794','56795','56796'); + f('56797','56798','56799','56800'); + f('56801','56802','56803','56804'); + f('56805','56806','56807','56808'); + f('56809','56810','56811','56812'); + f('56813','56814','56815','56816'); + f('56817','56818','56819','56820'); + f('56821','56822','56823','56824'); + f('56825','56826','56827','56828'); + f('56829','56830','56831','56832'); + f('56833','56834','56835','56836'); + f('56837','56838','56839','56840'); + f('56841','56842','56843','56844'); + f('56845','56846','56847','56848'); + f('56849','56850','56851','56852'); + f('56853','56854','56855','56856'); + f('56857','56858','56859','56860'); + f('56861','56862','56863','56864'); + f('56865','56866','56867','56868'); + f('56869','56870','56871','56872'); + f('56873','56874','56875','56876'); + f('56877','56878','56879','56880'); + f('56881','56882','56883','56884'); + f('56885','56886','56887','56888'); + f('56889','56890','56891','56892'); + f('56893','56894','56895','56896'); + f('56897','56898','56899','56900'); + f('56901','56902','56903','56904'); + f('56905','56906','56907','56908'); + f('56909','56910','56911','56912'); + f('56913','56914','56915','56916'); + f('56917','56918','56919','56920'); + f('56921','56922','56923','56924'); + f('56925','56926','56927','56928'); + f('56929','56930','56931','56932'); + f('56933','56934','56935','56936'); + f('56937','56938','56939','56940'); + f('56941','56942','56943','56944'); + f('56945','56946','56947','56948'); + f('56949','56950','56951','56952'); + f('56953','56954','56955','56956'); + f('56957','56958','56959','56960'); + f('56961','56962','56963','56964'); + f('56965','56966','56967','56968'); + f('56969','56970','56971','56972'); + f('56973','56974','56975','56976'); + f('56977','56978','56979','56980'); + f('56981','56982','56983','56984'); + f('56985','56986','56987','56988'); + f('56989','56990','56991','56992'); + f('56993','56994','56995','56996'); + f('56997','56998','56999','57000'); + f('57001','57002','57003','57004'); + f('57005','57006','57007','57008'); + f('57009','57010','57011','57012'); + f('57013','57014','57015','57016'); + f('57017','57018','57019','57020'); + f('57021','57022','57023','57024'); + f('57025','57026','57027','57028'); + f('57029','57030','57031','57032'); + f('57033','57034','57035','57036'); + f('57037','57038','57039','57040'); + f('57041','57042','57043','57044'); + f('57045','57046','57047','57048'); + f('57049','57050','57051','57052'); + f('57053','57054','57055','57056'); + f('57057','57058','57059','57060'); + f('57061','57062','57063','57064'); + f('57065','57066','57067','57068'); + f('57069','57070','57071','57072'); + f('57073','57074','57075','57076'); + f('57077','57078','57079','57080'); + f('57081','57082','57083','57084'); + f('57085','57086','57087','57088'); + f('57089','57090','57091','57092'); + f('57093','57094','57095','57096'); + f('57097','57098','57099','57100'); + f('57101','57102','57103','57104'); + f('57105','57106','57107','57108'); + f('57109','57110','57111','57112'); + f('57113','57114','57115','57116'); + f('57117','57118','57119','57120'); + f('57121','57122','57123','57124'); + f('57125','57126','57127','57128'); + f('57129','57130','57131','57132'); + f('57133','57134','57135','57136'); + f('57137','57138','57139','57140'); + f('57141','57142','57143','57144'); + f('57145','57146','57147','57148'); + f('57149','57150','57151','57152'); + f('57153','57154','57155','57156'); + f('57157','57158','57159','57160'); + f('57161','57162','57163','57164'); + f('57165','57166','57167','57168'); + f('57169','57170','57171','57172'); + f('57173','57174','57175','57176'); + f('57177','57178','57179','57180'); + f('57181','57182','57183','57184'); + f('57185','57186','57187','57188'); + f('57189','57190','57191','57192'); + f('57193','57194','57195','57196'); + f('57197','57198','57199','57200'); + f('57201','57202','57203','57204'); + f('57205','57206','57207','57208'); + f('57209','57210','57211','57212'); + f('57213','57214','57215','57216'); + f('57217','57218','57219','57220'); + f('57221','57222','57223','57224'); + f('57225','57226','57227','57228'); + f('57229','57230','57231','57232'); + f('57233','57234','57235','57236'); + f('57237','57238','57239','57240'); + f('57241','57242','57243','57244'); + f('57245','57246','57247','57248'); + f('57249','57250','57251','57252'); + f('57253','57254','57255','57256'); + f('57257','57258','57259','57260'); + f('57261','57262','57263','57264'); + f('57265','57266','57267','57268'); + f('57269','57270','57271','57272'); + f('57273','57274','57275','57276'); + f('57277','57278','57279','57280'); + f('57281','57282','57283','57284'); + f('57285','57286','57287','57288'); + f('57289','57290','57291','57292'); + f('57293','57294','57295','57296'); + f('57297','57298','57299','57300'); + f('57301','57302','57303','57304'); + f('57305','57306','57307','57308'); + f('57309','57310','57311','57312'); + f('57313','57314','57315','57316'); + f('57317','57318','57319','57320'); + f('57321','57322','57323','57324'); + f('57325','57326','57327','57328'); + f('57329','57330','57331','57332'); + f('57333','57334','57335','57336'); + f('57337','57338','57339','57340'); + f('57341','57342','57343','57344'); + f('57345','57346','57347','57348'); + f('57349','57350','57351','57352'); + f('57353','57354','57355','57356'); + f('57357','57358','57359','57360'); + f('57361','57362','57363','57364'); + f('57365','57366','57367','57368'); + f('57369','57370','57371','57372'); + f('57373','57374','57375','57376'); + f('57377','57378','57379','57380'); + f('57381','57382','57383','57384'); + f('57385','57386','57387','57388'); + f('57389','57390','57391','57392'); + f('57393','57394','57395','57396'); + f('57397','57398','57399','57400'); + f('57401','57402','57403','57404'); + f('57405','57406','57407','57408'); + f('57409','57410','57411','57412'); + f('57413','57414','57415','57416'); + f('57417','57418','57419','57420'); + f('57421','57422','57423','57424'); + f('57425','57426','57427','57428'); + f('57429','57430','57431','57432'); + f('57433','57434','57435','57436'); + f('57437','57438','57439','57440'); + f('57441','57442','57443','57444'); + f('57445','57446','57447','57448'); + f('57449','57450','57451','57452'); + f('57453','57454','57455','57456'); + f('57457','57458','57459','57460'); + f('57461','57462','57463','57464'); + f('57465','57466','57467','57468'); + f('57469','57470','57471','57472'); + f('57473','57474','57475','57476'); + f('57477','57478','57479','57480'); + f('57481','57482','57483','57484'); + f('57485','57486','57487','57488'); + f('57489','57490','57491','57492'); + f('57493','57494','57495','57496'); + f('57497','57498','57499','57500'); + f('57501','57502','57503','57504'); + f('57505','57506','57507','57508'); + f('57509','57510','57511','57512'); + f('57513','57514','57515','57516'); + f('57517','57518','57519','57520'); + f('57521','57522','57523','57524'); + f('57525','57526','57527','57528'); + f('57529','57530','57531','57532'); + f('57533','57534','57535','57536'); + f('57537','57538','57539','57540'); + f('57541','57542','57543','57544'); + f('57545','57546','57547','57548'); + f('57549','57550','57551','57552'); + f('57553','57554','57555','57556'); + f('57557','57558','57559','57560'); + f('57561','57562','57563','57564'); + f('57565','57566','57567','57568'); + f('57569','57570','57571','57572'); + f('57573','57574','57575','57576'); + f('57577','57578','57579','57580'); + f('57581','57582','57583','57584'); + f('57585','57586','57587','57588'); + f('57589','57590','57591','57592'); + f('57593','57594','57595','57596'); + f('57597','57598','57599','57600'); + f('57601','57602','57603','57604'); + f('57605','57606','57607','57608'); + f('57609','57610','57611','57612'); + f('57613','57614','57615','57616'); + f('57617','57618','57619','57620'); + f('57621','57622','57623','57624'); + f('57625','57626','57627','57628'); + f('57629','57630','57631','57632'); + f('57633','57634','57635','57636'); + f('57637','57638','57639','57640'); + f('57641','57642','57643','57644'); + f('57645','57646','57647','57648'); + f('57649','57650','57651','57652'); + f('57653','57654','57655','57656'); + f('57657','57658','57659','57660'); + f('57661','57662','57663','57664'); + f('57665','57666','57667','57668'); + f('57669','57670','57671','57672'); + f('57673','57674','57675','57676'); + f('57677','57678','57679','57680'); + f('57681','57682','57683','57684'); + f('57685','57686','57687','57688'); + f('57689','57690','57691','57692'); + f('57693','57694','57695','57696'); + f('57697','57698','57699','57700'); + f('57701','57702','57703','57704'); + f('57705','57706','57707','57708'); + f('57709','57710','57711','57712'); + f('57713','57714','57715','57716'); + f('57717','57718','57719','57720'); + f('57721','57722','57723','57724'); + f('57725','57726','57727','57728'); + f('57729','57730','57731','57732'); + f('57733','57734','57735','57736'); + f('57737','57738','57739','57740'); + f('57741','57742','57743','57744'); + f('57745','57746','57747','57748'); + f('57749','57750','57751','57752'); + f('57753','57754','57755','57756'); + f('57757','57758','57759','57760'); + f('57761','57762','57763','57764'); + f('57765','57766','57767','57768'); + f('57769','57770','57771','57772'); + f('57773','57774','57775','57776'); + f('57777','57778','57779','57780'); + f('57781','57782','57783','57784'); + f('57785','57786','57787','57788'); + f('57789','57790','57791','57792'); + f('57793','57794','57795','57796'); + f('57797','57798','57799','57800'); + f('57801','57802','57803','57804'); + f('57805','57806','57807','57808'); + f('57809','57810','57811','57812'); + f('57813','57814','57815','57816'); + f('57817','57818','57819','57820'); + f('57821','57822','57823','57824'); + f('57825','57826','57827','57828'); + f('57829','57830','57831','57832'); + f('57833','57834','57835','57836'); + f('57837','57838','57839','57840'); + f('57841','57842','57843','57844'); + f('57845','57846','57847','57848'); + f('57849','57850','57851','57852'); + f('57853','57854','57855','57856'); + f('57857','57858','57859','57860'); + f('57861','57862','57863','57864'); + f('57865','57866','57867','57868'); + f('57869','57870','57871','57872'); + f('57873','57874','57875','57876'); + f('57877','57878','57879','57880'); + f('57881','57882','57883','57884'); + f('57885','57886','57887','57888'); + f('57889','57890','57891','57892'); + f('57893','57894','57895','57896'); + f('57897','57898','57899','57900'); + f('57901','57902','57903','57904'); + f('57905','57906','57907','57908'); + f('57909','57910','57911','57912'); + f('57913','57914','57915','57916'); + f('57917','57918','57919','57920'); + f('57921','57922','57923','57924'); + f('57925','57926','57927','57928'); + f('57929','57930','57931','57932'); + f('57933','57934','57935','57936'); + f('57937','57938','57939','57940'); + f('57941','57942','57943','57944'); + f('57945','57946','57947','57948'); + f('57949','57950','57951','57952'); + f('57953','57954','57955','57956'); + f('57957','57958','57959','57960'); + f('57961','57962','57963','57964'); + f('57965','57966','57967','57968'); + f('57969','57970','57971','57972'); + f('57973','57974','57975','57976'); + f('57977','57978','57979','57980'); + f('57981','57982','57983','57984'); + f('57985','57986','57987','57988'); + f('57989','57990','57991','57992'); + f('57993','57994','57995','57996'); + f('57997','57998','57999','58000'); + f('58001','58002','58003','58004'); + f('58005','58006','58007','58008'); + f('58009','58010','58011','58012'); + f('58013','58014','58015','58016'); + f('58017','58018','58019','58020'); + f('58021','58022','58023','58024'); + f('58025','58026','58027','58028'); + f('58029','58030','58031','58032'); + f('58033','58034','58035','58036'); + f('58037','58038','58039','58040'); + f('58041','58042','58043','58044'); + f('58045','58046','58047','58048'); + f('58049','58050','58051','58052'); + f('58053','58054','58055','58056'); + f('58057','58058','58059','58060'); + f('58061','58062','58063','58064'); + f('58065','58066','58067','58068'); + f('58069','58070','58071','58072'); + f('58073','58074','58075','58076'); + f('58077','58078','58079','58080'); + f('58081','58082','58083','58084'); + f('58085','58086','58087','58088'); + f('58089','58090','58091','58092'); + f('58093','58094','58095','58096'); + f('58097','58098','58099','58100'); + f('58101','58102','58103','58104'); + f('58105','58106','58107','58108'); + f('58109','58110','58111','58112'); + f('58113','58114','58115','58116'); + f('58117','58118','58119','58120'); + f('58121','58122','58123','58124'); + f('58125','58126','58127','58128'); + f('58129','58130','58131','58132'); + f('58133','58134','58135','58136'); + f('58137','58138','58139','58140'); + f('58141','58142','58143','58144'); + f('58145','58146','58147','58148'); + f('58149','58150','58151','58152'); + f('58153','58154','58155','58156'); + f('58157','58158','58159','58160'); + f('58161','58162','58163','58164'); + f('58165','58166','58167','58168'); + f('58169','58170','58171','58172'); + f('58173','58174','58175','58176'); + f('58177','58178','58179','58180'); + f('58181','58182','58183','58184'); + f('58185','58186','58187','58188'); + f('58189','58190','58191','58192'); + f('58193','58194','58195','58196'); + f('58197','58198','58199','58200'); + f('58201','58202','58203','58204'); + f('58205','58206','58207','58208'); + f('58209','58210','58211','58212'); + f('58213','58214','58215','58216'); + f('58217','58218','58219','58220'); + f('58221','58222','58223','58224'); + f('58225','58226','58227','58228'); + f('58229','58230','58231','58232'); + f('58233','58234','58235','58236'); + f('58237','58238','58239','58240'); + f('58241','58242','58243','58244'); + f('58245','58246','58247','58248'); + f('58249','58250','58251','58252'); + f('58253','58254','58255','58256'); + f('58257','58258','58259','58260'); + f('58261','58262','58263','58264'); + f('58265','58266','58267','58268'); + f('58269','58270','58271','58272'); + f('58273','58274','58275','58276'); + f('58277','58278','58279','58280'); + f('58281','58282','58283','58284'); + f('58285','58286','58287','58288'); + f('58289','58290','58291','58292'); + f('58293','58294','58295','58296'); + f('58297','58298','58299','58300'); + f('58301','58302','58303','58304'); + f('58305','58306','58307','58308'); + f('58309','58310','58311','58312'); + f('58313','58314','58315','58316'); + f('58317','58318','58319','58320'); + f('58321','58322','58323','58324'); + f('58325','58326','58327','58328'); + f('58329','58330','58331','58332'); + f('58333','58334','58335','58336'); + f('58337','58338','58339','58340'); + f('58341','58342','58343','58344'); + f('58345','58346','58347','58348'); + f('58349','58350','58351','58352'); + f('58353','58354','58355','58356'); + f('58357','58358','58359','58360'); + f('58361','58362','58363','58364'); + f('58365','58366','58367','58368'); + f('58369','58370','58371','58372'); + f('58373','58374','58375','58376'); + f('58377','58378','58379','58380'); + f('58381','58382','58383','58384'); + f('58385','58386','58387','58388'); + f('58389','58390','58391','58392'); + f('58393','58394','58395','58396'); + f('58397','58398','58399','58400'); + f('58401','58402','58403','58404'); + f('58405','58406','58407','58408'); + f('58409','58410','58411','58412'); + f('58413','58414','58415','58416'); + f('58417','58418','58419','58420'); + f('58421','58422','58423','58424'); + f('58425','58426','58427','58428'); + f('58429','58430','58431','58432'); + f('58433','58434','58435','58436'); + f('58437','58438','58439','58440'); + f('58441','58442','58443','58444'); + f('58445','58446','58447','58448'); + f('58449','58450','58451','58452'); + f('58453','58454','58455','58456'); + f('58457','58458','58459','58460'); + f('58461','58462','58463','58464'); + f('58465','58466','58467','58468'); + f('58469','58470','58471','58472'); + f('58473','58474','58475','58476'); + f('58477','58478','58479','58480'); + f('58481','58482','58483','58484'); + f('58485','58486','58487','58488'); + f('58489','58490','58491','58492'); + f('58493','58494','58495','58496'); + f('58497','58498','58499','58500'); + f('58501','58502','58503','58504'); + f('58505','58506','58507','58508'); + f('58509','58510','58511','58512'); + f('58513','58514','58515','58516'); + f('58517','58518','58519','58520'); + f('58521','58522','58523','58524'); + f('58525','58526','58527','58528'); + f('58529','58530','58531','58532'); + f('58533','58534','58535','58536'); + f('58537','58538','58539','58540'); + f('58541','58542','58543','58544'); + f('58545','58546','58547','58548'); + f('58549','58550','58551','58552'); + f('58553','58554','58555','58556'); + f('58557','58558','58559','58560'); + f('58561','58562','58563','58564'); + f('58565','58566','58567','58568'); + f('58569','58570','58571','58572'); + f('58573','58574','58575','58576'); + f('58577','58578','58579','58580'); + f('58581','58582','58583','58584'); + f('58585','58586','58587','58588'); + f('58589','58590','58591','58592'); + f('58593','58594','58595','58596'); + f('58597','58598','58599','58600'); + f('58601','58602','58603','58604'); + f('58605','58606','58607','58608'); + f('58609','58610','58611','58612'); + f('58613','58614','58615','58616'); + f('58617','58618','58619','58620'); + f('58621','58622','58623','58624'); + f('58625','58626','58627','58628'); + f('58629','58630','58631','58632'); + f('58633','58634','58635','58636'); + f('58637','58638','58639','58640'); + f('58641','58642','58643','58644'); + f('58645','58646','58647','58648'); + f('58649','58650','58651','58652'); + f('58653','58654','58655','58656'); + f('58657','58658','58659','58660'); + f('58661','58662','58663','58664'); + f('58665','58666','58667','58668'); + f('58669','58670','58671','58672'); + f('58673','58674','58675','58676'); + f('58677','58678','58679','58680'); + f('58681','58682','58683','58684'); + f('58685','58686','58687','58688'); + f('58689','58690','58691','58692'); + f('58693','58694','58695','58696'); + f('58697','58698','58699','58700'); + f('58701','58702','58703','58704'); + f('58705','58706','58707','58708'); + f('58709','58710','58711','58712'); + f('58713','58714','58715','58716'); + f('58717','58718','58719','58720'); + f('58721','58722','58723','58724'); + f('58725','58726','58727','58728'); + f('58729','58730','58731','58732'); + f('58733','58734','58735','58736'); + f('58737','58738','58739','58740'); + f('58741','58742','58743','58744'); + f('58745','58746','58747','58748'); + f('58749','58750','58751','58752'); + f('58753','58754','58755','58756'); + f('58757','58758','58759','58760'); + f('58761','58762','58763','58764'); + f('58765','58766','58767','58768'); + f('58769','58770','58771','58772'); + f('58773','58774','58775','58776'); + f('58777','58778','58779','58780'); + f('58781','58782','58783','58784'); + f('58785','58786','58787','58788'); + f('58789','58790','58791','58792'); + f('58793','58794','58795','58796'); + f('58797','58798','58799','58800'); + f('58801','58802','58803','58804'); + f('58805','58806','58807','58808'); + f('58809','58810','58811','58812'); + f('58813','58814','58815','58816'); + f('58817','58818','58819','58820'); + f('58821','58822','58823','58824'); + f('58825','58826','58827','58828'); + f('58829','58830','58831','58832'); + f('58833','58834','58835','58836'); + f('58837','58838','58839','58840'); + f('58841','58842','58843','58844'); + f('58845','58846','58847','58848'); + f('58849','58850','58851','58852'); + f('58853','58854','58855','58856'); + f('58857','58858','58859','58860'); + f('58861','58862','58863','58864'); + f('58865','58866','58867','58868'); + f('58869','58870','58871','58872'); + f('58873','58874','58875','58876'); + f('58877','58878','58879','58880'); + f('58881','58882','58883','58884'); + f('58885','58886','58887','58888'); + f('58889','58890','58891','58892'); + f('58893','58894','58895','58896'); + f('58897','58898','58899','58900'); + f('58901','58902','58903','58904'); + f('58905','58906','58907','58908'); + f('58909','58910','58911','58912'); + f('58913','58914','58915','58916'); + f('58917','58918','58919','58920'); + f('58921','58922','58923','58924'); + f('58925','58926','58927','58928'); + f('58929','58930','58931','58932'); + f('58933','58934','58935','58936'); + f('58937','58938','58939','58940'); + f('58941','58942','58943','58944'); + f('58945','58946','58947','58948'); + f('58949','58950','58951','58952'); + f('58953','58954','58955','58956'); + f('58957','58958','58959','58960'); + f('58961','58962','58963','58964'); + f('58965','58966','58967','58968'); + f('58969','58970','58971','58972'); + f('58973','58974','58975','58976'); + f('58977','58978','58979','58980'); + f('58981','58982','58983','58984'); + f('58985','58986','58987','58988'); + f('58989','58990','58991','58992'); + f('58993','58994','58995','58996'); + f('58997','58998','58999','59000'); + f('59001','59002','59003','59004'); + f('59005','59006','59007','59008'); + f('59009','59010','59011','59012'); + f('59013','59014','59015','59016'); + f('59017','59018','59019','59020'); + f('59021','59022','59023','59024'); + f('59025','59026','59027','59028'); + f('59029','59030','59031','59032'); + f('59033','59034','59035','59036'); + f('59037','59038','59039','59040'); + f('59041','59042','59043','59044'); + f('59045','59046','59047','59048'); + f('59049','59050','59051','59052'); + f('59053','59054','59055','59056'); + f('59057','59058','59059','59060'); + f('59061','59062','59063','59064'); + f('59065','59066','59067','59068'); + f('59069','59070','59071','59072'); + f('59073','59074','59075','59076'); + f('59077','59078','59079','59080'); + f('59081','59082','59083','59084'); + f('59085','59086','59087','59088'); + f('59089','59090','59091','59092'); + f('59093','59094','59095','59096'); + f('59097','59098','59099','59100'); + f('59101','59102','59103','59104'); + f('59105','59106','59107','59108'); + f('59109','59110','59111','59112'); + f('59113','59114','59115','59116'); + f('59117','59118','59119','59120'); + f('59121','59122','59123','59124'); + f('59125','59126','59127','59128'); + f('59129','59130','59131','59132'); + f('59133','59134','59135','59136'); + f('59137','59138','59139','59140'); + f('59141','59142','59143','59144'); + f('59145','59146','59147','59148'); + f('59149','59150','59151','59152'); + f('59153','59154','59155','59156'); + f('59157','59158','59159','59160'); + f('59161','59162','59163','59164'); + f('59165','59166','59167','59168'); + f('59169','59170','59171','59172'); + f('59173','59174','59175','59176'); + f('59177','59178','59179','59180'); + f('59181','59182','59183','59184'); + f('59185','59186','59187','59188'); + f('59189','59190','59191','59192'); + f('59193','59194','59195','59196'); + f('59197','59198','59199','59200'); + f('59201','59202','59203','59204'); + f('59205','59206','59207','59208'); + f('59209','59210','59211','59212'); + f('59213','59214','59215','59216'); + f('59217','59218','59219','59220'); + f('59221','59222','59223','59224'); + f('59225','59226','59227','59228'); + f('59229','59230','59231','59232'); + f('59233','59234','59235','59236'); + f('59237','59238','59239','59240'); + f('59241','59242','59243','59244'); + f('59245','59246','59247','59248'); + f('59249','59250','59251','59252'); + f('59253','59254','59255','59256'); + f('59257','59258','59259','59260'); + f('59261','59262','59263','59264'); + f('59265','59266','59267','59268'); + f('59269','59270','59271','59272'); + f('59273','59274','59275','59276'); + f('59277','59278','59279','59280'); + f('59281','59282','59283','59284'); + f('59285','59286','59287','59288'); + f('59289','59290','59291','59292'); + f('59293','59294','59295','59296'); + f('59297','59298','59299','59300'); + f('59301','59302','59303','59304'); + f('59305','59306','59307','59308'); + f('59309','59310','59311','59312'); + f('59313','59314','59315','59316'); + f('59317','59318','59319','59320'); + f('59321','59322','59323','59324'); + f('59325','59326','59327','59328'); + f('59329','59330','59331','59332'); + f('59333','59334','59335','59336'); + f('59337','59338','59339','59340'); + f('59341','59342','59343','59344'); + f('59345','59346','59347','59348'); + f('59349','59350','59351','59352'); + f('59353','59354','59355','59356'); + f('59357','59358','59359','59360'); + f('59361','59362','59363','59364'); + f('59365','59366','59367','59368'); + f('59369','59370','59371','59372'); + f('59373','59374','59375','59376'); + f('59377','59378','59379','59380'); + f('59381','59382','59383','59384'); + f('59385','59386','59387','59388'); + f('59389','59390','59391','59392'); + f('59393','59394','59395','59396'); + f('59397','59398','59399','59400'); + f('59401','59402','59403','59404'); + f('59405','59406','59407','59408'); + f('59409','59410','59411','59412'); + f('59413','59414','59415','59416'); + f('59417','59418','59419','59420'); + f('59421','59422','59423','59424'); + f('59425','59426','59427','59428'); + f('59429','59430','59431','59432'); + f('59433','59434','59435','59436'); + f('59437','59438','59439','59440'); + f('59441','59442','59443','59444'); + f('59445','59446','59447','59448'); + f('59449','59450','59451','59452'); + f('59453','59454','59455','59456'); + f('59457','59458','59459','59460'); + f('59461','59462','59463','59464'); + f('59465','59466','59467','59468'); + f('59469','59470','59471','59472'); + f('59473','59474','59475','59476'); + f('59477','59478','59479','59480'); + f('59481','59482','59483','59484'); + f('59485','59486','59487','59488'); + f('59489','59490','59491','59492'); + f('59493','59494','59495','59496'); + f('59497','59498','59499','59500'); + f('59501','59502','59503','59504'); + f('59505','59506','59507','59508'); + f('59509','59510','59511','59512'); + f('59513','59514','59515','59516'); + f('59517','59518','59519','59520'); + f('59521','59522','59523','59524'); + f('59525','59526','59527','59528'); + f('59529','59530','59531','59532'); + f('59533','59534','59535','59536'); + f('59537','59538','59539','59540'); + f('59541','59542','59543','59544'); + f('59545','59546','59547','59548'); + f('59549','59550','59551','59552'); + f('59553','59554','59555','59556'); + f('59557','59558','59559','59560'); + f('59561','59562','59563','59564'); + f('59565','59566','59567','59568'); + f('59569','59570','59571','59572'); + f('59573','59574','59575','59576'); + f('59577','59578','59579','59580'); + f('59581','59582','59583','59584'); + f('59585','59586','59587','59588'); + f('59589','59590','59591','59592'); + f('59593','59594','59595','59596'); + f('59597','59598','59599','59600'); + f('59601','59602','59603','59604'); + f('59605','59606','59607','59608'); + f('59609','59610','59611','59612'); + f('59613','59614','59615','59616'); + f('59617','59618','59619','59620'); + f('59621','59622','59623','59624'); + f('59625','59626','59627','59628'); + f('59629','59630','59631','59632'); + f('59633','59634','59635','59636'); + f('59637','59638','59639','59640'); + f('59641','59642','59643','59644'); + f('59645','59646','59647','59648'); + f('59649','59650','59651','59652'); + f('59653','59654','59655','59656'); + f('59657','59658','59659','59660'); + f('59661','59662','59663','59664'); + f('59665','59666','59667','59668'); + f('59669','59670','59671','59672'); + f('59673','59674','59675','59676'); + f('59677','59678','59679','59680'); + f('59681','59682','59683','59684'); + f('59685','59686','59687','59688'); + f('59689','59690','59691','59692'); + f('59693','59694','59695','59696'); + f('59697','59698','59699','59700'); + f('59701','59702','59703','59704'); + f('59705','59706','59707','59708'); + f('59709','59710','59711','59712'); + f('59713','59714','59715','59716'); + f('59717','59718','59719','59720'); + f('59721','59722','59723','59724'); + f('59725','59726','59727','59728'); + f('59729','59730','59731','59732'); + f('59733','59734','59735','59736'); + f('59737','59738','59739','59740'); + f('59741','59742','59743','59744'); + f('59745','59746','59747','59748'); + f('59749','59750','59751','59752'); + f('59753','59754','59755','59756'); + f('59757','59758','59759','59760'); + f('59761','59762','59763','59764'); + f('59765','59766','59767','59768'); + f('59769','59770','59771','59772'); + f('59773','59774','59775','59776'); + f('59777','59778','59779','59780'); + f('59781','59782','59783','59784'); + f('59785','59786','59787','59788'); + f('59789','59790','59791','59792'); + f('59793','59794','59795','59796'); + f('59797','59798','59799','59800'); + f('59801','59802','59803','59804'); + f('59805','59806','59807','59808'); + f('59809','59810','59811','59812'); + f('59813','59814','59815','59816'); + f('59817','59818','59819','59820'); + f('59821','59822','59823','59824'); + f('59825','59826','59827','59828'); + f('59829','59830','59831','59832'); + f('59833','59834','59835','59836'); + f('59837','59838','59839','59840'); + f('59841','59842','59843','59844'); + f('59845','59846','59847','59848'); + f('59849','59850','59851','59852'); + f('59853','59854','59855','59856'); + f('59857','59858','59859','59860'); + f('59861','59862','59863','59864'); + f('59865','59866','59867','59868'); + f('59869','59870','59871','59872'); + f('59873','59874','59875','59876'); + f('59877','59878','59879','59880'); + f('59881','59882','59883','59884'); + f('59885','59886','59887','59888'); + f('59889','59890','59891','59892'); + f('59893','59894','59895','59896'); + f('59897','59898','59899','59900'); + f('59901','59902','59903','59904'); + f('59905','59906','59907','59908'); + f('59909','59910','59911','59912'); + f('59913','59914','59915','59916'); + f('59917','59918','59919','59920'); + f('59921','59922','59923','59924'); + f('59925','59926','59927','59928'); + f('59929','59930','59931','59932'); + f('59933','59934','59935','59936'); + f('59937','59938','59939','59940'); + f('59941','59942','59943','59944'); + f('59945','59946','59947','59948'); + f('59949','59950','59951','59952'); + f('59953','59954','59955','59956'); + f('59957','59958','59959','59960'); + f('59961','59962','59963','59964'); + f('59965','59966','59967','59968'); + f('59969','59970','59971','59972'); + f('59973','59974','59975','59976'); + f('59977','59978','59979','59980'); + f('59981','59982','59983','59984'); + f('59985','59986','59987','59988'); + f('59989','59990','59991','59992'); + f('59993','59994','59995','59996'); + f('59997','59998','59999','60000'); + f('60001','60002','60003','60004'); + f('60005','60006','60007','60008'); + f('60009','60010','60011','60012'); + f('60013','60014','60015','60016'); + f('60017','60018','60019','60020'); + f('60021','60022','60023','60024'); + f('60025','60026','60027','60028'); + f('60029','60030','60031','60032'); + f('60033','60034','60035','60036'); + f('60037','60038','60039','60040'); + f('60041','60042','60043','60044'); + f('60045','60046','60047','60048'); + f('60049','60050','60051','60052'); + f('60053','60054','60055','60056'); + f('60057','60058','60059','60060'); + f('60061','60062','60063','60064'); + f('60065','60066','60067','60068'); + f('60069','60070','60071','60072'); + f('60073','60074','60075','60076'); + f('60077','60078','60079','60080'); + f('60081','60082','60083','60084'); + f('60085','60086','60087','60088'); + f('60089','60090','60091','60092'); + f('60093','60094','60095','60096'); + f('60097','60098','60099','60100'); + f('60101','60102','60103','60104'); + f('60105','60106','60107','60108'); + f('60109','60110','60111','60112'); + f('60113','60114','60115','60116'); + f('60117','60118','60119','60120'); + f('60121','60122','60123','60124'); + f('60125','60126','60127','60128'); + f('60129','60130','60131','60132'); + f('60133','60134','60135','60136'); + f('60137','60138','60139','60140'); + f('60141','60142','60143','60144'); + f('60145','60146','60147','60148'); + f('60149','60150','60151','60152'); + f('60153','60154','60155','60156'); + f('60157','60158','60159','60160'); + f('60161','60162','60163','60164'); + f('60165','60166','60167','60168'); + f('60169','60170','60171','60172'); + f('60173','60174','60175','60176'); + f('60177','60178','60179','60180'); + f('60181','60182','60183','60184'); + f('60185','60186','60187','60188'); + f('60189','60190','60191','60192'); + f('60193','60194','60195','60196'); + f('60197','60198','60199','60200'); + f('60201','60202','60203','60204'); + f('60205','60206','60207','60208'); + f('60209','60210','60211','60212'); + f('60213','60214','60215','60216'); + f('60217','60218','60219','60220'); + f('60221','60222','60223','60224'); + f('60225','60226','60227','60228'); + f('60229','60230','60231','60232'); + f('60233','60234','60235','60236'); + f('60237','60238','60239','60240'); + f('60241','60242','60243','60244'); + f('60245','60246','60247','60248'); + f('60249','60250','60251','60252'); + f('60253','60254','60255','60256'); + f('60257','60258','60259','60260'); + f('60261','60262','60263','60264'); + f('60265','60266','60267','60268'); + f('60269','60270','60271','60272'); + f('60273','60274','60275','60276'); + f('60277','60278','60279','60280'); + f('60281','60282','60283','60284'); + f('60285','60286','60287','60288'); + f('60289','60290','60291','60292'); + f('60293','60294','60295','60296'); + f('60297','60298','60299','60300'); + f('60301','60302','60303','60304'); + f('60305','60306','60307','60308'); + f('60309','60310','60311','60312'); + f('60313','60314','60315','60316'); + f('60317','60318','60319','60320'); + f('60321','60322','60323','60324'); + f('60325','60326','60327','60328'); + f('60329','60330','60331','60332'); + f('60333','60334','60335','60336'); + f('60337','60338','60339','60340'); + f('60341','60342','60343','60344'); + f('60345','60346','60347','60348'); + f('60349','60350','60351','60352'); + f('60353','60354','60355','60356'); + f('60357','60358','60359','60360'); + f('60361','60362','60363','60364'); + f('60365','60366','60367','60368'); + f('60369','60370','60371','60372'); + f('60373','60374','60375','60376'); + f('60377','60378','60379','60380'); + f('60381','60382','60383','60384'); + f('60385','60386','60387','60388'); + f('60389','60390','60391','60392'); + f('60393','60394','60395','60396'); + f('60397','60398','60399','60400'); + f('60401','60402','60403','60404'); + f('60405','60406','60407','60408'); + f('60409','60410','60411','60412'); + f('60413','60414','60415','60416'); + f('60417','60418','60419','60420'); + f('60421','60422','60423','60424'); + f('60425','60426','60427','60428'); + f('60429','60430','60431','60432'); + f('60433','60434','60435','60436'); + f('60437','60438','60439','60440'); + f('60441','60442','60443','60444'); + f('60445','60446','60447','60448'); + f('60449','60450','60451','60452'); + f('60453','60454','60455','60456'); + f('60457','60458','60459','60460'); + f('60461','60462','60463','60464'); + f('60465','60466','60467','60468'); + f('60469','60470','60471','60472'); + f('60473','60474','60475','60476'); + f('60477','60478','60479','60480'); + f('60481','60482','60483','60484'); + f('60485','60486','60487','60488'); + f('60489','60490','60491','60492'); + f('60493','60494','60495','60496'); + f('60497','60498','60499','60500'); + f('60501','60502','60503','60504'); + f('60505','60506','60507','60508'); + f('60509','60510','60511','60512'); + f('60513','60514','60515','60516'); + f('60517','60518','60519','60520'); + f('60521','60522','60523','60524'); + f('60525','60526','60527','60528'); + f('60529','60530','60531','60532'); + f('60533','60534','60535','60536'); + f('60537','60538','60539','60540'); + f('60541','60542','60543','60544'); + f('60545','60546','60547','60548'); + f('60549','60550','60551','60552'); + f('60553','60554','60555','60556'); + f('60557','60558','60559','60560'); + f('60561','60562','60563','60564'); + f('60565','60566','60567','60568'); + f('60569','60570','60571','60572'); + f('60573','60574','60575','60576'); + f('60577','60578','60579','60580'); + f('60581','60582','60583','60584'); + f('60585','60586','60587','60588'); + f('60589','60590','60591','60592'); + f('60593','60594','60595','60596'); + f('60597','60598','60599','60600'); + f('60601','60602','60603','60604'); + f('60605','60606','60607','60608'); + f('60609','60610','60611','60612'); + f('60613','60614','60615','60616'); + f('60617','60618','60619','60620'); + f('60621','60622','60623','60624'); + f('60625','60626','60627','60628'); + f('60629','60630','60631','60632'); + f('60633','60634','60635','60636'); + f('60637','60638','60639','60640'); + f('60641','60642','60643','60644'); + f('60645','60646','60647','60648'); + f('60649','60650','60651','60652'); + f('60653','60654','60655','60656'); + f('60657','60658','60659','60660'); + f('60661','60662','60663','60664'); + f('60665','60666','60667','60668'); + f('60669','60670','60671','60672'); + f('60673','60674','60675','60676'); + f('60677','60678','60679','60680'); + f('60681','60682','60683','60684'); + f('60685','60686','60687','60688'); + f('60689','60690','60691','60692'); + f('60693','60694','60695','60696'); + f('60697','60698','60699','60700'); + f('60701','60702','60703','60704'); + f('60705','60706','60707','60708'); + f('60709','60710','60711','60712'); + f('60713','60714','60715','60716'); + f('60717','60718','60719','60720'); + f('60721','60722','60723','60724'); + f('60725','60726','60727','60728'); + f('60729','60730','60731','60732'); + f('60733','60734','60735','60736'); + f('60737','60738','60739','60740'); + f('60741','60742','60743','60744'); + f('60745','60746','60747','60748'); + f('60749','60750','60751','60752'); + f('60753','60754','60755','60756'); + f('60757','60758','60759','60760'); + f('60761','60762','60763','60764'); + f('60765','60766','60767','60768'); + f('60769','60770','60771','60772'); + f('60773','60774','60775','60776'); + f('60777','60778','60779','60780'); + f('60781','60782','60783','60784'); + f('60785','60786','60787','60788'); + f('60789','60790','60791','60792'); + f('60793','60794','60795','60796'); + f('60797','60798','60799','60800'); + f('60801','60802','60803','60804'); + f('60805','60806','60807','60808'); + f('60809','60810','60811','60812'); + f('60813','60814','60815','60816'); + f('60817','60818','60819','60820'); + f('60821','60822','60823','60824'); + f('60825','60826','60827','60828'); + f('60829','60830','60831','60832'); + f('60833','60834','60835','60836'); + f('60837','60838','60839','60840'); + f('60841','60842','60843','60844'); + f('60845','60846','60847','60848'); + f('60849','60850','60851','60852'); + f('60853','60854','60855','60856'); + f('60857','60858','60859','60860'); + f('60861','60862','60863','60864'); + f('60865','60866','60867','60868'); + f('60869','60870','60871','60872'); + f('60873','60874','60875','60876'); + f('60877','60878','60879','60880'); + f('60881','60882','60883','60884'); + f('60885','60886','60887','60888'); + f('60889','60890','60891','60892'); + f('60893','60894','60895','60896'); + f('60897','60898','60899','60900'); + f('60901','60902','60903','60904'); + f('60905','60906','60907','60908'); + f('60909','60910','60911','60912'); + f('60913','60914','60915','60916'); + f('60917','60918','60919','60920'); + f('60921','60922','60923','60924'); + f('60925','60926','60927','60928'); + f('60929','60930','60931','60932'); + f('60933','60934','60935','60936'); + f('60937','60938','60939','60940'); + f('60941','60942','60943','60944'); + f('60945','60946','60947','60948'); + f('60949','60950','60951','60952'); + f('60953','60954','60955','60956'); + f('60957','60958','60959','60960'); + f('60961','60962','60963','60964'); + f('60965','60966','60967','60968'); + f('60969','60970','60971','60972'); + f('60973','60974','60975','60976'); + f('60977','60978','60979','60980'); + f('60981','60982','60983','60984'); + f('60985','60986','60987','60988'); + f('60989','60990','60991','60992'); + f('60993','60994','60995','60996'); + f('60997','60998','60999','61000'); + f('61001','61002','61003','61004'); + f('61005','61006','61007','61008'); + f('61009','61010','61011','61012'); + f('61013','61014','61015','61016'); + f('61017','61018','61019','61020'); + f('61021','61022','61023','61024'); + f('61025','61026','61027','61028'); + f('61029','61030','61031','61032'); + f('61033','61034','61035','61036'); + f('61037','61038','61039','61040'); + f('61041','61042','61043','61044'); + f('61045','61046','61047','61048'); + f('61049','61050','61051','61052'); + f('61053','61054','61055','61056'); + f('61057','61058','61059','61060'); + f('61061','61062','61063','61064'); + f('61065','61066','61067','61068'); + f('61069','61070','61071','61072'); + f('61073','61074','61075','61076'); + f('61077','61078','61079','61080'); + f('61081','61082','61083','61084'); + f('61085','61086','61087','61088'); + f('61089','61090','61091','61092'); + f('61093','61094','61095','61096'); + f('61097','61098','61099','61100'); + f('61101','61102','61103','61104'); + f('61105','61106','61107','61108'); + f('61109','61110','61111','61112'); + f('61113','61114','61115','61116'); + f('61117','61118','61119','61120'); + f('61121','61122','61123','61124'); + f('61125','61126','61127','61128'); + f('61129','61130','61131','61132'); + f('61133','61134','61135','61136'); + f('61137','61138','61139','61140'); + f('61141','61142','61143','61144'); + f('61145','61146','61147','61148'); + f('61149','61150','61151','61152'); + f('61153','61154','61155','61156'); + f('61157','61158','61159','61160'); + f('61161','61162','61163','61164'); + f('61165','61166','61167','61168'); + f('61169','61170','61171','61172'); + f('61173','61174','61175','61176'); + f('61177','61178','61179','61180'); + f('61181','61182','61183','61184'); + f('61185','61186','61187','61188'); + f('61189','61190','61191','61192'); + f('61193','61194','61195','61196'); + f('61197','61198','61199','61200'); + f('61201','61202','61203','61204'); + f('61205','61206','61207','61208'); + f('61209','61210','61211','61212'); + f('61213','61214','61215','61216'); + f('61217','61218','61219','61220'); + f('61221','61222','61223','61224'); + f('61225','61226','61227','61228'); + f('61229','61230','61231','61232'); + f('61233','61234','61235','61236'); + f('61237','61238','61239','61240'); + f('61241','61242','61243','61244'); + f('61245','61246','61247','61248'); + f('61249','61250','61251','61252'); + f('61253','61254','61255','61256'); + f('61257','61258','61259','61260'); + f('61261','61262','61263','61264'); + f('61265','61266','61267','61268'); + f('61269','61270','61271','61272'); + f('61273','61274','61275','61276'); + f('61277','61278','61279','61280'); + f('61281','61282','61283','61284'); + f('61285','61286','61287','61288'); + f('61289','61290','61291','61292'); + f('61293','61294','61295','61296'); + f('61297','61298','61299','61300'); + f('61301','61302','61303','61304'); + f('61305','61306','61307','61308'); + f('61309','61310','61311','61312'); + f('61313','61314','61315','61316'); + f('61317','61318','61319','61320'); + f('61321','61322','61323','61324'); + f('61325','61326','61327','61328'); + f('61329','61330','61331','61332'); + f('61333','61334','61335','61336'); + f('61337','61338','61339','61340'); + f('61341','61342','61343','61344'); + f('61345','61346','61347','61348'); + f('61349','61350','61351','61352'); + f('61353','61354','61355','61356'); + f('61357','61358','61359','61360'); + f('61361','61362','61363','61364'); + f('61365','61366','61367','61368'); + f('61369','61370','61371','61372'); + f('61373','61374','61375','61376'); + f('61377','61378','61379','61380'); + f('61381','61382','61383','61384'); + f('61385','61386','61387','61388'); + f('61389','61390','61391','61392'); + f('61393','61394','61395','61396'); + f('61397','61398','61399','61400'); + f('61401','61402','61403','61404'); + f('61405','61406','61407','61408'); + f('61409','61410','61411','61412'); + f('61413','61414','61415','61416'); + f('61417','61418','61419','61420'); + f('61421','61422','61423','61424'); + f('61425','61426','61427','61428'); + f('61429','61430','61431','61432'); + f('61433','61434','61435','61436'); + f('61437','61438','61439','61440'); + f('61441','61442','61443','61444'); + f('61445','61446','61447','61448'); + f('61449','61450','61451','61452'); + f('61453','61454','61455','61456'); + f('61457','61458','61459','61460'); + f('61461','61462','61463','61464'); + f('61465','61466','61467','61468'); + f('61469','61470','61471','61472'); + f('61473','61474','61475','61476'); + f('61477','61478','61479','61480'); + f('61481','61482','61483','61484'); + f('61485','61486','61487','61488'); + f('61489','61490','61491','61492'); + f('61493','61494','61495','61496'); + f('61497','61498','61499','61500'); + f('61501','61502','61503','61504'); + f('61505','61506','61507','61508'); + f('61509','61510','61511','61512'); + f('61513','61514','61515','61516'); + f('61517','61518','61519','61520'); + f('61521','61522','61523','61524'); + f('61525','61526','61527','61528'); + f('61529','61530','61531','61532'); + f('61533','61534','61535','61536'); + f('61537','61538','61539','61540'); + f('61541','61542','61543','61544'); + f('61545','61546','61547','61548'); + f('61549','61550','61551','61552'); + f('61553','61554','61555','61556'); + f('61557','61558','61559','61560'); + f('61561','61562','61563','61564'); + f('61565','61566','61567','61568'); + f('61569','61570','61571','61572'); + f('61573','61574','61575','61576'); + f('61577','61578','61579','61580'); + f('61581','61582','61583','61584'); + f('61585','61586','61587','61588'); + f('61589','61590','61591','61592'); + f('61593','61594','61595','61596'); + f('61597','61598','61599','61600'); + f('61601','61602','61603','61604'); + f('61605','61606','61607','61608'); + f('61609','61610','61611','61612'); + f('61613','61614','61615','61616'); + f('61617','61618','61619','61620'); + f('61621','61622','61623','61624'); + f('61625','61626','61627','61628'); + f('61629','61630','61631','61632'); + f('61633','61634','61635','61636'); + f('61637','61638','61639','61640'); + f('61641','61642','61643','61644'); + f('61645','61646','61647','61648'); + f('61649','61650','61651','61652'); + f('61653','61654','61655','61656'); + f('61657','61658','61659','61660'); + f('61661','61662','61663','61664'); + f('61665','61666','61667','61668'); + f('61669','61670','61671','61672'); + f('61673','61674','61675','61676'); + f('61677','61678','61679','61680'); + f('61681','61682','61683','61684'); + f('61685','61686','61687','61688'); + f('61689','61690','61691','61692'); + f('61693','61694','61695','61696'); + f('61697','61698','61699','61700'); + f('61701','61702','61703','61704'); + f('61705','61706','61707','61708'); + f('61709','61710','61711','61712'); + f('61713','61714','61715','61716'); + f('61717','61718','61719','61720'); + f('61721','61722','61723','61724'); + f('61725','61726','61727','61728'); + f('61729','61730','61731','61732'); + f('61733','61734','61735','61736'); + f('61737','61738','61739','61740'); + f('61741','61742','61743','61744'); + f('61745','61746','61747','61748'); + f('61749','61750','61751','61752'); + f('61753','61754','61755','61756'); + f('61757','61758','61759','61760'); + f('61761','61762','61763','61764'); + f('61765','61766','61767','61768'); + f('61769','61770','61771','61772'); + f('61773','61774','61775','61776'); + f('61777','61778','61779','61780'); + f('61781','61782','61783','61784'); + f('61785','61786','61787','61788'); + f('61789','61790','61791','61792'); + f('61793','61794','61795','61796'); + f('61797','61798','61799','61800'); + f('61801','61802','61803','61804'); + f('61805','61806','61807','61808'); + f('61809','61810','61811','61812'); + f('61813','61814','61815','61816'); + f('61817','61818','61819','61820'); + f('61821','61822','61823','61824'); + f('61825','61826','61827','61828'); + f('61829','61830','61831','61832'); + f('61833','61834','61835','61836'); + f('61837','61838','61839','61840'); + f('61841','61842','61843','61844'); + f('61845','61846','61847','61848'); + f('61849','61850','61851','61852'); + f('61853','61854','61855','61856'); + f('61857','61858','61859','61860'); + f('61861','61862','61863','61864'); + f('61865','61866','61867','61868'); + f('61869','61870','61871','61872'); + f('61873','61874','61875','61876'); + f('61877','61878','61879','61880'); + f('61881','61882','61883','61884'); + f('61885','61886','61887','61888'); + f('61889','61890','61891','61892'); + f('61893','61894','61895','61896'); + f('61897','61898','61899','61900'); + f('61901','61902','61903','61904'); + f('61905','61906','61907','61908'); + f('61909','61910','61911','61912'); + f('61913','61914','61915','61916'); + f('61917','61918','61919','61920'); + f('61921','61922','61923','61924'); + f('61925','61926','61927','61928'); + f('61929','61930','61931','61932'); + f('61933','61934','61935','61936'); + f('61937','61938','61939','61940'); + f('61941','61942','61943','61944'); + f('61945','61946','61947','61948'); + f('61949','61950','61951','61952'); + f('61953','61954','61955','61956'); + f('61957','61958','61959','61960'); + f('61961','61962','61963','61964'); + f('61965','61966','61967','61968'); + f('61969','61970','61971','61972'); + f('61973','61974','61975','61976'); + f('61977','61978','61979','61980'); + f('61981','61982','61983','61984'); + f('61985','61986','61987','61988'); + f('61989','61990','61991','61992'); + f('61993','61994','61995','61996'); + f('61997','61998','61999','62000'); + f('62001','62002','62003','62004'); + f('62005','62006','62007','62008'); + f('62009','62010','62011','62012'); + f('62013','62014','62015','62016'); + f('62017','62018','62019','62020'); + f('62021','62022','62023','62024'); + f('62025','62026','62027','62028'); + f('62029','62030','62031','62032'); + f('62033','62034','62035','62036'); + f('62037','62038','62039','62040'); + f('62041','62042','62043','62044'); + f('62045','62046','62047','62048'); + f('62049','62050','62051','62052'); + f('62053','62054','62055','62056'); + f('62057','62058','62059','62060'); + f('62061','62062','62063','62064'); + f('62065','62066','62067','62068'); + f('62069','62070','62071','62072'); + f('62073','62074','62075','62076'); + f('62077','62078','62079','62080'); + f('62081','62082','62083','62084'); + f('62085','62086','62087','62088'); + f('62089','62090','62091','62092'); + f('62093','62094','62095','62096'); + f('62097','62098','62099','62100'); + f('62101','62102','62103','62104'); + f('62105','62106','62107','62108'); + f('62109','62110','62111','62112'); + f('62113','62114','62115','62116'); + f('62117','62118','62119','62120'); + f('62121','62122','62123','62124'); + f('62125','62126','62127','62128'); + f('62129','62130','62131','62132'); + f('62133','62134','62135','62136'); + f('62137','62138','62139','62140'); + f('62141','62142','62143','62144'); + f('62145','62146','62147','62148'); + f('62149','62150','62151','62152'); + f('62153','62154','62155','62156'); + f('62157','62158','62159','62160'); + f('62161','62162','62163','62164'); + f('62165','62166','62167','62168'); + f('62169','62170','62171','62172'); + f('62173','62174','62175','62176'); + f('62177','62178','62179','62180'); + f('62181','62182','62183','62184'); + f('62185','62186','62187','62188'); + f('62189','62190','62191','62192'); + f('62193','62194','62195','62196'); + f('62197','62198','62199','62200'); + f('62201','62202','62203','62204'); + f('62205','62206','62207','62208'); + f('62209','62210','62211','62212'); + f('62213','62214','62215','62216'); + f('62217','62218','62219','62220'); + f('62221','62222','62223','62224'); + f('62225','62226','62227','62228'); + f('62229','62230','62231','62232'); + f('62233','62234','62235','62236'); + f('62237','62238','62239','62240'); + f('62241','62242','62243','62244'); + f('62245','62246','62247','62248'); + f('62249','62250','62251','62252'); + f('62253','62254','62255','62256'); + f('62257','62258','62259','62260'); + f('62261','62262','62263','62264'); + f('62265','62266','62267','62268'); + f('62269','62270','62271','62272'); + f('62273','62274','62275','62276'); + f('62277','62278','62279','62280'); + f('62281','62282','62283','62284'); + f('62285','62286','62287','62288'); + f('62289','62290','62291','62292'); + f('62293','62294','62295','62296'); + f('62297','62298','62299','62300'); + f('62301','62302','62303','62304'); + f('62305','62306','62307','62308'); + f('62309','62310','62311','62312'); + f('62313','62314','62315','62316'); + f('62317','62318','62319','62320'); + f('62321','62322','62323','62324'); + f('62325','62326','62327','62328'); + f('62329','62330','62331','62332'); + f('62333','62334','62335','62336'); + f('62337','62338','62339','62340'); + f('62341','62342','62343','62344'); + f('62345','62346','62347','62348'); + f('62349','62350','62351','62352'); + f('62353','62354','62355','62356'); + f('62357','62358','62359','62360'); + f('62361','62362','62363','62364'); + f('62365','62366','62367','62368'); + f('62369','62370','62371','62372'); + f('62373','62374','62375','62376'); + f('62377','62378','62379','62380'); + f('62381','62382','62383','62384'); + f('62385','62386','62387','62388'); + f('62389','62390','62391','62392'); + f('62393','62394','62395','62396'); + f('62397','62398','62399','62400'); + f('62401','62402','62403','62404'); + f('62405','62406','62407','62408'); + f('62409','62410','62411','62412'); + f('62413','62414','62415','62416'); + f('62417','62418','62419','62420'); + f('62421','62422','62423','62424'); + f('62425','62426','62427','62428'); + f('62429','62430','62431','62432'); + f('62433','62434','62435','62436'); + f('62437','62438','62439','62440'); + f('62441','62442','62443','62444'); + f('62445','62446','62447','62448'); + f('62449','62450','62451','62452'); + f('62453','62454','62455','62456'); + f('62457','62458','62459','62460'); + f('62461','62462','62463','62464'); + f('62465','62466','62467','62468'); + f('62469','62470','62471','62472'); + f('62473','62474','62475','62476'); + f('62477','62478','62479','62480'); + f('62481','62482','62483','62484'); + f('62485','62486','62487','62488'); + f('62489','62490','62491','62492'); + f('62493','62494','62495','62496'); + f('62497','62498','62499','62500'); + f('62501','62502','62503','62504'); + f('62505','62506','62507','62508'); + f('62509','62510','62511','62512'); + f('62513','62514','62515','62516'); + f('62517','62518','62519','62520'); + f('62521','62522','62523','62524'); + f('62525','62526','62527','62528'); + f('62529','62530','62531','62532'); + f('62533','62534','62535','62536'); + f('62537','62538','62539','62540'); + f('62541','62542','62543','62544'); + f('62545','62546','62547','62548'); + f('62549','62550','62551','62552'); + f('62553','62554','62555','62556'); + f('62557','62558','62559','62560'); + f('62561','62562','62563','62564'); + f('62565','62566','62567','62568'); + f('62569','62570','62571','62572'); + f('62573','62574','62575','62576'); + f('62577','62578','62579','62580'); + f('62581','62582','62583','62584'); + f('62585','62586','62587','62588'); + f('62589','62590','62591','62592'); + f('62593','62594','62595','62596'); + f('62597','62598','62599','62600'); + f('62601','62602','62603','62604'); + f('62605','62606','62607','62608'); + f('62609','62610','62611','62612'); + f('62613','62614','62615','62616'); + f('62617','62618','62619','62620'); + f('62621','62622','62623','62624'); + f('62625','62626','62627','62628'); + f('62629','62630','62631','62632'); + f('62633','62634','62635','62636'); + f('62637','62638','62639','62640'); + f('62641','62642','62643','62644'); + f('62645','62646','62647','62648'); + f('62649','62650','62651','62652'); + f('62653','62654','62655','62656'); + f('62657','62658','62659','62660'); + f('62661','62662','62663','62664'); + f('62665','62666','62667','62668'); + f('62669','62670','62671','62672'); + f('62673','62674','62675','62676'); + f('62677','62678','62679','62680'); + f('62681','62682','62683','62684'); + f('62685','62686','62687','62688'); + f('62689','62690','62691','62692'); + f('62693','62694','62695','62696'); + f('62697','62698','62699','62700'); + f('62701','62702','62703','62704'); + f('62705','62706','62707','62708'); + f('62709','62710','62711','62712'); + f('62713','62714','62715','62716'); + f('62717','62718','62719','62720'); + f('62721','62722','62723','62724'); + f('62725','62726','62727','62728'); + f('62729','62730','62731','62732'); + f('62733','62734','62735','62736'); + f('62737','62738','62739','62740'); + f('62741','62742','62743','62744'); + f('62745','62746','62747','62748'); + f('62749','62750','62751','62752'); + f('62753','62754','62755','62756'); + f('62757','62758','62759','62760'); + f('62761','62762','62763','62764'); + f('62765','62766','62767','62768'); + f('62769','62770','62771','62772'); + f('62773','62774','62775','62776'); + f('62777','62778','62779','62780'); + f('62781','62782','62783','62784'); + f('62785','62786','62787','62788'); + f('62789','62790','62791','62792'); + f('62793','62794','62795','62796'); + f('62797','62798','62799','62800'); + f('62801','62802','62803','62804'); + f('62805','62806','62807','62808'); + f('62809','62810','62811','62812'); + f('62813','62814','62815','62816'); + f('62817','62818','62819','62820'); + f('62821','62822','62823','62824'); + f('62825','62826','62827','62828'); + f('62829','62830','62831','62832'); + f('62833','62834','62835','62836'); + f('62837','62838','62839','62840'); + f('62841','62842','62843','62844'); + f('62845','62846','62847','62848'); + f('62849','62850','62851','62852'); + f('62853','62854','62855','62856'); + f('62857','62858','62859','62860'); + f('62861','62862','62863','62864'); + f('62865','62866','62867','62868'); + f('62869','62870','62871','62872'); + f('62873','62874','62875','62876'); + f('62877','62878','62879','62880'); + f('62881','62882','62883','62884'); + f('62885','62886','62887','62888'); + f('62889','62890','62891','62892'); + f('62893','62894','62895','62896'); + f('62897','62898','62899','62900'); + f('62901','62902','62903','62904'); + f('62905','62906','62907','62908'); + f('62909','62910','62911','62912'); + f('62913','62914','62915','62916'); + f('62917','62918','62919','62920'); + f('62921','62922','62923','62924'); + f('62925','62926','62927','62928'); + f('62929','62930','62931','62932'); + f('62933','62934','62935','62936'); + f('62937','62938','62939','62940'); + f('62941','62942','62943','62944'); + f('62945','62946','62947','62948'); + f('62949','62950','62951','62952'); + f('62953','62954','62955','62956'); + f('62957','62958','62959','62960'); + f('62961','62962','62963','62964'); + f('62965','62966','62967','62968'); + f('62969','62970','62971','62972'); + f('62973','62974','62975','62976'); + f('62977','62978','62979','62980'); + f('62981','62982','62983','62984'); + f('62985','62986','62987','62988'); + f('62989','62990','62991','62992'); + f('62993','62994','62995','62996'); + f('62997','62998','62999','63000'); + f('63001','63002','63003','63004'); + f('63005','63006','63007','63008'); + f('63009','63010','63011','63012'); + f('63013','63014','63015','63016'); + f('63017','63018','63019','63020'); + f('63021','63022','63023','63024'); + f('63025','63026','63027','63028'); + f('63029','63030','63031','63032'); + f('63033','63034','63035','63036'); + f('63037','63038','63039','63040'); + f('63041','63042','63043','63044'); + f('63045','63046','63047','63048'); + f('63049','63050','63051','63052'); + f('63053','63054','63055','63056'); + f('63057','63058','63059','63060'); + f('63061','63062','63063','63064'); + f('63065','63066','63067','63068'); + f('63069','63070','63071','63072'); + f('63073','63074','63075','63076'); + f('63077','63078','63079','63080'); + f('63081','63082','63083','63084'); + f('63085','63086','63087','63088'); + f('63089','63090','63091','63092'); + f('63093','63094','63095','63096'); + f('63097','63098','63099','63100'); + f('63101','63102','63103','63104'); + f('63105','63106','63107','63108'); + f('63109','63110','63111','63112'); + f('63113','63114','63115','63116'); + f('63117','63118','63119','63120'); + f('63121','63122','63123','63124'); + f('63125','63126','63127','63128'); + f('63129','63130','63131','63132'); + f('63133','63134','63135','63136'); + f('63137','63138','63139','63140'); + f('63141','63142','63143','63144'); + f('63145','63146','63147','63148'); + f('63149','63150','63151','63152'); + f('63153','63154','63155','63156'); + f('63157','63158','63159','63160'); + f('63161','63162','63163','63164'); + f('63165','63166','63167','63168'); + f('63169','63170','63171','63172'); + f('63173','63174','63175','63176'); + f('63177','63178','63179','63180'); + f('63181','63182','63183','63184'); + f('63185','63186','63187','63188'); + f('63189','63190','63191','63192'); + f('63193','63194','63195','63196'); + f('63197','63198','63199','63200'); + f('63201','63202','63203','63204'); + f('63205','63206','63207','63208'); + f('63209','63210','63211','63212'); + f('63213','63214','63215','63216'); + f('63217','63218','63219','63220'); + f('63221','63222','63223','63224'); + f('63225','63226','63227','63228'); + f('63229','63230','63231','63232'); + f('63233','63234','63235','63236'); + f('63237','63238','63239','63240'); + f('63241','63242','63243','63244'); + f('63245','63246','63247','63248'); + f('63249','63250','63251','63252'); + f('63253','63254','63255','63256'); + f('63257','63258','63259','63260'); + f('63261','63262','63263','63264'); + f('63265','63266','63267','63268'); + f('63269','63270','63271','63272'); + f('63273','63274','63275','63276'); + f('63277','63278','63279','63280'); + f('63281','63282','63283','63284'); + f('63285','63286','63287','63288'); + f('63289','63290','63291','63292'); + f('63293','63294','63295','63296'); + f('63297','63298','63299','63300'); + f('63301','63302','63303','63304'); + f('63305','63306','63307','63308'); + f('63309','63310','63311','63312'); + f('63313','63314','63315','63316'); + f('63317','63318','63319','63320'); + f('63321','63322','63323','63324'); + f('63325','63326','63327','63328'); + f('63329','63330','63331','63332'); + f('63333','63334','63335','63336'); + f('63337','63338','63339','63340'); + f('63341','63342','63343','63344'); + f('63345','63346','63347','63348'); + f('63349','63350','63351','63352'); + f('63353','63354','63355','63356'); + f('63357','63358','63359','63360'); + f('63361','63362','63363','63364'); + f('63365','63366','63367','63368'); + f('63369','63370','63371','63372'); + f('63373','63374','63375','63376'); + f('63377','63378','63379','63380'); + f('63381','63382','63383','63384'); + f('63385','63386','63387','63388'); + f('63389','63390','63391','63392'); + f('63393','63394','63395','63396'); + f('63397','63398','63399','63400'); + f('63401','63402','63403','63404'); + f('63405','63406','63407','63408'); + f('63409','63410','63411','63412'); + f('63413','63414','63415','63416'); + f('63417','63418','63419','63420'); + f('63421','63422','63423','63424'); + f('63425','63426','63427','63428'); + f('63429','63430','63431','63432'); + f('63433','63434','63435','63436'); + f('63437','63438','63439','63440'); + f('63441','63442','63443','63444'); + f('63445','63446','63447','63448'); + f('63449','63450','63451','63452'); + f('63453','63454','63455','63456'); + f('63457','63458','63459','63460'); + f('63461','63462','63463','63464'); + f('63465','63466','63467','63468'); + f('63469','63470','63471','63472'); + f('63473','63474','63475','63476'); + f('63477','63478','63479','63480'); + f('63481','63482','63483','63484'); + f('63485','63486','63487','63488'); + f('63489','63490','63491','63492'); + f('63493','63494','63495','63496'); + f('63497','63498','63499','63500'); + f('63501','63502','63503','63504'); + f('63505','63506','63507','63508'); + f('63509','63510','63511','63512'); + f('63513','63514','63515','63516'); + f('63517','63518','63519','63520'); + f('63521','63522','63523','63524'); + f('63525','63526','63527','63528'); + f('63529','63530','63531','63532'); + f('63533','63534','63535','63536'); + f('63537','63538','63539','63540'); + f('63541','63542','63543','63544'); + f('63545','63546','63547','63548'); + f('63549','63550','63551','63552'); + f('63553','63554','63555','63556'); + f('63557','63558','63559','63560'); + f('63561','63562','63563','63564'); + f('63565','63566','63567','63568'); + f('63569','63570','63571','63572'); + f('63573','63574','63575','63576'); + f('63577','63578','63579','63580'); + f('63581','63582','63583','63584'); + f('63585','63586','63587','63588'); + f('63589','63590','63591','63592'); + f('63593','63594','63595','63596'); + f('63597','63598','63599','63600'); + f('63601','63602','63603','63604'); + f('63605','63606','63607','63608'); + f('63609','63610','63611','63612'); + f('63613','63614','63615','63616'); + f('63617','63618','63619','63620'); + f('63621','63622','63623','63624'); + f('63625','63626','63627','63628'); + f('63629','63630','63631','63632'); + f('63633','63634','63635','63636'); + f('63637','63638','63639','63640'); + f('63641','63642','63643','63644'); + f('63645','63646','63647','63648'); + f('63649','63650','63651','63652'); + f('63653','63654','63655','63656'); + f('63657','63658','63659','63660'); + f('63661','63662','63663','63664'); + f('63665','63666','63667','63668'); + f('63669','63670','63671','63672'); + f('63673','63674','63675','63676'); + f('63677','63678','63679','63680'); + f('63681','63682','63683','63684'); + f('63685','63686','63687','63688'); + f('63689','63690','63691','63692'); + f('63693','63694','63695','63696'); + f('63697','63698','63699','63700'); + f('63701','63702','63703','63704'); + f('63705','63706','63707','63708'); + f('63709','63710','63711','63712'); + f('63713','63714','63715','63716'); + f('63717','63718','63719','63720'); + f('63721','63722','63723','63724'); + f('63725','63726','63727','63728'); + f('63729','63730','63731','63732'); + f('63733','63734','63735','63736'); + f('63737','63738','63739','63740'); + f('63741','63742','63743','63744'); + f('63745','63746','63747','63748'); + f('63749','63750','63751','63752'); + f('63753','63754','63755','63756'); + f('63757','63758','63759','63760'); + f('63761','63762','63763','63764'); + f('63765','63766','63767','63768'); + f('63769','63770','63771','63772'); + f('63773','63774','63775','63776'); + f('63777','63778','63779','63780'); + f('63781','63782','63783','63784'); + f('63785','63786','63787','63788'); + f('63789','63790','63791','63792'); + f('63793','63794','63795','63796'); + f('63797','63798','63799','63800'); + f('63801','63802','63803','63804'); + f('63805','63806','63807','63808'); + f('63809','63810','63811','63812'); + f('63813','63814','63815','63816'); + f('63817','63818','63819','63820'); + f('63821','63822','63823','63824'); + f('63825','63826','63827','63828'); + f('63829','63830','63831','63832'); + f('63833','63834','63835','63836'); + f('63837','63838','63839','63840'); + f('63841','63842','63843','63844'); + f('63845','63846','63847','63848'); + f('63849','63850','63851','63852'); + f('63853','63854','63855','63856'); + f('63857','63858','63859','63860'); + f('63861','63862','63863','63864'); + f('63865','63866','63867','63868'); + f('63869','63870','63871','63872'); + f('63873','63874','63875','63876'); + f('63877','63878','63879','63880'); + f('63881','63882','63883','63884'); + f('63885','63886','63887','63888'); + f('63889','63890','63891','63892'); + f('63893','63894','63895','63896'); + f('63897','63898','63899','63900'); + f('63901','63902','63903','63904'); + f('63905','63906','63907','63908'); + f('63909','63910','63911','63912'); + f('63913','63914','63915','63916'); + f('63917','63918','63919','63920'); + f('63921','63922','63923','63924'); + f('63925','63926','63927','63928'); + f('63929','63930','63931','63932'); + f('63933','63934','63935','63936'); + f('63937','63938','63939','63940'); + f('63941','63942','63943','63944'); + f('63945','63946','63947','63948'); + f('63949','63950','63951','63952'); + f('63953','63954','63955','63956'); + f('63957','63958','63959','63960'); + f('63961','63962','63963','63964'); + f('63965','63966','63967','63968'); + f('63969','63970','63971','63972'); + f('63973','63974','63975','63976'); + f('63977','63978','63979','63980'); + f('63981','63982','63983','63984'); + f('63985','63986','63987','63988'); + f('63989','63990','63991','63992'); + f('63993','63994','63995','63996'); + f('63997','63998','63999','64000'); + f('64001','64002','64003','64004'); + f('64005','64006','64007','64008'); + f('64009','64010','64011','64012'); + f('64013','64014','64015','64016'); + f('64017','64018','64019','64020'); + f('64021','64022','64023','64024'); + f('64025','64026','64027','64028'); + f('64029','64030','64031','64032'); + f('64033','64034','64035','64036'); + f('64037','64038','64039','64040'); + f('64041','64042','64043','64044'); + f('64045','64046','64047','64048'); + f('64049','64050','64051','64052'); + f('64053','64054','64055','64056'); + f('64057','64058','64059','64060'); + f('64061','64062','64063','64064'); + f('64065','64066','64067','64068'); + f('64069','64070','64071','64072'); + f('64073','64074','64075','64076'); + f('64077','64078','64079','64080'); + f('64081','64082','64083','64084'); + f('64085','64086','64087','64088'); + f('64089','64090','64091','64092'); + f('64093','64094','64095','64096'); + f('64097','64098','64099','64100'); + f('64101','64102','64103','64104'); + f('64105','64106','64107','64108'); + f('64109','64110','64111','64112'); + f('64113','64114','64115','64116'); + f('64117','64118','64119','64120'); + f('64121','64122','64123','64124'); + f('64125','64126','64127','64128'); + f('64129','64130','64131','64132'); + f('64133','64134','64135','64136'); + f('64137','64138','64139','64140'); + f('64141','64142','64143','64144'); + f('64145','64146','64147','64148'); + f('64149','64150','64151','64152'); + f('64153','64154','64155','64156'); + f('64157','64158','64159','64160'); + f('64161','64162','64163','64164'); + f('64165','64166','64167','64168'); + f('64169','64170','64171','64172'); + f('64173','64174','64175','64176'); + f('64177','64178','64179','64180'); + f('64181','64182','64183','64184'); + f('64185','64186','64187','64188'); + f('64189','64190','64191','64192'); + f('64193','64194','64195','64196'); + f('64197','64198','64199','64200'); + f('64201','64202','64203','64204'); + f('64205','64206','64207','64208'); + f('64209','64210','64211','64212'); + f('64213','64214','64215','64216'); + f('64217','64218','64219','64220'); + f('64221','64222','64223','64224'); + f('64225','64226','64227','64228'); + f('64229','64230','64231','64232'); + f('64233','64234','64235','64236'); + f('64237','64238','64239','64240'); + f('64241','64242','64243','64244'); + f('64245','64246','64247','64248'); + f('64249','64250','64251','64252'); + f('64253','64254','64255','64256'); + f('64257','64258','64259','64260'); + f('64261','64262','64263','64264'); + f('64265','64266','64267','64268'); + f('64269','64270','64271','64272'); + f('64273','64274','64275','64276'); + f('64277','64278','64279','64280'); + f('64281','64282','64283','64284'); + f('64285','64286','64287','64288'); + f('64289','64290','64291','64292'); + f('64293','64294','64295','64296'); + f('64297','64298','64299','64300'); + f('64301','64302','64303','64304'); + f('64305','64306','64307','64308'); + f('64309','64310','64311','64312'); + f('64313','64314','64315','64316'); + f('64317','64318','64319','64320'); + f('64321','64322','64323','64324'); + f('64325','64326','64327','64328'); + f('64329','64330','64331','64332'); + f('64333','64334','64335','64336'); + f('64337','64338','64339','64340'); + f('64341','64342','64343','64344'); + f('64345','64346','64347','64348'); + f('64349','64350','64351','64352'); + f('64353','64354','64355','64356'); + f('64357','64358','64359','64360'); + f('64361','64362','64363','64364'); + f('64365','64366','64367','64368'); + f('64369','64370','64371','64372'); + f('64373','64374','64375','64376'); + f('64377','64378','64379','64380'); + f('64381','64382','64383','64384'); + f('64385','64386','64387','64388'); + f('64389','64390','64391','64392'); + f('64393','64394','64395','64396'); + f('64397','64398','64399','64400'); + f('64401','64402','64403','64404'); + f('64405','64406','64407','64408'); + f('64409','64410','64411','64412'); + f('64413','64414','64415','64416'); + f('64417','64418','64419','64420'); + f('64421','64422','64423','64424'); + f('64425','64426','64427','64428'); + f('64429','64430','64431','64432'); + f('64433','64434','64435','64436'); + f('64437','64438','64439','64440'); + f('64441','64442','64443','64444'); + f('64445','64446','64447','64448'); + f('64449','64450','64451','64452'); + f('64453','64454','64455','64456'); + f('64457','64458','64459','64460'); + f('64461','64462','64463','64464'); + f('64465','64466','64467','64468'); + f('64469','64470','64471','64472'); + f('64473','64474','64475','64476'); + f('64477','64478','64479','64480'); + f('64481','64482','64483','64484'); + f('64485','64486','64487','64488'); + f('64489','64490','64491','64492'); + f('64493','64494','64495','64496'); + f('64497','64498','64499','64500'); + f('64501','64502','64503','64504'); + f('64505','64506','64507','64508'); + f('64509','64510','64511','64512'); + f('64513','64514','64515','64516'); + f('64517','64518','64519','64520'); + f('64521','64522','64523','64524'); + f('64525','64526','64527','64528'); + f('64529','64530','64531','64532'); + f('64533','64534','64535','64536'); + f('64537','64538','64539','64540'); + f('64541','64542','64543','64544'); + f('64545','64546','64547','64548'); + f('64549','64550','64551','64552'); + f('64553','64554','64555','64556'); + f('64557','64558','64559','64560'); + f('64561','64562','64563','64564'); + f('64565','64566','64567','64568'); + f('64569','64570','64571','64572'); + f('64573','64574','64575','64576'); + f('64577','64578','64579','64580'); + f('64581','64582','64583','64584'); + f('64585','64586','64587','64588'); + f('64589','64590','64591','64592'); + f('64593','64594','64595','64596'); + f('64597','64598','64599','64600'); + f('64601','64602','64603','64604'); + f('64605','64606','64607','64608'); + f('64609','64610','64611','64612'); + f('64613','64614','64615','64616'); + f('64617','64618','64619','64620'); + f('64621','64622','64623','64624'); + f('64625','64626','64627','64628'); + f('64629','64630','64631','64632'); + f('64633','64634','64635','64636'); + f('64637','64638','64639','64640'); + f('64641','64642','64643','64644'); + f('64645','64646','64647','64648'); + f('64649','64650','64651','64652'); + f('64653','64654','64655','64656'); + f('64657','64658','64659','64660'); + f('64661','64662','64663','64664'); + f('64665','64666','64667','64668'); + f('64669','64670','64671','64672'); + f('64673','64674','64675','64676'); + f('64677','64678','64679','64680'); + f('64681','64682','64683','64684'); + f('64685','64686','64687','64688'); + f('64689','64690','64691','64692'); + f('64693','64694','64695','64696'); + f('64697','64698','64699','64700'); + f('64701','64702','64703','64704'); + f('64705','64706','64707','64708'); + f('64709','64710','64711','64712'); + f('64713','64714','64715','64716'); + f('64717','64718','64719','64720'); + f('64721','64722','64723','64724'); + f('64725','64726','64727','64728'); + f('64729','64730','64731','64732'); + f('64733','64734','64735','64736'); + f('64737','64738','64739','64740'); + f('64741','64742','64743','64744'); + f('64745','64746','64747','64748'); + f('64749','64750','64751','64752'); + f('64753','64754','64755','64756'); + f('64757','64758','64759','64760'); + f('64761','64762','64763','64764'); + f('64765','64766','64767','64768'); + f('64769','64770','64771','64772'); + f('64773','64774','64775','64776'); + f('64777','64778','64779','64780'); + f('64781','64782','64783','64784'); + f('64785','64786','64787','64788'); + f('64789','64790','64791','64792'); + f('64793','64794','64795','64796'); + f('64797','64798','64799','64800'); + f('64801','64802','64803','64804'); + f('64805','64806','64807','64808'); + f('64809','64810','64811','64812'); + f('64813','64814','64815','64816'); + f('64817','64818','64819','64820'); + f('64821','64822','64823','64824'); + f('64825','64826','64827','64828'); + f('64829','64830','64831','64832'); + f('64833','64834','64835','64836'); + f('64837','64838','64839','64840'); + f('64841','64842','64843','64844'); + f('64845','64846','64847','64848'); + f('64849','64850','64851','64852'); + f('64853','64854','64855','64856'); + f('64857','64858','64859','64860'); + f('64861','64862','64863','64864'); + f('64865','64866','64867','64868'); + f('64869','64870','64871','64872'); + f('64873','64874','64875','64876'); + f('64877','64878','64879','64880'); + f('64881','64882','64883','64884'); + f('64885','64886','64887','64888'); + f('64889','64890','64891','64892'); + f('64893','64894','64895','64896'); + f('64897','64898','64899','64900'); + f('64901','64902','64903','64904'); + f('64905','64906','64907','64908'); + f('64909','64910','64911','64912'); + f('64913','64914','64915','64916'); + f('64917','64918','64919','64920'); + f('64921','64922','64923','64924'); + f('64925','64926','64927','64928'); + f('64929','64930','64931','64932'); + f('64933','64934','64935','64936'); + f('64937','64938','64939','64940'); + f('64941','64942','64943','64944'); + f('64945','64946','64947','64948'); + f('64949','64950','64951','64952'); + f('64953','64954','64955','64956'); + f('64957','64958','64959','64960'); + f('64961','64962','64963','64964'); + f('64965','64966','64967','64968'); + f('64969','64970','64971','64972'); + f('64973','64974','64975','64976'); + f('64977','64978','64979','64980'); + f('64981','64982','64983','64984'); + f('64985','64986','64987','64988'); + f('64989','64990','64991','64992'); + f('64993','64994','64995','64996'); + f('64997','64998','64999','65000'); + f('65001','65002','65003','65004'); + f('65005','65006','65007','65008'); + f('65009','65010','65011','65012'); + f('65013','65014','65015','65016'); + f('65017','65018','65019','65020'); + f('65021','65022','65023','65024'); + f('65025','65026','65027','65028'); + f('65029','65030','65031','65032'); + f('65033','65034','65035','65036'); + f('65037','65038','65039','65040'); + f('65041','65042','65043','65044'); + f('65045','65046','65047','65048'); + f('65049','65050','65051','65052'); + f('65053','65054','65055','65056'); + f('65057','65058','65059','65060'); + f('65061','65062','65063','65064'); + f('65065','65066','65067','65068'); + f('65069','65070','65071','65072'); + f('65073','65074','65075','65076'); + f('65077','65078','65079','65080'); + f('65081','65082','65083','65084'); + f('65085','65086','65087','65088'); + f('65089','65090','65091','65092'); + f('65093','65094','65095','65096'); + f('65097','65098','65099','65100'); + f('65101','65102','65103','65104'); + f('65105','65106','65107','65108'); + f('65109','65110','65111','65112'); + f('65113','65114','65115','65116'); + f('65117','65118','65119','65120'); + f('65121','65122','65123','65124'); + f('65125','65126','65127','65128'); + f('65129','65130','65131','65132'); + f('65133','65134','65135','65136'); + f('65137','65138','65139','65140'); + f('65141','65142','65143','65144'); + f('65145','65146','65147','65148'); + f('65149','65150','65151','65152'); + f('65153','65154','65155','65156'); + f('65157','65158','65159','65160'); + f('65161','65162','65163','65164'); + f('65165','65166','65167','65168'); + f('65169','65170','65171','65172'); + f('65173','65174','65175','65176'); + f('65177','65178','65179','65180'); + f('65181','65182','65183','65184'); + f('65185','65186','65187','65188'); + f('65189','65190','65191','65192'); + f('65193','65194','65195','65196'); + f('65197','65198','65199','65200'); + f('65201','65202','65203','65204'); + f('65205','65206','65207','65208'); + f('65209','65210','65211','65212'); + f('65213','65214','65215','65216'); + f('65217','65218','65219','65220'); + f('65221','65222','65223','65224'); + f('65225','65226','65227','65228'); + f('65229','65230','65231','65232'); + f('65233','65234','65235','65236'); + f('65237','65238','65239','65240'); + f('65241','65242','65243','65244'); + f('65245','65246','65247','65248'); + f('65249','65250','65251','65252'); + f('65253','65254','65255','65256'); + f('65257','65258','65259','65260'); + f('65261','65262','65263','65264'); + f('65265','65266','65267','65268'); + f('65269','65270','65271','65272'); + f('65273','65274','65275','65276'); + f('65277','65278','65279','65280'); + f('65281','65282','65283','65284'); + f('65285','65286','65287','65288'); + f('65289','65290','65291','65292'); + f('65293','65294','65295','65296'); + f('65297','65298','65299','65300'); + f('65301','65302','65303','65304'); + f('65305','65306','65307','65308'); + f('65309','65310','65311','65312'); + f('65313','65314','65315','65316'); + f('65317','65318','65319','65320'); + f('65321','65322','65323','65324'); + f('65325','65326','65327','65328'); + f('65329','65330','65331','65332'); + f('65333','65334','65335','65336'); + f('65337','65338','65339','65340'); + f('65341','65342','65343','65344'); + f('65345','65346','65347','65348'); + f('65349','65350','65351','65352'); + f('65353','65354','65355','65356'); + f('65357','65358','65359','65360'); + f('65361','65362','65363','65364'); + f('65365','65366','65367','65368'); + f('65369','65370','65371','65372'); + f('65373','65374','65375','65376'); + f('65377','65378','65379','65380'); + f('65381','65382','65383','65384'); + f('65385','65386','65387','65388'); + f('65389','65390','65391','65392'); + f('65393','65394','65395','65396'); + f('65397','65398','65399','65400'); + f('65401','65402','65403','65404'); + f('65405','65406','65407','65408'); + f('65409','65410','65411','65412'); + f('65413','65414','65415','65416'); + f('65417','65418','65419','65420'); + f('65421','65422','65423','65424'); + f('65425','65426','65427','65428'); + f('65429','65430','65431','65432'); + f('65433','65434','65435','65436'); + f('65437','65438','65439','65440'); + f('65441','65442','65443','65444'); + f('65445','65446','65447','65448'); + f('65449','65450','65451','65452'); + f('65453','65454','65455','65456'); + f('65457','65458','65459','65460'); + f('65461','65462','65463','65464'); + f('65465','65466','65467','65468'); + f('65469','65470','65471','65472'); + f('65473','65474','65475','65476'); + f('65477','65478','65479','65480'); + f('65481','65482','65483','65484'); + f('65485','65486','65487','65488'); + f('65489','65490','65491','65492'); + f('65493','65494','65495','65496'); + f('65497','65498','65499','65500'); + f('65501','65502','65503','65504'); + f('65505','65506','65507','65508'); + f('65509','65510','65511','65512'); + f('65513','65514','65515','65516'); + f('65517','65518','65519','65520'); + f('65521','65522','65523','65524'); + f('65525','65526','65527','65528'); + f('65529','65530','65531','65532'); + f('65533','65534','65535','65536'); + f('65537','65538','65539','65540'); + f('65541','65542','65543','65544'); + f('65545','65546','65547','65548'); + f('65549','65550','65551','65552'); + f('65553','65554','65555','65556'); + f('65557','65558','65559','65560'); + f('65561','65562','65563','65564'); + f('65565','65566','65567','65568'); + f('65569','65570','65571','65572'); + f('65573','65574','65575','65576'); + f('65577','65578','65579','65580'); + f('65581','65582','65583','65584'); + f('65585','65586','65587','65588'); + f('65589','65590','65591','65592'); + f('65593','65594','65595','65596'); + f('65597','65598','65599','65600'); + f('65601','65602','65603','65604'); + f('65605','65606','65607','65608'); + f('65609','65610','65611','65612'); + f('65613','65614','65615','65616'); + f('65617','65618','65619','65620'); + f('65621','65622','65623','65624'); + f('65625','65626','65627','65628'); + f('65629','65630','65631','65632'); + f('65633','65634','65635','65636'); + f('65637','65638','65639','65640'); + f('65641','65642','65643','65644'); + f('65645','65646','65647','65648'); + f('65649','65650','65651','65652'); + f('65653','65654','65655','65656'); + f('65657','65658','65659','65660'); + f('65661','65662','65663','65664'); + f('65665','65666','65667','65668'); + f('65669','65670','65671','65672'); + f('65673','65674','65675','65676'); + f('65677','65678','65679','65680'); + f('65681','65682','65683','65684'); + f('65685','65686','65687','65688'); + f('65689','65690','65691','65692'); + f('65693','65694','65695','65696'); + f('65697','65698','65699','65700'); + f('65701','65702','65703','65704'); + f('65705','65706','65707','65708'); + f('65709','65710','65711','65712'); + f('65713','65714','65715','65716'); + f('65717','65718','65719','65720'); + f('65721','65722','65723','65724'); + f('65725','65726','65727','65728'); + f('65729','65730','65731','65732'); + f('65733','65734','65735','65736'); + f('65737','65738','65739','65740'); + f('65741','65742','65743','65744'); + f('65745','65746','65747','65748'); + f('65749','65750','65751','65752'); + f('65753','65754','65755','65756'); + f('65757','65758','65759','65760'); + f('65761','65762','65763','65764'); + f('65765','65766','65767','65768'); + f('65769','65770','65771','65772'); + f('65773','65774','65775','65776'); + f('65777','65778','65779','65780'); + f('65781','65782','65783','65784'); + f('65785','65786','65787','65788'); + f('65789','65790','65791','65792'); + f('65793','65794','65795','65796'); + f('65797','65798','65799','65800'); + f('65801','65802','65803','65804'); + f('65805','65806','65807','65808'); + f('65809','65810','65811','65812'); + f('65813','65814','65815','65816'); + f('65817','65818','65819','65820'); + f('65821','65822','65823','65824'); + f('65825','65826','65827','65828'); + f('65829','65830','65831','65832'); + f('65833','65834','65835','65836'); + f('65837','65838','65839','65840'); + f('65841','65842','65843','65844'); + f('65845','65846','65847','65848'); + f('65849','65850','65851','65852'); + f('65853','65854','65855','65856'); + f('65857','65858','65859','65860'); + f('65861','65862','65863','65864'); + f('65865','65866','65867','65868'); + f('65869','65870','65871','65872'); + f('65873','65874','65875','65876'); + f('65877','65878','65879','65880'); + f('65881','65882','65883','65884'); + f('65885','65886','65887','65888'); + f('65889','65890','65891','65892'); + f('65893','65894','65895','65896'); + f('65897','65898','65899','65900'); + f('65901','65902','65903','65904'); + f('65905','65906','65907','65908'); + f('65909','65910','65911','65912'); + f('65913','65914','65915','65916'); + f('65917','65918','65919','65920'); + f('65921','65922','65923','65924'); + f('65925','65926','65927','65928'); + f('65929','65930','65931','65932'); + f('65933','65934','65935','65936'); + f('65937','65938','65939','65940'); + f('65941','65942','65943','65944'); + f('65945','65946','65947','65948'); + f('65949','65950','65951','65952'); + f('65953','65954','65955','65956'); + f('65957','65958','65959','65960'); + f('65961','65962','65963','65964'); + f('65965','65966','65967','65968'); + f('65969','65970','65971','65972'); + f('65973','65974','65975','65976'); + f('65977','65978','65979','65980'); + f('65981','65982','65983','65984'); + f('65985','65986','65987','65988'); + f('65989','65990','65991','65992'); + f('65993','65994','65995','65996'); + f('65997','65998','65999','66000'); + f('66001','66002','66003','66004'); + f('66005','66006','66007','66008'); + f('66009','66010','66011','66012'); + f('66013','66014','66015','66016'); + f('66017','66018','66019','66020'); + f('66021','66022','66023','66024'); + f('66025','66026','66027','66028'); + f('66029','66030','66031','66032'); + f('66033','66034','66035','66036'); + f('66037','66038','66039','66040'); + f('66041','66042','66043','66044'); + f('66045','66046','66047','66048'); + f('66049','66050','66051','66052'); + f('66053','66054','66055','66056'); + f('66057','66058','66059','66060'); + f('66061','66062','66063','66064'); + f('66065','66066','66067','66068'); + f('66069','66070','66071','66072'); + f('66073','66074','66075','66076'); + f('66077','66078','66079','66080'); + f('66081','66082','66083','66084'); + f('66085','66086','66087','66088'); + f('66089','66090','66091','66092'); + f('66093','66094','66095','66096'); + f('66097','66098','66099','66100'); + f('66101','66102','66103','66104'); + f('66105','66106','66107','66108'); + f('66109','66110','66111','66112'); + f('66113','66114','66115','66116'); + f('66117','66118','66119','66120'); + f('66121','66122','66123','66124'); + f('66125','66126','66127','66128'); + f('66129','66130','66131','66132'); + f('66133','66134','66135','66136'); + f('66137','66138','66139','66140'); + f('66141','66142','66143','66144'); + f('66145','66146','66147','66148'); + f('66149','66150','66151','66152'); + f('66153','66154','66155','66156'); + f('66157','66158','66159','66160'); + f('66161','66162','66163','66164'); + f('66165','66166','66167','66168'); + f('66169','66170','66171','66172'); + f('66173','66174','66175','66176'); + f('66177','66178','66179','66180'); + f('66181','66182','66183','66184'); + f('66185','66186','66187','66188'); + f('66189','66190','66191','66192'); + f('66193','66194','66195','66196'); + f('66197','66198','66199','66200'); + f('66201','66202','66203','66204'); + f('66205','66206','66207','66208'); + f('66209','66210','66211','66212'); + f('66213','66214','66215','66216'); + f('66217','66218','66219','66220'); + f('66221','66222','66223','66224'); + f('66225','66226','66227','66228'); + f('66229','66230','66231','66232'); + f('66233','66234','66235','66236'); + f('66237','66238','66239','66240'); + f('66241','66242','66243','66244'); + f('66245','66246','66247','66248'); + f('66249','66250','66251','66252'); + f('66253','66254','66255','66256'); + f('66257','66258','66259','66260'); + f('66261','66262','66263','66264'); + f('66265','66266','66267','66268'); + f('66269','66270','66271','66272'); + f('66273','66274','66275','66276'); + f('66277','66278','66279','66280'); + f('66281','66282','66283','66284'); + f('66285','66286','66287','66288'); + f('66289','66290','66291','66292'); + f('66293','66294','66295','66296'); + f('66297','66298','66299','66300'); + f('66301','66302','66303','66304'); + f('66305','66306','66307','66308'); + f('66309','66310','66311','66312'); + f('66313','66314','66315','66316'); + f('66317','66318','66319','66320'); + f('66321','66322','66323','66324'); + f('66325','66326','66327','66328'); + f('66329','66330','66331','66332'); + f('66333','66334','66335','66336'); + f('66337','66338','66339','66340'); + f('66341','66342','66343','66344'); + f('66345','66346','66347','66348'); + f('66349','66350','66351','66352'); + f('66353','66354','66355','66356'); + f('66357','66358','66359','66360'); + f('66361','66362','66363','66364'); + f('66365','66366','66367','66368'); + f('66369','66370','66371','66372'); + f('66373','66374','66375','66376'); + f('66377','66378','66379','66380'); + f('66381','66382','66383','66384'); + f('66385','66386','66387','66388'); + f('66389','66390','66391','66392'); + f('66393','66394','66395','66396'); + f('66397','66398','66399','66400'); + f('66401','66402','66403','66404'); + f('66405','66406','66407','66408'); + f('66409','66410','66411','66412'); + f('66413','66414','66415','66416'); + f('66417','66418','66419','66420'); + f('66421','66422','66423','66424'); + f('66425','66426','66427','66428'); + f('66429','66430','66431','66432'); + f('66433','66434','66435','66436'); + f('66437','66438','66439','66440'); + f('66441','66442','66443','66444'); + f('66445','66446','66447','66448'); + f('66449','66450','66451','66452'); + f('66453','66454','66455','66456'); + f('66457','66458','66459','66460'); + f('66461','66462','66463','66464'); + f('66465','66466','66467','66468'); + f('66469','66470','66471','66472'); + f('66473','66474','66475','66476'); + f('66477','66478','66479','66480'); + f('66481','66482','66483','66484'); + f('66485','66486','66487','66488'); + f('66489','66490','66491','66492'); + f('66493','66494','66495','66496'); + f('66497','66498','66499','66500'); + f('66501','66502','66503','66504'); + f('66505','66506','66507','66508'); + f('66509','66510','66511','66512'); + f('66513','66514','66515','66516'); + f('66517','66518','66519','66520'); + f('66521','66522','66523','66524'); + f('66525','66526','66527','66528'); + f('66529','66530','66531','66532'); + f('66533','66534','66535','66536'); + f('66537','66538','66539','66540'); + f('66541','66542','66543','66544'); + f('66545','66546','66547','66548'); + f('66549','66550','66551','66552'); + f('66553','66554','66555','66556'); + f('66557','66558','66559','66560'); + f('66561','66562','66563','66564'); + f('66565','66566','66567','66568'); + f('66569','66570','66571','66572'); + f('66573','66574','66575','66576'); + f('66577','66578','66579','66580'); + f('66581','66582','66583','66584'); + f('66585','66586','66587','66588'); + f('66589','66590','66591','66592'); + f('66593','66594','66595','66596'); + f('66597','66598','66599','66600'); + f('66601','66602','66603','66604'); + f('66605','66606','66607','66608'); + f('66609','66610','66611','66612'); + f('66613','66614','66615','66616'); + f('66617','66618','66619','66620'); + f('66621','66622','66623','66624'); + f('66625','66626','66627','66628'); + f('66629','66630','66631','66632'); + f('66633','66634','66635','66636'); + f('66637','66638','66639','66640'); + f('66641','66642','66643','66644'); + f('66645','66646','66647','66648'); + f('66649','66650','66651','66652'); + f('66653','66654','66655','66656'); + f('66657','66658','66659','66660'); + f('66661','66662','66663','66664'); + f('66665','66666','66667','66668'); + f('66669','66670','66671','66672'); + f('66673','66674','66675','66676'); + f('66677','66678','66679','66680'); + f('66681','66682','66683','66684'); + f('66685','66686','66687','66688'); + f('66689','66690','66691','66692'); + f('66693','66694','66695','66696'); + f('66697','66698','66699','66700'); + f('66701','66702','66703','66704'); + f('66705','66706','66707','66708'); + f('66709','66710','66711','66712'); + f('66713','66714','66715','66716'); + f('66717','66718','66719','66720'); + f('66721','66722','66723','66724'); + f('66725','66726','66727','66728'); + f('66729','66730','66731','66732'); + f('66733','66734','66735','66736'); + f('66737','66738','66739','66740'); + f('66741','66742','66743','66744'); + f('66745','66746','66747','66748'); + f('66749','66750','66751','66752'); + f('66753','66754','66755','66756'); + f('66757','66758','66759','66760'); + f('66761','66762','66763','66764'); + f('66765','66766','66767','66768'); + f('66769','66770','66771','66772'); + f('66773','66774','66775','66776'); + f('66777','66778','66779','66780'); + f('66781','66782','66783','66784'); + f('66785','66786','66787','66788'); + f('66789','66790','66791','66792'); + f('66793','66794','66795','66796'); + f('66797','66798','66799','66800'); + f('66801','66802','66803','66804'); + f('66805','66806','66807','66808'); + f('66809','66810','66811','66812'); + f('66813','66814','66815','66816'); + f('66817','66818','66819','66820'); + f('66821','66822','66823','66824'); + f('66825','66826','66827','66828'); + f('66829','66830','66831','66832'); + f('66833','66834','66835','66836'); + f('66837','66838','66839','66840'); + f('66841','66842','66843','66844'); + f('66845','66846','66847','66848'); + f('66849','66850','66851','66852'); + f('66853','66854','66855','66856'); + f('66857','66858','66859','66860'); + f('66861','66862','66863','66864'); + f('66865','66866','66867','66868'); + f('66869','66870','66871','66872'); + f('66873','66874','66875','66876'); + f('66877','66878','66879','66880'); + f('66881','66882','66883','66884'); + f('66885','66886','66887','66888'); + f('66889','66890','66891','66892'); + f('66893','66894','66895','66896'); + f('66897','66898','66899','66900'); + f('66901','66902','66903','66904'); + f('66905','66906','66907','66908'); + f('66909','66910','66911','66912'); + f('66913','66914','66915','66916'); + f('66917','66918','66919','66920'); + f('66921','66922','66923','66924'); + f('66925','66926','66927','66928'); + f('66929','66930','66931','66932'); + f('66933','66934','66935','66936'); + f('66937','66938','66939','66940'); + f('66941','66942','66943','66944'); + f('66945','66946','66947','66948'); + f('66949','66950','66951','66952'); + f('66953','66954','66955','66956'); + f('66957','66958','66959','66960'); + f('66961','66962','66963','66964'); + f('66965','66966','66967','66968'); + f('66969','66970','66971','66972'); + f('66973','66974','66975','66976'); + f('66977','66978','66979','66980'); + f('66981','66982','66983','66984'); + f('66985','66986','66987','66988'); + f('66989','66990','66991','66992'); + f('66993','66994','66995','66996'); + f('66997','66998','66999','67000'); + f('67001','67002','67003','67004'); + f('67005','67006','67007','67008'); + f('67009','67010','67011','67012'); + f('67013','67014','67015','67016'); + f('67017','67018','67019','67020'); + f('67021','67022','67023','67024'); + f('67025','67026','67027','67028'); + f('67029','67030','67031','67032'); + f('67033','67034','67035','67036'); + f('67037','67038','67039','67040'); + f('67041','67042','67043','67044'); + f('67045','67046','67047','67048'); + f('67049','67050','67051','67052'); + f('67053','67054','67055','67056'); + f('67057','67058','67059','67060'); + f('67061','67062','67063','67064'); + f('67065','67066','67067','67068'); + f('67069','67070','67071','67072'); + f('67073','67074','67075','67076'); + f('67077','67078','67079','67080'); + f('67081','67082','67083','67084'); + f('67085','67086','67087','67088'); + f('67089','67090','67091','67092'); + f('67093','67094','67095','67096'); + f('67097','67098','67099','67100'); + f('67101','67102','67103','67104'); + f('67105','67106','67107','67108'); + f('67109','67110','67111','67112'); + f('67113','67114','67115','67116'); + f('67117','67118','67119','67120'); + f('67121','67122','67123','67124'); + f('67125','67126','67127','67128'); + f('67129','67130','67131','67132'); + f('67133','67134','67135','67136'); + f('67137','67138','67139','67140'); + f('67141','67142','67143','67144'); + f('67145','67146','67147','67148'); + f('67149','67150','67151','67152'); + f('67153','67154','67155','67156'); + f('67157','67158','67159','67160'); + f('67161','67162','67163','67164'); + f('67165','67166','67167','67168'); + f('67169','67170','67171','67172'); + f('67173','67174','67175','67176'); + f('67177','67178','67179','67180'); + f('67181','67182','67183','67184'); + f('67185','67186','67187','67188'); + f('67189','67190','67191','67192'); + f('67193','67194','67195','67196'); + f('67197','67198','67199','67200'); + f('67201','67202','67203','67204'); + f('67205','67206','67207','67208'); + f('67209','67210','67211','67212'); + f('67213','67214','67215','67216'); + f('67217','67218','67219','67220'); + f('67221','67222','67223','67224'); + f('67225','67226','67227','67228'); + f('67229','67230','67231','67232'); + f('67233','67234','67235','67236'); + f('67237','67238','67239','67240'); + f('67241','67242','67243','67244'); + f('67245','67246','67247','67248'); + f('67249','67250','67251','67252'); + f('67253','67254','67255','67256'); + f('67257','67258','67259','67260'); + f('67261','67262','67263','67264'); + f('67265','67266','67267','67268'); + f('67269','67270','67271','67272'); + f('67273','67274','67275','67276'); + f('67277','67278','67279','67280'); + f('67281','67282','67283','67284'); + f('67285','67286','67287','67288'); + f('67289','67290','67291','67292'); + f('67293','67294','67295','67296'); + f('67297','67298','67299','67300'); + f('67301','67302','67303','67304'); + f('67305','67306','67307','67308'); + f('67309','67310','67311','67312'); + f('67313','67314','67315','67316'); + f('67317','67318','67319','67320'); + f('67321','67322','67323','67324'); + f('67325','67326','67327','67328'); + f('67329','67330','67331','67332'); + f('67333','67334','67335','67336'); + f('67337','67338','67339','67340'); + f('67341','67342','67343','67344'); + f('67345','67346','67347','67348'); + f('67349','67350','67351','67352'); + f('67353','67354','67355','67356'); + f('67357','67358','67359','67360'); + f('67361','67362','67363','67364'); + f('67365','67366','67367','67368'); + f('67369','67370','67371','67372'); + f('67373','67374','67375','67376'); + f('67377','67378','67379','67380'); + f('67381','67382','67383','67384'); + f('67385','67386','67387','67388'); + f('67389','67390','67391','67392'); + f('67393','67394','67395','67396'); + f('67397','67398','67399','67400'); + f('67401','67402','67403','67404'); + f('67405','67406','67407','67408'); + f('67409','67410','67411','67412'); + f('67413','67414','67415','67416'); + f('67417','67418','67419','67420'); + f('67421','67422','67423','67424'); + f('67425','67426','67427','67428'); + f('67429','67430','67431','67432'); + f('67433','67434','67435','67436'); + f('67437','67438','67439','67440'); + f('67441','67442','67443','67444'); + f('67445','67446','67447','67448'); + f('67449','67450','67451','67452'); + f('67453','67454','67455','67456'); + f('67457','67458','67459','67460'); + f('67461','67462','67463','67464'); + f('67465','67466','67467','67468'); + f('67469','67470','67471','67472'); + f('67473','67474','67475','67476'); + f('67477','67478','67479','67480'); + f('67481','67482','67483','67484'); + f('67485','67486','67487','67488'); + f('67489','67490','67491','67492'); + f('67493','67494','67495','67496'); + f('67497','67498','67499','67500'); + f('67501','67502','67503','67504'); + f('67505','67506','67507','67508'); + f('67509','67510','67511','67512'); + f('67513','67514','67515','67516'); + f('67517','67518','67519','67520'); + f('67521','67522','67523','67524'); + f('67525','67526','67527','67528'); + f('67529','67530','67531','67532'); + f('67533','67534','67535','67536'); + f('67537','67538','67539','67540'); + f('67541','67542','67543','67544'); + f('67545','67546','67547','67548'); + f('67549','67550','67551','67552'); + f('67553','67554','67555','67556'); + f('67557','67558','67559','67560'); + f('67561','67562','67563','67564'); + f('67565','67566','67567','67568'); + f('67569','67570','67571','67572'); + f('67573','67574','67575','67576'); + f('67577','67578','67579','67580'); + f('67581','67582','67583','67584'); + f('67585','67586','67587','67588'); + f('67589','67590','67591','67592'); + f('67593','67594','67595','67596'); + f('67597','67598','67599','67600'); + f('67601','67602','67603','67604'); + f('67605','67606','67607','67608'); + f('67609','67610','67611','67612'); + f('67613','67614','67615','67616'); + f('67617','67618','67619','67620'); + f('67621','67622','67623','67624'); + f('67625','67626','67627','67628'); + f('67629','67630','67631','67632'); + f('67633','67634','67635','67636'); + f('67637','67638','67639','67640'); + f('67641','67642','67643','67644'); + f('67645','67646','67647','67648'); + f('67649','67650','67651','67652'); + f('67653','67654','67655','67656'); + f('67657','67658','67659','67660'); + f('67661','67662','67663','67664'); + f('67665','67666','67667','67668'); + f('67669','67670','67671','67672'); + f('67673','67674','67675','67676'); + f('67677','67678','67679','67680'); + f('67681','67682','67683','67684'); + f('67685','67686','67687','67688'); + f('67689','67690','67691','67692'); + f('67693','67694','67695','67696'); + f('67697','67698','67699','67700'); + f('67701','67702','67703','67704'); + f('67705','67706','67707','67708'); + f('67709','67710','67711','67712'); + f('67713','67714','67715','67716'); + f('67717','67718','67719','67720'); + f('67721','67722','67723','67724'); + f('67725','67726','67727','67728'); + f('67729','67730','67731','67732'); + f('67733','67734','67735','67736'); + f('67737','67738','67739','67740'); + f('67741','67742','67743','67744'); + f('67745','67746','67747','67748'); + f('67749','67750','67751','67752'); + f('67753','67754','67755','67756'); + f('67757','67758','67759','67760'); + f('67761','67762','67763','67764'); + f('67765','67766','67767','67768'); + f('67769','67770','67771','67772'); + f('67773','67774','67775','67776'); + f('67777','67778','67779','67780'); + f('67781','67782','67783','67784'); + f('67785','67786','67787','67788'); + f('67789','67790','67791','67792'); + f('67793','67794','67795','67796'); + f('67797','67798','67799','67800'); + f('67801','67802','67803','67804'); + f('67805','67806','67807','67808'); + f('67809','67810','67811','67812'); + f('67813','67814','67815','67816'); + f('67817','67818','67819','67820'); + f('67821','67822','67823','67824'); + f('67825','67826','67827','67828'); + f('67829','67830','67831','67832'); + f('67833','67834','67835','67836'); + f('67837','67838','67839','67840'); + f('67841','67842','67843','67844'); + f('67845','67846','67847','67848'); + f('67849','67850','67851','67852'); + f('67853','67854','67855','67856'); + f('67857','67858','67859','67860'); + f('67861','67862','67863','67864'); + f('67865','67866','67867','67868'); + f('67869','67870','67871','67872'); + f('67873','67874','67875','67876'); + f('67877','67878','67879','67880'); + f('67881','67882','67883','67884'); + f('67885','67886','67887','67888'); + f('67889','67890','67891','67892'); + f('67893','67894','67895','67896'); + f('67897','67898','67899','67900'); + f('67901','67902','67903','67904'); + f('67905','67906','67907','67908'); + f('67909','67910','67911','67912'); + f('67913','67914','67915','67916'); + f('67917','67918','67919','67920'); + f('67921','67922','67923','67924'); + f('67925','67926','67927','67928'); + f('67929','67930','67931','67932'); + f('67933','67934','67935','67936'); + f('67937','67938','67939','67940'); + f('67941','67942','67943','67944'); + f('67945','67946','67947','67948'); + f('67949','67950','67951','67952'); + f('67953','67954','67955','67956'); + f('67957','67958','67959','67960'); + f('67961','67962','67963','67964'); + f('67965','67966','67967','67968'); + f('67969','67970','67971','67972'); + f('67973','67974','67975','67976'); + f('67977','67978','67979','67980'); + f('67981','67982','67983','67984'); + f('67985','67986','67987','67988'); + f('67989','67990','67991','67992'); + f('67993','67994','67995','67996'); + f('67997','67998','67999','68000'); + f('68001','68002','68003','68004'); + f('68005','68006','68007','68008'); + f('68009','68010','68011','68012'); + f('68013','68014','68015','68016'); + f('68017','68018','68019','68020'); + f('68021','68022','68023','68024'); + f('68025','68026','68027','68028'); + f('68029','68030','68031','68032'); + f('68033','68034','68035','68036'); + f('68037','68038','68039','68040'); + f('68041','68042','68043','68044'); + f('68045','68046','68047','68048'); + f('68049','68050','68051','68052'); + f('68053','68054','68055','68056'); + f('68057','68058','68059','68060'); + f('68061','68062','68063','68064'); + f('68065','68066','68067','68068'); + f('68069','68070','68071','68072'); + f('68073','68074','68075','68076'); + f('68077','68078','68079','68080'); + f('68081','68082','68083','68084'); + f('68085','68086','68087','68088'); + f('68089','68090','68091','68092'); + f('68093','68094','68095','68096'); + f('68097','68098','68099','68100'); + f('68101','68102','68103','68104'); + f('68105','68106','68107','68108'); + f('68109','68110','68111','68112'); + f('68113','68114','68115','68116'); + f('68117','68118','68119','68120'); + f('68121','68122','68123','68124'); + f('68125','68126','68127','68128'); + f('68129','68130','68131','68132'); + f('68133','68134','68135','68136'); + f('68137','68138','68139','68140'); + f('68141','68142','68143','68144'); + f('68145','68146','68147','68148'); + f('68149','68150','68151','68152'); + f('68153','68154','68155','68156'); + f('68157','68158','68159','68160'); + f('68161','68162','68163','68164'); + f('68165','68166','68167','68168'); + f('68169','68170','68171','68172'); + f('68173','68174','68175','68176'); + f('68177','68178','68179','68180'); + f('68181','68182','68183','68184'); + f('68185','68186','68187','68188'); + f('68189','68190','68191','68192'); + f('68193','68194','68195','68196'); + f('68197','68198','68199','68200'); + f('68201','68202','68203','68204'); + f('68205','68206','68207','68208'); + f('68209','68210','68211','68212'); + f('68213','68214','68215','68216'); + f('68217','68218','68219','68220'); + f('68221','68222','68223','68224'); + f('68225','68226','68227','68228'); + f('68229','68230','68231','68232'); + f('68233','68234','68235','68236'); + f('68237','68238','68239','68240'); + f('68241','68242','68243','68244'); + f('68245','68246','68247','68248'); + f('68249','68250','68251','68252'); + f('68253','68254','68255','68256'); + f('68257','68258','68259','68260'); + f('68261','68262','68263','68264'); + f('68265','68266','68267','68268'); + f('68269','68270','68271','68272'); + f('68273','68274','68275','68276'); + f('68277','68278','68279','68280'); + f('68281','68282','68283','68284'); + f('68285','68286','68287','68288'); + f('68289','68290','68291','68292'); + f('68293','68294','68295','68296'); + f('68297','68298','68299','68300'); + f('68301','68302','68303','68304'); + f('68305','68306','68307','68308'); + f('68309','68310','68311','68312'); + f('68313','68314','68315','68316'); + f('68317','68318','68319','68320'); + f('68321','68322','68323','68324'); + f('68325','68326','68327','68328'); + f('68329','68330','68331','68332'); + f('68333','68334','68335','68336'); + f('68337','68338','68339','68340'); + f('68341','68342','68343','68344'); + f('68345','68346','68347','68348'); + f('68349','68350','68351','68352'); + f('68353','68354','68355','68356'); + f('68357','68358','68359','68360'); + f('68361','68362','68363','68364'); + f('68365','68366','68367','68368'); + f('68369','68370','68371','68372'); + f('68373','68374','68375','68376'); + f('68377','68378','68379','68380'); + f('68381','68382','68383','68384'); + f('68385','68386','68387','68388'); + f('68389','68390','68391','68392'); + f('68393','68394','68395','68396'); + f('68397','68398','68399','68400'); + f('68401','68402','68403','68404'); + f('68405','68406','68407','68408'); + f('68409','68410','68411','68412'); + f('68413','68414','68415','68416'); + f('68417','68418','68419','68420'); + f('68421','68422','68423','68424'); + f('68425','68426','68427','68428'); + f('68429','68430','68431','68432'); + f('68433','68434','68435','68436'); + f('68437','68438','68439','68440'); + f('68441','68442','68443','68444'); + f('68445','68446','68447','68448'); + f('68449','68450','68451','68452'); + f('68453','68454','68455','68456'); + f('68457','68458','68459','68460'); + f('68461','68462','68463','68464'); + f('68465','68466','68467','68468'); + f('68469','68470','68471','68472'); + f('68473','68474','68475','68476'); + f('68477','68478','68479','68480'); + f('68481','68482','68483','68484'); + f('68485','68486','68487','68488'); + f('68489','68490','68491','68492'); + f('68493','68494','68495','68496'); + f('68497','68498','68499','68500'); + f('68501','68502','68503','68504'); + f('68505','68506','68507','68508'); + f('68509','68510','68511','68512'); + f('68513','68514','68515','68516'); + f('68517','68518','68519','68520'); + f('68521','68522','68523','68524'); + f('68525','68526','68527','68528'); + f('68529','68530','68531','68532'); + f('68533','68534','68535','68536'); + f('68537','68538','68539','68540'); + f('68541','68542','68543','68544'); + f('68545','68546','68547','68548'); + f('68549','68550','68551','68552'); + f('68553','68554','68555','68556'); + f('68557','68558','68559','68560'); + f('68561','68562','68563','68564'); + f('68565','68566','68567','68568'); + f('68569','68570','68571','68572'); + f('68573','68574','68575','68576'); + f('68577','68578','68579','68580'); + f('68581','68582','68583','68584'); + f('68585','68586','68587','68588'); + f('68589','68590','68591','68592'); + f('68593','68594','68595','68596'); + f('68597','68598','68599','68600'); + f('68601','68602','68603','68604'); + f('68605','68606','68607','68608'); + f('68609','68610','68611','68612'); + f('68613','68614','68615','68616'); + f('68617','68618','68619','68620'); + f('68621','68622','68623','68624'); + f('68625','68626','68627','68628'); + f('68629','68630','68631','68632'); + f('68633','68634','68635','68636'); + f('68637','68638','68639','68640'); + f('68641','68642','68643','68644'); + f('68645','68646','68647','68648'); + f('68649','68650','68651','68652'); + f('68653','68654','68655','68656'); + f('68657','68658','68659','68660'); + f('68661','68662','68663','68664'); + f('68665','68666','68667','68668'); + f('68669','68670','68671','68672'); + f('68673','68674','68675','68676'); + f('68677','68678','68679','68680'); + f('68681','68682','68683','68684'); + f('68685','68686','68687','68688'); + f('68689','68690','68691','68692'); + f('68693','68694','68695','68696'); + f('68697','68698','68699','68700'); + f('68701','68702','68703','68704'); + f('68705','68706','68707','68708'); + f('68709','68710','68711','68712'); + f('68713','68714','68715','68716'); + f('68717','68718','68719','68720'); + f('68721','68722','68723','68724'); + f('68725','68726','68727','68728'); + f('68729','68730','68731','68732'); + f('68733','68734','68735','68736'); + f('68737','68738','68739','68740'); + f('68741','68742','68743','68744'); + f('68745','68746','68747','68748'); + f('68749','68750','68751','68752'); + f('68753','68754','68755','68756'); + f('68757','68758','68759','68760'); + f('68761','68762','68763','68764'); + f('68765','68766','68767','68768'); + f('68769','68770','68771','68772'); + f('68773','68774','68775','68776'); + f('68777','68778','68779','68780'); + f('68781','68782','68783','68784'); + f('68785','68786','68787','68788'); + f('68789','68790','68791','68792'); + f('68793','68794','68795','68796'); + f('68797','68798','68799','68800'); + f('68801','68802','68803','68804'); + f('68805','68806','68807','68808'); + f('68809','68810','68811','68812'); + f('68813','68814','68815','68816'); + f('68817','68818','68819','68820'); + f('68821','68822','68823','68824'); + f('68825','68826','68827','68828'); + f('68829','68830','68831','68832'); + f('68833','68834','68835','68836'); + f('68837','68838','68839','68840'); + f('68841','68842','68843','68844'); + f('68845','68846','68847','68848'); + f('68849','68850','68851','68852'); + f('68853','68854','68855','68856'); + f('68857','68858','68859','68860'); + f('68861','68862','68863','68864'); + f('68865','68866','68867','68868'); + f('68869','68870','68871','68872'); + f('68873','68874','68875','68876'); + f('68877','68878','68879','68880'); + f('68881','68882','68883','68884'); + f('68885','68886','68887','68888'); + f('68889','68890','68891','68892'); + f('68893','68894','68895','68896'); + f('68897','68898','68899','68900'); + f('68901','68902','68903','68904'); + f('68905','68906','68907','68908'); + f('68909','68910','68911','68912'); + f('68913','68914','68915','68916'); + f('68917','68918','68919','68920'); + f('68921','68922','68923','68924'); + f('68925','68926','68927','68928'); + f('68929','68930','68931','68932'); + f('68933','68934','68935','68936'); + f('68937','68938','68939','68940'); + f('68941','68942','68943','68944'); + f('68945','68946','68947','68948'); + f('68949','68950','68951','68952'); + f('68953','68954','68955','68956'); + f('68957','68958','68959','68960'); + f('68961','68962','68963','68964'); + f('68965','68966','68967','68968'); + f('68969','68970','68971','68972'); + f('68973','68974','68975','68976'); + f('68977','68978','68979','68980'); + f('68981','68982','68983','68984'); + f('68985','68986','68987','68988'); + f('68989','68990','68991','68992'); + f('68993','68994','68995','68996'); + f('68997','68998','68999','69000'); + f('69001','69002','69003','69004'); + f('69005','69006','69007','69008'); + f('69009','69010','69011','69012'); + f('69013','69014','69015','69016'); + f('69017','69018','69019','69020'); + f('69021','69022','69023','69024'); + f('69025','69026','69027','69028'); + f('69029','69030','69031','69032'); + f('69033','69034','69035','69036'); + f('69037','69038','69039','69040'); + f('69041','69042','69043','69044'); + f('69045','69046','69047','69048'); + f('69049','69050','69051','69052'); + f('69053','69054','69055','69056'); + f('69057','69058','69059','69060'); + f('69061','69062','69063','69064'); + f('69065','69066','69067','69068'); + f('69069','69070','69071','69072'); + f('69073','69074','69075','69076'); + f('69077','69078','69079','69080'); + f('69081','69082','69083','69084'); + f('69085','69086','69087','69088'); + f('69089','69090','69091','69092'); + f('69093','69094','69095','69096'); + f('69097','69098','69099','69100'); + f('69101','69102','69103','69104'); + f('69105','69106','69107','69108'); + f('69109','69110','69111','69112'); + f('69113','69114','69115','69116'); + f('69117','69118','69119','69120'); + f('69121','69122','69123','69124'); + f('69125','69126','69127','69128'); + f('69129','69130','69131','69132'); + f('69133','69134','69135','69136'); + f('69137','69138','69139','69140'); + f('69141','69142','69143','69144'); + f('69145','69146','69147','69148'); + f('69149','69150','69151','69152'); + f('69153','69154','69155','69156'); + f('69157','69158','69159','69160'); + f('69161','69162','69163','69164'); + f('69165','69166','69167','69168'); + f('69169','69170','69171','69172'); + f('69173','69174','69175','69176'); + f('69177','69178','69179','69180'); + f('69181','69182','69183','69184'); + f('69185','69186','69187','69188'); + f('69189','69190','69191','69192'); + f('69193','69194','69195','69196'); + f('69197','69198','69199','69200'); + f('69201','69202','69203','69204'); + f('69205','69206','69207','69208'); + f('69209','69210','69211','69212'); + f('69213','69214','69215','69216'); + f('69217','69218','69219','69220'); + f('69221','69222','69223','69224'); + f('69225','69226','69227','69228'); + f('69229','69230','69231','69232'); + f('69233','69234','69235','69236'); + f('69237','69238','69239','69240'); + f('69241','69242','69243','69244'); + f('69245','69246','69247','69248'); + f('69249','69250','69251','69252'); + f('69253','69254','69255','69256'); + f('69257','69258','69259','69260'); + f('69261','69262','69263','69264'); + f('69265','69266','69267','69268'); + f('69269','69270','69271','69272'); + f('69273','69274','69275','69276'); + f('69277','69278','69279','69280'); + f('69281','69282','69283','69284'); + f('69285','69286','69287','69288'); + f('69289','69290','69291','69292'); + f('69293','69294','69295','69296'); + f('69297','69298','69299','69300'); + f('69301','69302','69303','69304'); + f('69305','69306','69307','69308'); + f('69309','69310','69311','69312'); + f('69313','69314','69315','69316'); + f('69317','69318','69319','69320'); + f('69321','69322','69323','69324'); + f('69325','69326','69327','69328'); + f('69329','69330','69331','69332'); + f('69333','69334','69335','69336'); + f('69337','69338','69339','69340'); + f('69341','69342','69343','69344'); + f('69345','69346','69347','69348'); + f('69349','69350','69351','69352'); + f('69353','69354','69355','69356'); + f('69357','69358','69359','69360'); + f('69361','69362','69363','69364'); + f('69365','69366','69367','69368'); + f('69369','69370','69371','69372'); + f('69373','69374','69375','69376'); + f('69377','69378','69379','69380'); + f('69381','69382','69383','69384'); + f('69385','69386','69387','69388'); + f('69389','69390','69391','69392'); + f('69393','69394','69395','69396'); + f('69397','69398','69399','69400'); + f('69401','69402','69403','69404'); + f('69405','69406','69407','69408'); + f('69409','69410','69411','69412'); + f('69413','69414','69415','69416'); + f('69417','69418','69419','69420'); + f('69421','69422','69423','69424'); + f('69425','69426','69427','69428'); + f('69429','69430','69431','69432'); + f('69433','69434','69435','69436'); + f('69437','69438','69439','69440'); + f('69441','69442','69443','69444'); + f('69445','69446','69447','69448'); + f('69449','69450','69451','69452'); + f('69453','69454','69455','69456'); + f('69457','69458','69459','69460'); + f('69461','69462','69463','69464'); + f('69465','69466','69467','69468'); + f('69469','69470','69471','69472'); + f('69473','69474','69475','69476'); + f('69477','69478','69479','69480'); + f('69481','69482','69483','69484'); + f('69485','69486','69487','69488'); + f('69489','69490','69491','69492'); + f('69493','69494','69495','69496'); + f('69497','69498','69499','69500'); + f('69501','69502','69503','69504'); + f('69505','69506','69507','69508'); + f('69509','69510','69511','69512'); + f('69513','69514','69515','69516'); + f('69517','69518','69519','69520'); + f('69521','69522','69523','69524'); + f('69525','69526','69527','69528'); + f('69529','69530','69531','69532'); + f('69533','69534','69535','69536'); + f('69537','69538','69539','69540'); + f('69541','69542','69543','69544'); + f('69545','69546','69547','69548'); + f('69549','69550','69551','69552'); + f('69553','69554','69555','69556'); + f('69557','69558','69559','69560'); + f('69561','69562','69563','69564'); + f('69565','69566','69567','69568'); + f('69569','69570','69571','69572'); + f('69573','69574','69575','69576'); + f('69577','69578','69579','69580'); + f('69581','69582','69583','69584'); + f('69585','69586','69587','69588'); + f('69589','69590','69591','69592'); + f('69593','69594','69595','69596'); + f('69597','69598','69599','69600'); + f('69601','69602','69603','69604'); + f('69605','69606','69607','69608'); + f('69609','69610','69611','69612'); + f('69613','69614','69615','69616'); + f('69617','69618','69619','69620'); + f('69621','69622','69623','69624'); + f('69625','69626','69627','69628'); + f('69629','69630','69631','69632'); + f('69633','69634','69635','69636'); + f('69637','69638','69639','69640'); + f('69641','69642','69643','69644'); + f('69645','69646','69647','69648'); + f('69649','69650','69651','69652'); + f('69653','69654','69655','69656'); + f('69657','69658','69659','69660'); + f('69661','69662','69663','69664'); + f('69665','69666','69667','69668'); + f('69669','69670','69671','69672'); + f('69673','69674','69675','69676'); + f('69677','69678','69679','69680'); + f('69681','69682','69683','69684'); + f('69685','69686','69687','69688'); + f('69689','69690','69691','69692'); + f('69693','69694','69695','69696'); + f('69697','69698','69699','69700'); + f('69701','69702','69703','69704'); + f('69705','69706','69707','69708'); + f('69709','69710','69711','69712'); + f('69713','69714','69715','69716'); + f('69717','69718','69719','69720'); + f('69721','69722','69723','69724'); + f('69725','69726','69727','69728'); + f('69729','69730','69731','69732'); + f('69733','69734','69735','69736'); + f('69737','69738','69739','69740'); + f('69741','69742','69743','69744'); + f('69745','69746','69747','69748'); + f('69749','69750','69751','69752'); + f('69753','69754','69755','69756'); + f('69757','69758','69759','69760'); + f('69761','69762','69763','69764'); + f('69765','69766','69767','69768'); + f('69769','69770','69771','69772'); + f('69773','69774','69775','69776'); + f('69777','69778','69779','69780'); + f('69781','69782','69783','69784'); + f('69785','69786','69787','69788'); + f('69789','69790','69791','69792'); + f('69793','69794','69795','69796'); + f('69797','69798','69799','69800'); + f('69801','69802','69803','69804'); + f('69805','69806','69807','69808'); + f('69809','69810','69811','69812'); + f('69813','69814','69815','69816'); + f('69817','69818','69819','69820'); + f('69821','69822','69823','69824'); + f('69825','69826','69827','69828'); + f('69829','69830','69831','69832'); + f('69833','69834','69835','69836'); + f('69837','69838','69839','69840'); + f('69841','69842','69843','69844'); + f('69845','69846','69847','69848'); + f('69849','69850','69851','69852'); + f('69853','69854','69855','69856'); + f('69857','69858','69859','69860'); + f('69861','69862','69863','69864'); + f('69865','69866','69867','69868'); + f('69869','69870','69871','69872'); + f('69873','69874','69875','69876'); + f('69877','69878','69879','69880'); + f('69881','69882','69883','69884'); + f('69885','69886','69887','69888'); + f('69889','69890','69891','69892'); + f('69893','69894','69895','69896'); + f('69897','69898','69899','69900'); + f('69901','69902','69903','69904'); + f('69905','69906','69907','69908'); + f('69909','69910','69911','69912'); + f('69913','69914','69915','69916'); + f('69917','69918','69919','69920'); + f('69921','69922','69923','69924'); + f('69925','69926','69927','69928'); + f('69929','69930','69931','69932'); + f('69933','69934','69935','69936'); + f('69937','69938','69939','69940'); + f('69941','69942','69943','69944'); + f('69945','69946','69947','69948'); + f('69949','69950','69951','69952'); + f('69953','69954','69955','69956'); + f('69957','69958','69959','69960'); + f('69961','69962','69963','69964'); + f('69965','69966','69967','69968'); + f('69969','69970','69971','69972'); + f('69973','69974','69975','69976'); + f('69977','69978','69979','69980'); + f('69981','69982','69983','69984'); + f('69985','69986','69987','69988'); + f('69989','69990','69991','69992'); + f('69993','69994','69995','69996'); + f('69997','69998','69999','70000'); + actual = 'No Crash, No Error'; +} +catch(e) +{ + printStatus('caught ' + e); + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-156354.js b/js/src/tests/js1_5/Regress/regress-156354.js new file mode 100644 index 000000000..198651494 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-156354.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 16 September 2002 + * SUMMARY: Testing propertyIsEnumerable() on nonexistent property + * See http://bugzilla.mozilla.org/show_bug.cgi?id=156354 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 156354; +var summary = 'Testing propertyIsEnumerable() on nonexistent property'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = this.propertyIsEnumerable('XYZ'); +expect = false; +addThis(); + +status = inSection(2); +actual = this.propertyIsEnumerable(''); +expect = false; +addThis(); + +status = inSection(3); +actual = this.propertyIsEnumerable(undefined); +expect = false; +addThis(); + +status = inSection(4); +actual = this.propertyIsEnumerable(null); +expect = false; +addThis(); + +status = inSection(5); +actual = this.propertyIsEnumerable('\u02b1'); +expect = false; +addThis(); + + +var obj = {prop1:null}; + +status = inSection(6); +actual = obj.propertyIsEnumerable('prop1'); +expect = true; +addThis(); + +status = inSection(7); +actual = obj.propertyIsEnumerable('prop2'); +expect = false; +addThis(); + +// let's try one via eval(), too - +status = inSection(8); +eval("actual = obj.propertyIsEnumerable('prop2')"); +expect = false; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-159334.js b/js/src/tests/js1_5/Regress/regress-159334.js new file mode 100644 index 000000000..74f884f9f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-159334.js @@ -0,0 +1,95 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 31 Oct 2002 + * SUMMARY: Testing script with at least 64K of different string literals + * See http://bugzilla.mozilla.org/show_bug.cgi?id=159334 + * + * Testing that script engine can handle scripts with at least 64K of different + * string literals. The following will evaluate, via eval(), a script like this: + * + * f('0') + * f('1') + * ... + * f('N - 1') + * + * where N is 0xFFFE + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 159334; +var summary = 'Testing script with at least 64K of different string literals'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var N = 0xFFFE; + +// Create big string for eval recursively to avoid N*N behavior +// on string concatenation +var long_eval = buildEval_r(0, N); + +// Run it +var test_sum = 0; +function f(str) { test_sum += Number(str); } +eval(long_eval); + +status = inSection(1); +actual = (test_sum == N * (N - 1) / 2); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function buildEval_r(beginLine, endLine) +{ + var count = endLine - beginLine; + + if (count == 0) + return ""; + + if (count == 1) + return "f('" + beginLine + "')\n"; + + var middle = beginLine + (count >>> 1); + return buildEval_r(beginLine, middle) + buildEval_r(middle, endLine); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-162392.js b/js/src/tests/js1_5/Regress/regress-162392.js new file mode 100644 index 000000000..a745d2134 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-162392.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + + +//----------------------------------------------------------------------------- +// SUMMARY: 10.1.8 Arguments Object length + +var BUGNUMBER = 162392; +var summary = 'eval("arguments").length == 0 when no arguments specified'; +var actual = noargslength(); +var expect = 0; + +function noargslength() +{ + enterFunc('noargslength'); + return eval('arguments').length; + exitFunc('noargslength'); +} + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-165201.js b/js/src/tests/js1_5/Regress/regress-165201.js new file mode 100644 index 000000000..de5828c3d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-165201.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 165201; +var summary = ''; +var actual = ''; +var expect = ''; + + +summary = 'RegExp.prototype.toSource should not affect RegExp.prototype.toString'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* + * Define function returning a regular expression literal + * and override RegExp.prototype.toSource + */ + +function f() +{ + return /abc/; +} + +RegExp.prototype.toSource = function() { return 'Hi there'; }; + +expect = -1; +actual = f.toString().indexOf('Hi there'); + +reportCompare(expect, actual, summary); + +/* + * Define function returning an array literal + * and override RegExp.prototype.toSource + */ +summary = 'Array.prototype.toSource should not affect Array.prototype.toString'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +function g() +{ + return [1,2,3]; +} + +Array.prototype.toSource = function() { return 'Hi there'; } + + expect = -1; +actual = g.toString().indexOf('Hi there'); + +reportCompare(expect, actual, summary); + + diff --git a/js/src/tests/js1_5/Regress/regress-167328.js b/js/src/tests/js1_5/Regress/regress-167328.js new file mode 100644 index 000000000..88ebe8d1e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-167328.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 167328; +var summary = 'Normal error reporting code should fill Error object properties'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'TypeError:19'; +try +{ + var obj = {toString: function() {return new Object();}}; + var result = String(obj); + actual = 'no error'; +} +catch(e) +{ + actual = e.name + ':' + e.lineNumber; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-167658.js b/js/src/tests/js1_5/Regress/regress-167658.js new file mode 100644 index 000000000..3b4ed3f2e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-167658.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 167658; +var summary = 'Do not crash due to js_NewRegExp initialization'; +var actual = 'No Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +var UBOUND=100; +for (var j=0; j<UBOUND; j++) +{ + 'Apfelkiste, Apfelschale'.replace('Apfel', function() + { + for (var i = 0; i < arguments.length; i++) + printStatus(i+': '+arguments[i]); + return 'Bananen'; + }); + + printStatus(j); +} + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-168347.js b/js/src/tests/js1_5/Regress/regress-168347.js new file mode 100644 index 000000000..5754c4fff --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-168347.js @@ -0,0 +1,186 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 13 Sep 2002 + * SUMMARY: Testing F.toString() + * See http://bugzilla.mozilla.org/show_bug.cgi?id=168347 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 168347; +var summary = "Testing F.toString()"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var FtoString = ''; +var sFunc = ''; + +sFunc += 'function F()'; +sFunc += '{'; +sFunc += ' var f = arguments.callee;'; +sFunc += ' f.i = 0;'; +sFunc += ''; +sFunc += ' try'; +sFunc += ' {'; +sFunc += ' f.i = f.i + 1;'; +sFunc += ' print("i = i+1 succeeded \ti = " + f.i);'; +sFunc += ' }'; +sFunc += ' catch(e)'; +sFunc += ' {'; +sFunc += ' print("i = i+1 failed with " + e + "\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ''; +sFunc += ' try'; +sFunc += ' {'; +sFunc += ' ++f.i;'; +sFunc += ' print("++i succeeded \t\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ' catch(e)'; +sFunc += ' {'; +sFunc += ' print("++i failed with " + e + "\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ''; +sFunc += ' try'; +sFunc += ' {'; +sFunc += ' f.i++;'; +sFunc += ' print("i++ succeeded \t\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ' catch(e)'; +sFunc += ' {'; +sFunc += ' print("i++ failed with " + e + "\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ''; +sFunc += ' try'; +sFunc += ' {'; +sFunc += ' --f.i;'; +sFunc += ' print("--i succeeded \t\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ' catch(e)'; +sFunc += ' {'; +sFunc += ' print("--i failed with " + e + "\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ''; +sFunc += ' try'; +sFunc += ' {'; +sFunc += ' f.i--;'; +sFunc += ' print("i-- succeeded \t\ti = " + f.i);'; +sFunc += ' }'; +sFunc += ' catch(e)'; +sFunc += ' {'; +sFunc += ' print("i-- failed with " + e + "\ti = " + f.i);'; +sFunc += ' }'; +sFunc += '}'; + + +/* + * Use sFunc to define the function F. The test + * then rests on comparing F.toString() to sFunc. + */ +eval(sFunc); + + +/* + * There are trivial whitespace differences between F.toString() + * and sFunc. So strip out whitespace before comparing them - + */ +sFunc = stripWhite(sFunc); +FtoString = stripWhite(F.toString()); + + +/* + * Break comparison into sections to make any failures + * easier for the developer to track down - + */ +status = inSection(1); +actual = FtoString.substring(0,100); +expect = sFunc.substring(0,100); +addThis(); + +status = inSection(2); +actual = FtoString.substring(100,200); +expect = sFunc.substring(100,200); +addThis(); + +status = inSection(3); +actual = FtoString.substring(200,300); +expect = sFunc.substring(200,300); +addThis(); + +status = inSection(4); +actual = FtoString.substring(300,400); +expect = sFunc.substring(300,400); +addThis(); + +status = inSection(5); +actual = FtoString.substring(400,500); +expect = sFunc.substring(400,500); +addThis(); + +status = inSection(6); +actual = FtoString.substring(500,600); +expect = sFunc.substring(500,600); +addThis(); + +status = inSection(7); +actual = FtoString.substring(600,700); +expect = sFunc.substring(600,700); +addThis(); + +status = inSection(8); +actual = FtoString.substring(700,800); +expect = sFunc.substring(700,800); +addThis(); + +status = inSection(9); +actual = FtoString.substring(800,900); +expect = sFunc.substring(800,900); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + +/* + * Remove any whitespace characters; also + * any escaped tabs or escaped newlines. + */ +function stripWhite(str) +{ + var re = /\s|\\t|\\n/g; + return str.replace(re, ''); +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-170193.js b/js/src/tests/js1_5/Regress/regress-170193.js new file mode 100644 index 000000000..0ca20f5a3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-170193.js @@ -0,0 +1,77 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 22 Sep 2002 + * SUMMARY: adding prop after middle-delete of function w duplicate formal args + * See http://bugzilla.mozilla.org/show_bug.cgi?id=170193 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 170193; +var summary = 'adding property after middle-delete of function w duplicate formal args'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +/* + * This sequence of steps used to cause the SpiderMonkey shell to hang - + */ +function f(a,a,b){} +f.c=42; +f.d=43; +delete f.c; // "middle delete" +f.e=44; + +status = inSection(1); +actual = f.c; +expect = undefined; +addThis(); + +status = inSection(2); +actual = f.d; +expect = 43; +addThis(); + +status = inSection(3); +actual = f.e; +expect = 44; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-172699.js b/js/src/tests/js1_5/Regress/regress-172699.js new file mode 100644 index 000000000..333f99f27 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-172699.js @@ -0,0 +1,72 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 07 Oct 2002 + * SUMMARY: UTF-8 decoder should not accept overlong sequences + * See http://bugzilla.mozilla.org/show_bug.cgi?id=172699 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 172699; +var summary = 'UTF-8 decoder should not accept overlong sequences'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +expect = "URIError thrown"; +try +{ + decodeURI("%C0%AF"); + actual = "no error thrown"; +} +catch (e) +{ + if (e instanceof URIError) + actual = "URIError thrown"; + else if (e instanceof Error) + actual = "wrong error thrown: " + e.name; + else + actual = "non-error thrown: " + e; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-173067.js b/js/src/tests/js1_5/Regress/regress-173067.js new file mode 100644 index 000000000..9b8542ccd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-173067.js @@ -0,0 +1,25 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 173067; +var summary = 'Properly report / in a literal regexp class as an error'; +var actual = ''; +var expect = 'SyntaxError: unterminated character class '; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + var re = eval('/[/]/'); +} +catch(e) +{ + actual = e.toString(); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-174709.js b/js/src/tests/js1_5/Regress/regress-174709.js new file mode 100644 index 000000000..8b839a912 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-174709.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 174709; +var summary = 'Don\'t Crash'; +var actual = 'FAIL'; +var expect = 'PASS'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* code removed until replacement can be created. */ + +/* crash and burn */ + +var G2z=["ev","sta","fro","cha","le",[""]]; +var qS0=[]; +qS0.push("G"+2); +qS0.push("z"); +var kJ6=this[qS0.join("")]; +kJ6[0]+="a"; +kJ6[1]+="rtX"; +kJ6[2]+="mCha"; +kJ6[3]+="rCo"; +kJ6[4]+="ngt"; +function heW(){} +heW.prototype={}; +var b2V=new Array(); +b2V.push("k"); +b2V.push("J"); +b2V.push(6); +var Co4=this[b2V.join("")]; +Co4[0]+="l"; +Co4[1]+="opu"; +Co4[2]+="rCo"; +Co4[3]+="deA"; +Co4[4]+="h"; + +var Ke1=[]; +Ke1.push("C"); +Ke1.push("o"); +Ke1.push(4); +var Qp3=this[Ke1.join("")]; +Qp3[1]+="s"; +Qp3[2]+="de"; +Qp3[3]+="t"; + +var kh1=Qp3[5][Qp3[4]]; + +var l8q=[]; +l8q.push("g".toUpperCase()); +l8q.push(2); +l8q.push("z"); +/* var e2k=window[l8q.join("")];*/ +var e2k=eval(l8q.join("")); +for (Qp3[5][kh1] in this) + for (Qp3[5][kh1+1] in this) + if (Qp3[5][kh1] > Qp3[5][kh1+1] && + Qp3[5][kh1][e2k[4]] == Qp3[5][kh1+1][e2k[4]] && + Qp3[5][kh1].substr(kh1,kh1+1) == Qp3[5][kh1+1].substr(kh1,kh1+1)) + Qp3[5][kh1 + 2] = Qp3[5][kh1]; + + +actual = 'PASS'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-176125.js b/js/src/tests/js1_5/Regress/regress-176125.js new file mode 100644 index 000000000..8334b2b79 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-176125.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 176125; +var summary = 'if() should not return a value'; +var actual = ''; +var expect = 'undefined'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + printStatus('if (test1());'); + actual = typeof eval('if (test1());'); +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': if (test1());'); + +try +{ + printStatus('if (test2());'); + actual = typeof eval('if (test2());'); +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': if (test2());'); + + +function test1() +{ + 'Hi there!'; +} + +function test2() +{ + test1(); + return false; +} diff --git a/js/src/tests/js1_5/Regress/regress-179524.js b/js/src/tests/js1_5/Regress/regress-179524.js new file mode 100644 index 000000000..f4ab67f7e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-179524.js @@ -0,0 +1,295 @@ +// |reftest| skip-if(!xulRuntime.shell) +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 11 Nov 2002 + * SUMMARY: JS shouldn't crash on extraneous args to str.match(), etc. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=179524 + * + * Note that when testing str.replace(), we have to be careful if the first + * argument provided to str.replace() is not a regexp object. ECMA-262 says + * it is NOT converted to one, unlike the case for str.match(), str.search(). + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21. This means + * we have to be careful how we test meta-characters in the first argument + * to str.replace(), if that argument is a string - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 179524; +var summary = "Don't crash on extraneous arguments to str.match(), etc."; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +str = 'ABC abc'; +var re = /z/ig; + +status = inSection(1); +actual = str.match(re); +expect = null; +addThis(); + +status = inSection(2); +actual = str.match(re, 'i'); +expect = null; +addThis(); + +status = inSection(3); +actual = str.match(re, 'g', ''); +expect = null; +addThis(); + +status = inSection(4); +actual = str.match(re, 'z', new Object(), new Date()); +expect = null; +addThis(); + + +/* + * Now try the same thing with str.search() + */ +status = inSection(5); +actual = str.search(re); +expect = -1; +addThis(); + +status = inSection(6); +actual = str.search(re, 'i'); +expect = -1; +addThis(); + +status = inSection(7); +actual = str.search(re, 'g', ''); +expect = -1; +addThis(); + +status = inSection(8); +actual = str.search(re, 'z', new Object(), new Date()); +expect = -1; +addThis(); + + +/* + * Now try the same thing with str.replace() + */ +status = inSection(9); +actual = str.replace(re, 'Z'); +expect = str; +addThis(); + +status = inSection(10); +actual = str.replace(re, 'Z', 'i'); +expect = str; +addThis(); + +status = inSection(11); +actual = str.replace(re, 'Z', 'g', ''); +expect = str; +addThis(); + +status = inSection(12); +actual = str.replace(re, 'Z', 'z', new Object(), new Date()); +expect = str; +addThis(); + + + +/* + * Now test the case where str.match()'s first argument is not a regexp object. + * In that case, JS follows ECMA-262 Ed.3 by converting the 1st argument to a + * regexp object using the argument as a regexp pattern, but then extends ECMA + * by taking any optional 2nd argument to be a regexp flag string (e.g.'ig'). + * + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c10 + */ +status = inSection(13); +actual = str.match('a').toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(14); +actual = str.match('a', 'i').toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(15); +actual = str.match('a', 'ig').toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(16); +actual = str.match('\\s', 'm').toString(); +expect = str.match(/\s/).toString(); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(17); +actual = str.match('a', 'i', 'g').toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(18); +actual = str.match('a', 'ig', new Object()).toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(19); +actual = str.match('\\s', 'm', 999).toString(); +expect = str.match(/\s/).toString(); +addThis(); + +status = inSection(20); +actual = str.match('a', 'z').toString(); +expect = str.match(/a/).toString(); +addThis(); + + + +/* + * Now test str.search() where the first argument is not a regexp object. + * The same considerations as above apply - + * + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16 + */ +status = inSection(21); +actual = str.search('a'); +expect = str.search(/a/); +addThis(); + +status = inSection(22); +actual = str.search('a', 'i'); +expect = str.search(/a/); +addThis(); + +status = inSection(23); +actual = str.search('a', 'ig'); +expect = str.search(/a/); +addThis(); + +status = inSection(24); +actual = str.search('\\s', 'm'); +expect = str.search(/\s/); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(25); +actual = str.search('a', 'i', 'g'); +expect = str.search(/a/); +addThis(); + +status = inSection(26); +actual = str.search('a', 'ig', new Object()); +expect = str.search(/a/); +addThis(); + +status = inSection(27); +actual = str.search('\\s', 'm', 999); +expect = str.search(/\s/); +addThis(); + +status = inSection(28); +actual = str.search('a', 'z'); +expect = str.search(/a/); +addThis(); + + + +/* + * Now test str.replace() where the first argument is not a regexp object. + * The same considerations as above apply, EXCEPT for meta-characters. + * See introduction to testcase above. References: + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16 + * http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21 + */ +status = inSection(29); +actual = str.replace('a', 'Z'); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(30); +actual = str.replace('a', 'Z', 'i'); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(31); +actual = str.replace('a', 'Z', 'ig'); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(32); +actual = str.replace('\\s', 'Z', 'm'); //<--- NO!!! No meta-characters 1st arg! +actual = str.replace(' ', 'Z', 'm'); //<--- Have to do this instead +expect = str.replace(/\s/, 'Z'); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(33); +actual = str.replace('a', 'Z', 'i', 'g'); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(34); +actual = str.replace('a', 'Z', 'ig', new Object()); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(35); +actual = str.replace('\\s', 'Z', 'm', 999); //<--- NO meta-characters 1st arg! +actual = str.replace(' ', 'Z', 'm', 999); //<--- Have to do this instead +expect = str.replace(/\s/, 'Z'); +addThis(); + +status = inSection(36); +actual = str.replace('a', 'Z', 'z'); +expect = str.replace(/a/, 'Z'); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-185165.js b/js/src/tests/js1_5/Regress/regress-185165.js new file mode 100644 index 000000000..d207d95bb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-185165.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 13 Dec 2002 + * SUMMARY: Decompilation of "\\" should give "\\" + * See http://bugzilla.mozilla.org/show_bug.cgi?id=185165 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 185165; +var summary = 'Decompilation of "\\\\" should give "\\\\"'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// Check that second decompilation of script gives the same string as first one +var f1 = function() { return "\\"; } + var s1 = f1.toString(); + +var f2; +eval("f2=" + s1); +var s2 = f2.toString(); + +status = inSection(1); +actual = s2; +expect = s1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-191633.js b/js/src/tests/js1_5/Regress/regress-191633.js new file mode 100644 index 000000000..74b17b8b1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-191633.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 03 February 2003 + * SUMMARY: Testing script with huge number of comments + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=191633 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 191633; +var summary = 'Testing script with huge number of comments'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = false; // initialize to failure +var s = repeat_str("//\n", 40000); // Build a string of 40000 lines of comments +eval(s + "actual = true;"); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function repeat_str(str, repeat_count) +{ + var arr = new Array(repeat_count); + + while (repeat_count != 0) + arr[--repeat_count] = str; + + return str.concat.apply(str, arr); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-191668.js b/js/src/tests/js1_5/Regress/regress-191668.js new file mode 100644 index 000000000..db35a9537 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-191668.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 03 February 2003 + * SUMMARY: Testing script containing <!- at internal buffer boundary. + * JS parser must look for HTML comment-opener <!--, but mustn't disallow <!- + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=191668 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 191668; +var summary = 'Testing script containing <!- at internal buffer boundary'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var N = 512; +var j = 0; +var str = 'if (0<!-0) ++j;'; + +for (var i=0; i!=N; ++i) +{ + eval(str); + str = ' ' + str; +} + +status = inSection(1); +actual = j; +expect = N; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-192414.js b/js/src/tests/js1_5/Regress/regress-192414.js new file mode 100644 index 000000000..e6fadaadd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-192414.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 February 2003 + * SUMMARY: Parser recursion should check stack overflow + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=192414 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 192414; +var summary = 'Parser recursion should check stack overflow'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +/* + * We will form an eval string to set the result-variable |actual|. + * To get a feel for this, suppose N were 3. Then the eval string is + * 'actual = (1&(1&(1&1)));' The expected value after eval() is 1. + */ +status = inSection(1); +var N = 10000; +var left = repeat_str('(1&', N); +var right = repeat_str(')', N); +var str = 'actual = '.concat(left, '1', right, ';'); +try +{ + eval(str); +} +catch (e) +{ + /* + * An exception during this eval is OK, as the runtime can throw one + * in response to too deep recursion. We haven't crashed; good! + */ + actual = 1; +} +expect = 1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function repeat_str(str, repeat_count) +{ + var arr = new Array(--repeat_count); + while (repeat_count != 0) + arr[--repeat_count] = str; + return str.concat.apply(str, arr); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-193418.js b/js/src/tests/js1_5/Regress/regress-193418.js new file mode 100644 index 000000000..e4ac84a38 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-193418.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 17 February 2003 + * SUMMARY: Testing empty blocks + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=193418 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 193418; +var summary = 'Testing empty blocks'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() +{ + while (0) + { + { } + } + actual = true; +} + + +status = inSection(1); +f(); // sets |actual| +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-203278-1.js b/js/src/tests/js1_5/Regress/regress-203278-1.js new file mode 100644 index 000000000..0c0d317ee --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-203278-1.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 203278; +var summary = 'Don\'t crash in recursive js_MarkGCThing'; +var actual = 'FAIL'; +var expect = 'PASS'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function test1() {} +function test() { test1.call(this); } +test.prototype = new test1(); + +var length = 512 * 1024 - 1; +var obj = new test(); +var first = obj; +for(var i = 0 ; i < length ; i++) { + obj.next = new test(); + obj = obj.next; +} + +actual = 'PASS'; + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-203402.js b/js/src/tests/js1_5/Regress/regress-203402.js new file mode 100644 index 000000000..28e125f87 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-203402.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 28 April 2003 + * SUMMARY: Testing the ternary query operator + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=203402 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 203402; +var summary = 'Testing the ternary query operator'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// This used to crash the Rhino optimized shell - +status = inSection(1); +actual = "" + (1==0) ? "" : ""; +expect = ""; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-203841.js b/js/src/tests/js1_5/Regress/regress-203841.js new file mode 100644 index 000000000..303b99e51 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-203841.js @@ -0,0 +1,130 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 29 April 2003 + * SUMMARY: Testing merged if-clauses + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=203841 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 203841; +var summary = 'Testing merged if-clauses'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +var a = 0; +var b = 0; +var c = 0; +if (a == 5, b == 6) { c = 1; } +actual = c; +expect = 0; +addThis(); + +status = inSection(2); +a = 5; +b = 0; +c = 0; +if (a == 5, b == 6) { c = 1; } +actual = c; +expect = 0; +addThis(); + +status = inSection(3); +a = 5; +b = 6; +c = 0; +if (a == 5, b == 6) { c = 1; } +actual = c; +expect = 1; +addThis(); + +/* + * Now get tricky and use the = operator inside the if-clause + */ +status = inSection(4); +a = 0; +b = 6; +c = 0; +if (a = 5, b == 6) { c = 1; } +actual = c; +expect = 1; +addThis(); + +status = inSection(5); +c = 0; +if (1, 1 == 6) { c = 1; } +actual = c; +expect = 0; +addThis(); + + +/* + * Now some tests involving arrays + */ +var x=[]; + +status = inSection(6); // get element case +c = 0; +if (x[1==2]) { c = 1; } +actual = c; +expect = 0; +addThis(); + +status = inSection(7); // set element case +c = 0; +if (x[1==2]=1) { c = 1; } +actual = c; +expect = 1; +addThis(); + +status = inSection(8); // delete element case +c = 0; +if (delete x[1==2]) { c = 1; } +actual = c; +expect = 1; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-204210.js b/js/src/tests/js1_5/Regress/regress-204210.js new file mode 100644 index 000000000..0c079abaa --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-204210.js @@ -0,0 +1,116 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 29 April 2003 + * SUMMARY: eval() is not a constructor, but don't crash on |new eval();| + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=204210 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 204210; +var summary = "eval() is not a constructor, but don't crash on |new eval();|"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/* + * Just testing that we don't crash on any of these constructs - + */ + + +/* + * global scope - + */ +try +{ + var x = new eval(); + new eval(); +} +catch(e) +{ +} + + +/* + * function scope - + */ +f(); +function f() +{ + try + { + var x = new eval(); + new eval(); + } + catch(e) + { + } +} + + +/* + * eval scope - + */ +var s = ''; +s += 'try'; +s += '{'; +s += ' var x = new eval();'; +s += ' new eval();'; +s += '}'; +s += 'catch(e)'; +s += '{'; +s += '}'; +eval(s); + + +/* + * some combinations of scope - + */ +s = ''; +s += 'function g()'; +s += '{'; +s += ' try'; +s += ' {'; +s += ' var x = new eval();'; +s += ' new eval();'; +s += ' }'; +s += ' catch(e)'; +s += ' {'; +s += ' }'; +s += '}'; +s += 'g();'; +eval(s); + + +function h() +{ + var s = ''; + s += 'function f()'; + s += '{'; + s += ' try'; + s += ' {'; + s += ' var x = new eval();'; + s += ' new eval();'; + s += ' }'; + s += ' catch(e)'; + s += ' {'; + s += ' }'; + s += '}'; + s += 'f();'; + eval(s); +} +h(); + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-210682.js b/js/src/tests/js1_5/Regress/regress-210682.js new file mode 100644 index 000000000..52eb95d4d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-210682.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 02 July 2003 + * SUMMARY: testing line ending with |continue| and only terminated by a CR + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=210682 + * + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 210682; +var summary = 'testing line ending with |continue| and only terminated by CR'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +for (i=0; i<100; i++) +{ + if (i%2 == 0) continue + this.lasti = i; +} + +status = inSection(1); +actual = lasti; +expect = 99; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-211590.js b/js/src/tests/js1_5/Regress/regress-211590.js new file mode 100644 index 000000000..a31bd3bfe --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-211590.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 211590; +var summary = 'Math.random should be random'; +var actual = ''; +var expect = 'between 47.5% and 52.5%'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var r = Math.random; +var c = Math.pow( 2, 53 ); + +var n = 10000; +var odd1 = 0; +var odd2 = 0; + +for ( var i = 0; i < n; ++i ) +{ + var v= r() * c; + if ( v & 1 ) + ++odd1; + if ( v - c + c & 1 ) + ++odd2; +} + +odd1 *= 100 / n; +odd2 *= 100 / n; + +if (odd1 >= 47.5 && odd1 <= 52.5) +{ + actual = expect; +} +else +{ + actual = ' is ' + odd1.toFixed(3); +} + +reportCompare(expect, actual, summary); + +if (odd2 >= 47.5 && odd2 <= 52.5) +{ + actual = expect; +} +else +{ + actual = ' is ' + odd2.toFixed(3); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-213482.js b/js/src/tests/js1_5/Regress/regress-213482.js new file mode 100644 index 000000000..26ed7e894 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-213482.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 213482; +var summary = 'Do not crash watching property when watcher sets property'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var testobj = {value: 'foo'}; + +function watched (a, b, c) { + testobj.value = (new Date()).getTime(); +} + +function setTest() { + testobj.value = 'b'; +} + +testobj.watch("value", watched); + +setTest(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-214761.js b/js/src/tests/js1_5/Regress/regress-214761.js new file mode 100644 index 000000000..ab5a4663c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-214761.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 214761; +var summary = 'Crash Regression from bug 208030'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); + +var code = "var bar1=new Array();\n" + + "bar1[0]='foo';\n" + + "var bar2=document.all&&navigator.userAgent.indexOf('Opera')==-1;\n" + + "var bar3=document.getElementById&&!document.all;\n" + + "var bar4=document.layers;\n" + + "function foo1(){\n" + + "return false;}\n" + + "function foo2(){\n" + + "return false;}\n" + + "function foo3(){\n" + + "return false;}\n" + + "function foo4(){\n" + + "return false;}\n" + + "function foo5(){\n" + + "return false;}\n" + + "function foo6(){\n" + + "return false;}\n" + + "function foo7(){\n" + + "return false;}"; + +try +{ + eval(code); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-216320.js b/js/src/tests/js1_5/Regress/regress-216320.js new file mode 100644 index 000000000..01fcea0f0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-216320.js @@ -0,0 +1,1006 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 September 2003 + * SUMMARY: Just seeing we don't crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=216320 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 216320; +var summary = "Just seeing we don't crash on this code"; + +printBugNumber(BUGNUMBER); +printStatus(summary); + + +/* TESTCASE BEGINS HERE */ +status=0; +ism='NO'; +scf='N'; + +function vol(){ + if(navigator.appName!="Netscape"){ if(!window.navigator.onLine){ alert(pbc0430); return false; } } + return true; } + +function vnid(formfield){ + nid=formfield.value; + if(!nid.match(/^\s*$/)){ + nl=nid.split('/').length; + if(nl!=2&&nl!=3){ + alert(pbc0420); + formfield.focus(); + return false; + }}} + +function vnull(formfield){ + text=formfield.value; + if(text.match(/^\s*$/)){ + alert(pbc0425); + formfield.focus(); + return false; + } + return true; +} + +function vdt(formfield){ + date=formfield.value; +//MM/DD/YYYY +//YYYY/MM/DD + year=date.substring(0,4); + hy1=date.charAt(4); + month=date.substring(5,7); + hy2=date.charAt(7); + day=date.substring(8,10); + today=new Date(); + tdy=today.getDate(); + tmn=today.getMonth()+1; + if(today.getYear()<2000)tyr=today.getYear()+1900; + else tyr=today.getYear(); + if(date.match(/^\s*$/)) {return true; } + + if(hy1!="/"||hy2!="/"){ + alert(pbc0409); + formfield.focus(); + return false; + } + if(month>12||day>31||month<=0||day<=0||(isNaN(month)==true)||(isNaN(day)==true)||(isNaN(year)==true)){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)||(year%4==0&&month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day>30)){ + alert(pbc0409); + formfield.focus(); + return false; + } + return true; +} + +function vkdt(formfield){ + date=formfield.value; + year=date.substring(0,4); + hy1=date.charAt(4); + month=date.substring(5,7); + hy2=date.charAt(7); + day=date.substring(8,10); + today=new Date(); + tdy=today.getDate(); + tmn=today.getMonth()+1; + if(today.getYear()<2000)tyr=today.getYear()+1900; + else tyr=today.getYear(); + if(date.match(/^\s*$/)){ + alert(pbc0425); + formfield.focus(); + return false; + } + if(hy1!="/"||hy2!="/"){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(month>12||day>31||month<=0||day<=0||(isNaN(month)==true)||(isNaN(day)==true)||(isNaN(year)==true)){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)||(year%4==0&&month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day>30)){ + alert(pbc0409); + formfield.focus(); + return false; + } + return true; +} + +function ddif(month1,day1,year1,month2,day2,year2){ + start = new Date(); + start.setYear(year1); + start.setMonth(month1-1); + start.setDate(day1); + start.setMinutes(0); + start.setHours(0); + start.setSeconds(0); + end = new Date(); + end.setYear(year2); + end.setMonth(month2-1); + end.setDate(day2); + end.setMinutes(0); + end.setHours(0); + end.setSeconds(0); + current =(end.getTime() - start.getTime()); + days = Math.floor(current /(1000 * 60 * 60 * 24)); + return(days); +} + +function vsub(form,status,ism,action){ + if(!vol()){ return false; } + if(status<9||status==12){ + band=form.BAND.options[form.BAND.selectedIndex].value; + if(band=="00"){ + alert(pbc0425); + form.BAND.focus(); + return false; + } + } + + if((status>=0&&status<5)||(status==7)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.PT)) { return false; } + adt1=form.STD; + adt2=form.END; + stdt=adt1.value; + etdt=adt2.value; + syr=stdt.substring(0,4); + start_hy1=stdt.charAt(4); + smon=stdt.substring(5,7); + start_hy2=stdt.charAt(7); + sdy=stdt.substring(8,10); + eyr=etdt.substring(0,4); + end_hy1=etdt.charAt(4); + emon=etdt.substring(5,7); + end_hy2=etdt.charAt(7); + edy=etdt.substring(8,10); + today=new Date(); + date=today.getDate(); + month=today.getMonth()+1; + if(today.getYear()<2000)year=today.getYear()+1900; else year=today.getYear(); + nextYear=year+1; + if(!vnull(form.STD)){ return false; } + if(!vnull(form.END)){ return false; } + if(start_hy1!="/"||start_hy2!="/"){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(end_hy1!="/"||end_hy2!="/"){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(smon>12||sdy>31||smon<=0||sdy<=0||(isNaN(smon)==true)||(isNaN(sdy)==true)||(isNaN(syr)==true)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(emon>12||edy>31||emon<=0||edy<=0||(isNaN(emon)==true)||(isNaN(edy)==true)||(isNaN(eyr)==true)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(((smon==1||smon==3||smon==5||smon==7||smon==8||smon==10||smon==12)&&sdy>31)||(syr%4==0&&smon==2&&sdy>29)||(syr%4!=0&&smon==2&&sdy>28)||((smon==4||smon==6||smon==9||smon==11)&&sdy>30)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(((emon==1||emon==3||emon==5||emon==7||emon==8||emon==10||emon==12)&&edy>31)||(eyr%4==0&&emon==2&&edy>29)||(eyr%4!=0&&emon==2&&edy>28)||((emon==4||emon==6||emon==9||emon==11)&&edy>30)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if ((eyr==nextYear)&&(syr==year)) { + if ((emon>1)||(edy >31)) { + alert(pbc0401); + form.END.focus(); + return false; + } + } else { + + if ((syr!=eyr)){ + alert(pbc0406); + form.STD.focus(); + return false; + } + if(smon>emon||(smon==emon&&sdy>=edy)){ + alert(pbc0402); + form.STD.focus(); + return false; + } + if((eyr!=year)&&(eyr!=year-1)){ + alert(pbc0405); + form.END.focus(); + return false; + } + } + if(ism=='YES'&&(status==5||status==6||status==12)){ + if(ddif(month,date,year,emon,edy,eyr)>31){ + alert(pbc0421); + form.END.focus(); + return false; + } + } + if((status>2&&status<5)||(status==7)||((status>=5&&status<9||status==12)&&ism=="YES")){ + if(status!=5){ + if(!vdt(form.IRD1)){ + return false; + } + if(!vdt(form.IRD2)){ + return false; + } + if(!vdt(form.IRD3)){ + return false; + } + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vdt(form.FRD1)){ return false;} + } + if(status==5){ + if(!vdt(form.IRD1)){return false;} + if(!vdt(form.IRD2)){return false;} + if(!vdt(form.IRD3)){return false;} + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vkdt(form.FRD1)){ + return false; + } + } + } + } + if((status>=0&&status<2)||(status==3)||(status==7)||(status>=2&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.WO)){ + return false; + } + if(!vnull(form.EO)){ + return false; + } + if(!vnull(form.TO)){ + return false; + } + } + if((status==2||status==4)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.WR)){return false;} + if(!vnull(form.ER)){return false;} + if(!vnull(form.TR)){return false;} + } + if((status==5||status==6||status==12)&&ism=="YES"){ + if(!vkdt(form.FRD1)){return false;} + frdt=form.FRD1.value; + fryr=frdt.substring(0,4); + frmn=frdt.substring(5,7); + frdy=frdt.substring(8,10); + if(fryr<syr||(fryr==syr&&frmn<smon)||(fryr==syr&&frmn==smon&&frdy<=sdy)){ + alert(pbc0410); + form.FRD1.focus(); + return false; + } + if((status==5||status==6||status==12)&&ism=="YES"){ + isnh=""; + for(i=0; i<form.INH.length; i++){ + if(form.INH[i].checked==true){ isnh=form.INH[i].value; } + } + if(isnh==""){ + alert(pbc0424); + form.INH[1].focus(); + return false; + } + if(isnh=="Y"){ + beh=""; + for(i=0; i<form.NHB.length; i++){ + if(form.NHB[i].checked==true){ beh=form.NHB[i].value; } + } + skl=""; + for(i=0; i<form.NHS.length; i++){ + if(form.NHS[i].checked==true){ skl=form.NHS[i].value; } + } + if(beh==""){ + alert(pbc0408); + form.NHB[0].focus(); + return false; + } + if(skl==""){ + alert(pbc0426); + form.NHS[0].focus(); + return false; + } + if((beh=="N"||skl=="N")&&status!=12){ + if(form.RCD[3].checked==false){ + if(confirm(pbc0455))srdb(form.RCD,"4"); + else { + form.NHB[0].focus(); + return false; + }}}}} + rating=""; + if(status!=12){ for(i=0; i<form.RCD.length; i++){ if(form.RCD[i].checked==true)rating=form.RCD[i].value; } } + else if(status==12){ rating="4"; } + if(rating==""){ + alert(pbc0428); + form.RCD[0].focus(); + return false; + } + if(rating=="4"){ + if(!vkdt(form.SID)){ return false; } + idt=form.SID.value; + iyr=idt.substring(0,4); + imon=idt.substring(5,7); + idy=idt.substring(8,10); + frdt=form.FRD1.value; + fryr=frdt.substring(0,4); + frmn=frdt.substring(5,7); + frdy=frdt.substring(8,10); + if(iyr<eyr||(iyr==eyr&&imon<emon)||(iyr==eyr&&imon==emon&&idy<=edy)){ + alert(pbc0415); + form.SID.focus(); + return false; + } + if(iyr<fryr||(iyr==fryr&&imon<frmn)||(iyr==fryr&&imon==frmn&&idy<=frdy)){ + alert(pbc0427); + form.SID.focus(); + return false; + } + if(ddif(emon,edy,eyr,imon,idy,iyr)<30){ + alert(pbc0416); + form.SID.focus(); + return false; + } + if(ddif(emon,edy,eyr,imon,idy,iyr)>90){ + if(!confirm(pbc0439+" "+pbc0442)){ + form.SID.focus(); + return false; + }}} else { +// MK/06-20-01 = If Rating Not equals to 4 blank out the sustained improve Date + form.SID.value=""; + } + if(!vnull(form.OAT)){ return false; } + if(form.MSRQ.checked==true){ + if(form.NEW_SIGN_MGR_ID.value.match(/^\s*$/)){ + alert(pbc0418); + form.NEW_SIGN_MGR_ID.focus(); + return false; + } + if(vnid(form.NEW_SIGN_MGR_ID)==false){ return false; } + } else { + if(!form.NEW_SIGN_MGR_ID.value.match(/^\s*$/)){ + alert(pbc0422); + form.NEW_SIGN_MGR_ID.focus(); + return false; + } + if ( (form.TOC.value=="YES") && (form.RSRQ.checked==true) ) { + alert(pbc0429); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + } + if(form.RSRQ.checked==true){ + if(form.NEW_SEC_LINE_REV_ID.value.match(/^\s*$/)){ + alert(pbc0418); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + if(vnid(form.NEW_SEC_LINE_REV_ID)==false){ return false; } + } else { + if(!form.NEW_SEC_LINE_REV_ID.value.match(/^\s*$/)) { + alert(pbc0423); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + if ( (form.TOC.value=="YES") && (form.MSRQ.checked==true) ) { + alert(pbc0431); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + }}} + if(status!=9){ +/**for returned objectives **/ + if(status==3){ + if(conf(pbc0466) == false) return false; + } + + if(ism=='NO'){ + if(status==0||status==1||status==3||status==7){ + if(conf(pbc0456) == false) return false; + } + + if(status==2||status==4||status==8){ + if(conf(pbc0457) == false) return false; + } + } else if(ism=='YES'){ + if(status==0||status==1||status==3||status==7){ + if(conf(pbc0458) == false)return false; + } + if(status==2||status==4||status==8){ + if(conf(pbc0459) == false)return false; + } + if(status==5||status==6){ + if(form.ESRQ.checked==false){ + if(conf(pbc0460) == false)return false; + } else { + if(conf(pbc0461) == false)return false; + }}}} + if(status==9){ + if(ism=='NO'){ + if(conf(pbc0462) == false)return false; + } else if(ism=='YES'){ + if(conf(pbc0463) == false)return false; + } else if(ism=='REVIEWER'){ + if(conf(pbc0464) == false)return false; + }} + sact(action); + if(status>=9&&status<=11){ snul(); } + form.submit(); + return true; +} + +function vsav(form,status,ism,action) { + if(!vol()){ return false; } + adt1=form.STD; + adt2=form.END; + stdt=adt1.value; + etdt=adt2.value; + syr=stdt.substring(0,4); + start_hy1=stdt.charAt(4); + smon=stdt.substring(5,7); + start_hy2=stdt.charAt(7); + sdy=stdt.substring(8,10); + eyr=etdt.substring(0,4); + end_hy1=etdt.charAt(4); + emon=etdt.substring(5,7); + end_hy2=etdt.charAt(7); + edy=etdt.substring(8,10); + today=new Date(); + date=today.getDate(); + month=today.getMonth()+1; + if(today.getYear()<2000) year=today.getYear()+1900; else year=today.getYear(); + nextYear=year+1; + if(!vnull(form.STD)) return false; + if(!vnull(form.END)) return false; + if(start_hy1!="/"||start_hy2!="/"){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(end_hy1!="/"||end_hy2!="/"){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(smon>12||sdy>31||smon<=0||sdy<=0||(isNaN(smon)==true)||(isNaN(sdy)==true)||(isNaN(syr)==true)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(emon>12||edy>31||emon<=0||edy<=0||(isNaN(emon)==true)||(isNaN(edy)==true)||(isNaN(eyr)==true)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(((smon==1||smon==3||smon==5||smon==7||smon==8||smon==10||smon==12)&&sdy>31)||(syr%4==0&&smon==2&&sdy>29)||(syr%4!=0&&smon==2&&sdy>28)||((smon==4||smon==6||smon==9||smon==11)&&sdy>30)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(((emon==1||emon==3||emon==5||emon==7||emon==8||emon==10||emon==12)&&edy>31)||(eyr%4==0&&emon==2&&edy>29)||(eyr%4!=0&&emon==2&&edy>28)||((emon==4||emon==6||emon==9||emon==11)&&edy>30)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if ((eyr==nextYear)&&(syr==year)) { + if ((emon>1)||(edy >31)) { + alert(pbc0401); + form.END.focus(); + return false; + } + } else { + if ((syr<year-1) || (syr>year)) { + alert(pbc0407); + form.STD.focus(); + return false; + } + if((eyr!=year)&&(eyr!=year-1)){ + alert(pbc0405); + form.END.focus(); + return false; + } + if(smon>emon||(smon==emon&&sdy>=edy)){ + alert(pbc0403); + form.STD.focus(); + return false; + } + } + if((status>2&&status<5)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vdt(form.IRD1)){return false;} + if(!vdt(form.IRD2)){return false;} + if(!vdt(form.IRD3)){ return false; } + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vdt(form.FRD1)){return false;} + if(ism=="YES"){ + if(!vdt(form.FRD1)){return false;} + } + } + if((status==5||status==6)&&ism=="YES"){ + rating=""; + for(i=0;i<form.RCD.length;i++){ + if(form.RCD[i].checked==true)rating=form.RCD[i].value; + } + isnh=""; + for(i=0; i<form.INH.length; i++){ + if(form.INH[i].checked==true){ + isnh=form.INH[i].value; + } + } + if(isnh=="Y"){ + beh=""; + for(i=0; i<form.NHB.length;i++){ + if(form.NHB[i].checked==true){ + beh=form.NHB[i].value; + } + } + skl=""; + for(i=0; i<form.NHS.length;i++){ + if(form.NHS[i].checked==true){ + skl=form.NHS[i].value; + } + } + if((beh=="N"||skl=="N")&&rating!=""){ + if(form.RCD[3].checked==false){ + if(confirm(pbc0455))srdb(form.RCD,"4"); + else { + form.NHB[0].focus(); + return false; + } + } + } + if(!vdt(form.SID)){ return false;} + } + } + if((status==2||status==4 || status==8 || status==5 || status==6 || status==10)&&ism=='YES') + { + if(!confirm(pbc0436)){ return false;} + if(form.OBJECTIVE_CHANGED.value=='Y') { + if(confirm(pbc0452+" "+pbc0453+" "+pbc0454)){form.MRQ.value=4; } else { form.MRQ.value=0; } + }else if (( status==5 || status==6 || status==10) && (form.RESULTS_CHANGED.value=='Y')) { + if(confirm(pbc0470+" "+pbc0453+" "+pbc0454)){form.MRQ.value=8; } else { form.MRQ.value=0; } + } + } + sact(action); + if(status>=9&&status<=11){ + snul(); + } + form.submit(); + return true; +} +function cft(formfield){ + nid=formfield.value; + if(nid.match(/^\s*$/)){ + alert(pbc0419); + formfield.focus(); + return false; + } + nl=nid.split('/').length; + if(nl!=2&&nl!=3){ + alert(pbc0420); + formfield.focus(); + return false; + } + return true; +} +function dcf(form,pbcId,cnum,sequence,status,atyp,ver){ + if(!vol()){} + dflg=confirm("\n\n<====================== " + pbc0468 + " ======================>\n\n" + pbc0469 + "\n\n<==================================================================>"); + if(dflg==true) { + form.ATYP.value=atyp; + form.PID.value=pbcId; + form.CNUM.value=cnum; + form.SEQ.value=sequence; + form.ST.value=status; + form.VER.value=ver; + form.submit(); + } + +} + + + +function lop(){ +//if(confirm(pbc0447+" "+pbc0451)){ + sck("timer",""); + sck("PBC_AUTH4",""); + sck("IBM004",""); + this.close(); +//} + +} + +function csrlop(){ + top.location="logoff.jsp"; +} +function lof(){ + csr=gck("IBM004"); + if(csr==null){ top.location="logoff.jsp"; } + else if(csr.charAt(0)==3){ window.location="csrlogoff.jsp"; } + else{ top.location="logoff.jsp"; } +} + +function goToHome(){ + top.location="pbcmain.jsp"; +} + +function docsr(){ + sck("IBM004","1^NONE^1"); + window.location="pbcmain.jsp" + } + +function ccd(){ + if(confirm(pbc0434)){ + if(navigator.appName!="Netscape"){ + if(!window.navigator.onLine){ + window.close(); + } + else { + window.location='pbcmain.jsp'; + } + } + else { + window.location='pbcmain.jsp'; + } + } +} + +function crt(form,action){ + if(!vol()){return false;} + band=form.BAND.options[form.BAND.selectedIndex].value; + if(band=="00"){ + alert(pbc0425); + form.BAND.focus(); + return false; + } + if(!confirm(pbc0450)){return false;} + sact(action); + form.submit(); + return true; +} +function cusat(form,action){ + if(!vol()){return false;} + sact(action); + form.action="unsatreq.jsp"; + form.submit(); + return true; +} +function cfrt(form,ism,action){ + if(!vol()){return false;} + sact(action); + if(ism=="NO"){ + if(confirm(pbc0449+" "+pbc0432)){ + snul(); + form.submit(); + return true; + } + } + if(ism=="REVIEWER"){ + if(confirm(pbc0449+" "+pbc0448)){ + snul(); + form.submit(); + return true; + } + } + if(ism=="YES"){ + if(confirm(pbc0440)){ + snul(); + form.submit(); + return true; + } + } +} + +function cces(form){ + if(form.ESRQ.checked==true){ + if(!confirm(pbc0435+" "+pbc0443))form.ESRQ.checked=false; + else {form.ESRQ.checked=true;} + } +} + +function ccms(form){ + if(form.MSRQ.checked==true){ + if(!confirm(pbc0441+" "+pbc0438+" "+pbc0444+" "+pbc0445))form.MSRQ.checked=false; + else { + form.MSRQ.checked=true; + } + } +} + +function ccrs(form){ + if(form.RSRQ.checked==true){ + if(!confirm(pbc0441+" "+pbc0438+" "+pbc0444+" "+pbc0446))form.RSRQ.checked=false; + else { + form.RSRQ.checked=true; + } + } +} + +function seo(){ + alert(pbc0412+" "+pbc0413+" "+pbc0414); +} +function cows(form,action){ + if(!vol()){ + return false; + } + if(confirm(pbc0437)){ + sact(action); + form.submit(); + return true; + } +} + +function srdb(rdb,value) { + for(i=0; i<rdb.length;i++) { + if(rdb[i].value == value) { + rdb[i].checked = true; + return true; + } + } + return true; +} + +function slop(lbx,value) { + if(lbx.options.length > 0) { + for(i=0;i < lbx.options.length;i++) { + if(lbx.options[i].value == value) { + lbx.options[i].selected = true; + return true; + } + } + } + return true; +} + +function ourl(URL,WIN_NAME){ + if(!vol()){ return; } + var emp_win; + if(document.layers) { + child_screenX=window.screenX+50; + child_width=window.innerWidth-75; + child_height=window.innerHeight-75; + emp_win=window.open(URL,WIN_NAME,"screenX="+ child_screenX +",screenY=75,height="+ child_height +",width="+ child_width +",resizable,status,scrollbars"); + } else{ + child_width = screen.width-160; + child_height = screen.height-200; + emp_win=window.open(URL,WIN_NAME,"height="+ child_height +",width="+ child_width +",resizable=yes,status=no,scrollbars=yes"); +//emp_win.moveTo(110,0); + } +//if (URL.indexOf("pbcsitehelp")==-1) { alert("Opened new window."); } + emp_win.focus(); +} + +function dnh(form){ + form.NHS[0].checked=false; + form.NHS[1].checked=false; + form.NHB[0].checked=false; + form.NHB[1].checked=false; +} + +function cnh(form){ + isnh=""; + for(i=0; i<form.INH.length;i++) + { + if(form.INH[i].checked==true){isnh=form.INH[i].value; } + } + if(isnh != 'Y'){ + form.NHS[0].checked=false; + form.NHS[1].checked=false; + form.NHB[0].checked=false; + form.NHB[1].checked=false; + return false; + } + else + { + //if ((form.NHS[0].checked || form.NHS[1].checked) && (form.NHB[0].checked || form.NHB[1].checked)) + if (form.NHS[1].checked || form.NHB[1].checked ) + { + form.RCD[3].checked=true; + return true; + } + return false; + } +} + +function err(errMsg) { + alert(getEncodedText(errMsg)); +} + +function getEncodedText(txtValue) { + if (txtValue.match(/^\s*$/)) return txtValue; + var txtValue1 = txtValue.replace((/"/g),'"'); + var txtValue2 = txtValue1.replace((/>/g),">"); + var txtValue3 = txtValue2.replace((/</g),"<"); + return txtValue3; +} + +function encodeText(txtValue) { + if (txtValue.match(/^\s*$/)) return txtValue; + var txtValue0 = txtValue.replace((/\r\n/g),'&lf;'); + var txtValue1 = txtValue0.replace((/"/g),'"'); +var txtValue2 = txtValue1.replace((/>/g),'>'); +var txtValue3 = txtValue2.replace((/</g),'<'); +return txtValue3; +} + + +function gck(name){ +result = null; +mck = " " + document.cookie + ";"; +srcnm = " " + name + "="; +scok = mck.indexOf(srcnm); +if(scok != -1){ +scok += srcnm.length; +eofck = mck.indexOf(";",scok); +result = unescape(mck.substring(scok,eofck)); +} +return(result); +} + +function sck(name,value){ +ckpth="path=/;domain=.ibm.com"; +document.cookie = name + "=" + value + ";" + ckpth; +} + + +function testForCookie(){ + sck("PBCTest","test"); + if(gck("PBCTest") == "test") { + // alert("Cookie test is good"); + return true; + } + else { + // alert("Cookie test is bad"); + return false; + } + } + + +function prn(form,l_status,l_ism,l_scf,l_locale){ +status = l_status; +ism = l_ism; +scf = l_scf; +pwin=window.open("printvw.jsp?nls="+l_locale + "ISNEWWIN=TRUE","pwin","resizable=yes,width=560,height=400,scrollbars=yes,toolbar,screenX=5,screenY=5"); +} + +function gsno(form){ +unum=form.UNUM.value; +eofsn=unum.length-3; +cnum=unum.substring(0,eofsn); +return(cnum); +} + +function conf(msg){ +return top.confirm(msg); +} + +function sact(action){ +document.PBC_FORM.ATYP.value=action; +} + +function snul(){ +document.PBC_FORM.WO.value=""; +document.PBC_FORM.WR.value=""; +document.PBC_FORM.EO.value=""; +document.PBC_FORM.ER.value=""; +document.PBC_FORM.TO.value=""; +document.PBC_FORM.TR.value=""; +document.PBC_FORM.OAT.value=""; +} + +function gcnum(){ +unum=document.PBC_FORM.UNUM.value; +eofsn=unum.length-3; +cnum=unum.substring(0,eofsn); +return(cnum); +} +function checkForEditPage() { + if(true==checkForm()){ + if(!confirm(pbc0465)) return false; + } + return true; +} + +function checkForm() { + var frms=document.forms["PBC_FORM"]; + if (navigator.appName=="Netscape") { + if (frms==undefined) return false; + if (frms.IS_EDIT==undefined) return false; + } else { + if(frms==null) return false; + if (frms.IS_EDIT==null) return false; + } + return true; +} + + + +function removeAnchor(link){ +link2 = link; +indx = link.indexOf('#'); +while (indx!=-1) +{ +link2 = link.substring(0,indx); +indx=link2.indexOf("#"); + + +} +return link2; +} + +function gotoHREF(link){ +if(document.layers){ +var documentURL = removeAnchor(document.URL); +location.href=documentURL+link; +return true; + +}else{ +var documentURL = removeAnchor(document.URL); +document.URL=documentURL+link; + + +} + + +} + +function init_resize_event(){ +} + +function putVal2ck() +{ +} + +function setValuesFromCookie() +{ +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-224956.js b/js/src/tests/js1_5/Regress/regress-224956.js new file mode 100644 index 000000000..6fd146fba --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-224956.js @@ -0,0 +1,251 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 November 2003 + * SUMMARY: |expr()| should cause a TypeError if |typeof expr| != 'function' + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=224956 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 224956; +var summary = "|expr()| should cause TypeError if |typeof expr| != 'function'"; +var TEST_PASSED = 'TypeError'; +var TEST_FAILED = 'Generated an error, but NOT a TypeError! '; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var CHECK_PASSED = 'Should not generate an error'; +var CHECK_FAILED = 'Generated an error!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var x; + + +/* + * All the following contain invalid uses of the call operator () + * and should generate TypeErrors. That's what we're testing for. + * + * To save writing try...catch over and over, we hide all the + * errors inside eval strings, and let testThis() catch them. + */ +status = inSection(1); +x = 'abc'; +testThis('x()'); + +status = inSection(2); +testThis('"abc"()'); + +status = inSection(3); +x = new Date(); +testThis('x()'); + +status = inSection(4); +testThis('Date(12345)()'); + +status = inSection(5); +x = Number(1); +testThis('x()'); + +status = inSection(6); +testThis('1()'); + +status = inSection(7); +x = void(0); +testThis('x()'); + +status = inSection(8); +testThis('void(0)()'); + +status = inSection(9); +x = Math; +testThis('x()'); + +status = inSection(10); +testThis('Math()'); + +status = inSection(11); +x = Array(5); +testThis('x()'); + +status = inSection(12); +testThis('[1,2,3,4,5]()'); + +status = inSection(13); +x = [1,2,3].splice(1,2); +testThis('x()'); + + +/* + * Same as above, but with non-empty call parentheses + */ +status = inSection(14); +x = 'abc'; +testThis('x(1)'); + +status = inSection(15); +testThis('"abc"(1)'); + +status = inSection(16); +x = new Date(); +testThis('x(1)'); + +status = inSection(17); +testThis('Date(12345)(1)'); + +status = inSection(18); +x = Number(1); +testThis('x(1)'); + +status = inSection(19); +testThis('1(1)'); + +status = inSection(20); +x = void(0); +testThis('x(1)'); + +status = inSection(21); +testThis('void(0)(1)'); + +status = inSection(22); +x = Math; +testThis('x(1)'); + +status = inSection(23); +testThis('Math(1)'); + +status = inSection(24); +x = Array(5); +testThis('x(1)'); + +status = inSection(25); +testThis('[1,2,3,4,5](1)'); + +status = inSection(26); +x = [1,2,3].splice(1,2); +testThis('x(1)'); + + +/* + * Expression from website in original bug report above - + */ +status = inSection(27); +var A = 1, C=2, Y=3, T=4, I=5; +testThis('(((C/A-0.3)/0.2)+((Y/A-3)/4)+((T/A)/0.05)+((0.095-I/A)/0.4))(100/6)'); + + +status = inSection(28); +x = /a()/; +testThis('x("abc")'); + +status = inSection(29); +x = /a()/gi; +testThis('x("abc")'); + +status = inSection(30); +x = RegExp('a()'); +testThis('x("abc")'); + +status = inSection(31); +x = new RegExp('a()', 'gi'); +testThis('x("")'); + + +/* + * Functions have |typeof| == 'function'. + * + * Therefore these expressions should not cause any errors. + * Note we use checkThis() instead of testThis() + * + */ +status = inSection(32); +x = function (y) {return y+1;}; +checkThis('x("abc")'); + +status = inSection(33); +checkThis('(function (y) {return y+1;})("abc")'); + +status = inSection(34); +function f(y) { function g() {return y;}; return g();}; +checkThis('f("abc")'); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + + +/* + * |expr()| should generate a TypeError if |expr| is not a function + */ +function testThis(sInvalidSyntax) +{ + expect = TEST_PASSED; + actual = TEST_FAILED_BADLY; + + try + { + eval(sInvalidSyntax); + } + catch(e) + { + if (e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED + e; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +/* + * Valid syntax shouldn't generate any errors + */ +function checkThis(sValidSyntax) +{ + expect = CHECK_PASSED; + actual = CHECK_PASSED; + + try + { + eval(sValidSyntax); + } + catch(e) + { + actual = CHECK_FAILED; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-229006.js b/js/src/tests/js1_5/Regress/regress-229006.js new file mode 100644 index 000000000..306749af7 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-229006.js @@ -0,0 +1,65563 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// Note this file contains a greater than 2^16 lines on _purpose_. +// It will properly report failures when run in the js shell however +// will fail to run at all in the browser (if it fails) due to a syntax error. +// +var BUGNUMBER = 229006; +var summary = 'JS parser should not fail when line number > 2^16'; +var actual = 'FAIL'; +var expect = 'PASS'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +for (var i=0; i<2; i++) { +} + +actual = 'PASS'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-230216-1.js b/js/src/tests/js1_5/Regress/regress-230216-1.js new file mode 100644 index 000000000..964adb91b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-230216-1.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 230216; +var summary = 'check for numerical overflow in regexps in back reference and bounds for {} quantifier'; +var actual = ''; +var expect = ''; +var status = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = inSection(1) + ' check for overflow in backref'; + +actual = 'undefined'; +expect = false; + +try +{ + actual = eval('/(a)\21474836481/.test("aa")'); +} +catch(e) +{ + status += ' Error: ' + e; +} + +reportCompare(expect, actual, status); + +status = inSection(2) + ' check for overflow in backref'; + +actual = 'undefined'; +expect = false; + +try +{ + actual = eval('/a\21474836480/.test("")'); +} +catch(e) +{ + status += ' Error: ' + e; +} + +reportCompare(expect, actual, status); + diff --git a/js/src/tests/js1_5/Regress/regress-230216-2.js b/js/src/tests/js1_5/Regress/regress-230216-2.js new file mode 100644 index 000000000..84a7b70d7 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-230216-2.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 230216; +var summary = 'check for numerical overflow in regexps in back reference and bounds for {} quantifier'; +var actual = ''; +var expect = ''; +var status = ''; + +DESCRIPTION = summary; +EXPECTED = 'error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = inSection(1) + ' check for overflow in quantifier'; + +actual = 'undefined'; +expect0 = 'no exception thrown false'; +expect1 = 'error'; + +try +{ + var result = eval('/a{21474836481}/.test("a")'); + actual = 'no exception thrown ' + result; + status += ' result: ' + result; +} +catch(e) +{ + actual = 'error'; +} + +// The result we get depends on the regexp engine. +if (actual != 'error') + reportCompare(expect0, actual, status); +else + reportCompare(expect1, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-230216-3.js b/js/src/tests/js1_5/Regress/regress-230216-3.js new file mode 100644 index 000000000..eed31cb63 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-230216-3.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 230216; +var summary = 'check for numerical overflow in regexps in back reference and bounds for {} quantifier'; +var actual = ''; +var expect = ''; +var status = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = inSection(1) + ' /((\3|b)\2(a)x)+/.exec("aaxabxbaxbbx") '; + +actual = 'undefined'; +expect = ['ax', 'ax', '', 'a'] + ''; + +try +{ + actual = /((\3|b)\2(a)x)+/.exec("aaxabxbaxbbx") + ''; +} +catch(e) +{ + status += ' Error: ' + e; +} + +reportCompare(expect, actual, status); + +status = inSection(2) + ' eval(\'/((\3|b)\2(a)x)+/.exec("aaxabxbaxbbx")\' '; + +actual = 'undefined'; +expect = ['ax', 'ax', '', 'a'] + ''; + +try +{ + actual = eval('/((\\3|b)\\2(a)x)+/.exec("aaxabxbaxbbx")') + ''; +} +catch(e) +{ + status += ' Error: ' + e; +} + +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-233483-2.js b/js/src/tests/js1_5/Regress/regress-233483-2.js new file mode 100644 index 000000000..0a9f40121 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-233483-2.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 233483; +var summary = 'Don\'t crash with null properties - Browser only'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document == 'undefined') +{ + reportCompare(expect, actual, summary); +} +else +{ + // delay test driver end + gDelayTestDriverEnd = true; + + actual = 'Crash'; + window.onload = onLoad; +} + +function onLoad() +{ + var a = new Array(); + var pe; + var x; + var s; + + setform(); + + for (pe=document.getElementById("test"); pe; pe=pe.parentNode) + { + a[a.length] = pe; + } + + // can't document.write since this is in after load fires + s = a.toString(); + + actual = 'No Crash'; + + reportCompare(expect, actual, summary); + + gDelayTestDriverEnd = false; + jsTestDriverEnd(); +} + +function setform() +{ + var form = document.body.appendChild(document.createElement('form')); + var table = form.appendChild(document.createElement('table')); + var tbody = table.appendChild(document.createElement('tbody')); + var tr = tbody.appendChild(document.createElement('tr')); + var td = tr.appendChild(document.createElement('td')) + var input = td.appendChild(document.createElement('input')); + + input.setAttribute('id', 'test'); + input.setAttribute('value', '1232'); + +} diff --git a/js/src/tests/js1_5/Regress/regress-233483.js b/js/src/tests/js1_5/Regress/regress-233483.js new file mode 100644 index 000000000..8f7730753 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-233483.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 233483; +var summary = 'Don\'t crash with null properties - Browser only'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + window.onload = onLoad; +} +else +{ + actual = 'No Crash'; + reportCompare(expect, actual, summary); +} + +function onLoad() { + setform(); + var a=new Array(); + var forms = document.getElementsByTagName('form'); + a[a.length]=forms[0]; + var s=a.toString(); + + actual = 'No Crash'; + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + +} + +function setform() +{ + var form = document.body.appendChild(document.createElement('form')); + var input = form.appendChild(document.createElement('input')); + input.setAttribute('id', 'test'); + input.setAttribute('value', '1232'); + + var result = form.toString(); + +} diff --git a/js/src/tests/js1_5/Regress/regress-234389.js b/js/src/tests/js1_5/Regress/regress-234389.js new file mode 100644 index 000000000..f3691b16f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-234389.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 234389; +var summary = 'Do not Crash when overloaded toString causes infinite recursion'; +var actual = '' + var expect = 'Internal Error: too much recursion'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var foo = { + toString: function() { + if (this.re.test(this)) { + return ""; + } + return this.value; + }, + + value: "foo", + + re: /bar/ +}; + +try +{ + var f = foo.toString(); + expect = 'No Crash'; + actual = 'No Crash'; +} +catch(ex) +{ + expect = 'InternalError: too much recursion'; + actual = ex.name + ': ' + ex.message; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-238881.js b/js/src/tests/js1_5/Regress/regress-238881.js new file mode 100644 index 000000000..9080092c6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-238881.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 238881; +var summary = 'const propagation for switch too aggressive'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +const C=42; +function f(C,x) +{ + switch(x) + { + case C: + return 1; + default: + return 0; + } +} + +actual = f(44,42); +expect = 0; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-238945.js b/js/src/tests/js1_5/Regress/regress-238945.js new file mode 100644 index 000000000..d33197d4d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-238945.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 238945; +var summary = '7.9.1 Automatic Semicolon insertion - allow token following do{}while()'; +var actual = 'error'; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f(){do;while(0)return}f() + + actual = 'no error' + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-240577.js b/js/src/tests/js1_5/Regress/regress-240577.js new file mode 100644 index 000000000..ba8330aa0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-240577.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + +//----------------------------------------------------------------------------- +// originally reported by Jens Thiele <karme@unforgettable.com> in +var BUGNUMBER = 240577; +var summary = 'object.watch execution context'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var createWatcher = function ( watchlabel ) +{ + var watcher = function (property, oldvalue, newvalue) + { + actual += watchlabel; return newvalue; + }; + return watcher; +}; + +var watcher1 = createWatcher('watcher1'); + +var object = {property: 'value'}; + +object.watch('property', watcher1); + +object.property = 'newvalue'; + +expect = 'watcher1'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-243174.js b/js/src/tests/js1_5/Regress/regress-243174.js new file mode 100644 index 000000000..4352a9aeb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-243174.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 243174; +var summary = 'Don\'t Crash on Regular Expression'; +var actual = 'Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var result = "-+16-+59-+66-+67-+80-+82-+143-+170-+176-+189-+308-+363-+364-+365-+377-+393-+404-+405-+419-+430-+641-+732-+754-+783-+786-+972-+977-+980-+982-+1010-+1011-+1027-+1028-+1039-+1040-+1074-+1084-+1086-+1098-+1267-+1296-+1305-+1367-+1371-+1379-+1480-+1481-+1482-+1484-+1510-+1526-+1565-+1568-+1574-+1577-+1604-+1632-+1638-+1643-+1657-+1708-+1722-+1941-+1948-+1955-+1965-+1966-+2027-+2039-+2040-+2041-+2048-+2054-+2059-+2090-+2091-+2092-+2105-+2118-+".match(eval("/\\+(3|4|7|21|47|49|53|54|56|57|58|59|60|61|62|64|67|69|72|73|74|76|78|80|84|91|95|96|99|118|120|141|142|145|147|148|149|151|152|160|164|169|170|171|173|174|175|176|181|183|185|186|188|189|190|191|193|200|201|202|204|205|207|208|209|211|214|216|221|223|226|229|230|231|233|237|239|249|250|252|255|258|260|261|267|269|270|278|280|281|290|291|293|294|295|296|297|298|299|300|301|302|303|306|307|308|309|311|313|317|319|321|322|328|329|338|342|343|345|347|349|352|359|360|364|366|367|368|370|373|376|377|378|379|380|381|384|385|386|387|388|389|390|393|394|396|397|398|399|400|402|403|416|418|419|420|423|424|425|428|429|430|432|440|442|444|445|446|448|449|629|643|646|647|649|652|658|668|680|681|682|683|684|703|706|720|722|731|733|736|737|738|741|744|745|749|752|753|754|755|763|786|803|806|807|808|812|829|831|843|844|845|846|847|848|849|851|854|855|856|858|859|860|861|863|866|867|868|869|870|871|875|876|877|878|879|881|882|883|884|885|886|888|889|890|891|892|893|894|895|896|897|898|900|901|903|904|906|908|910|911|912|913|914|915|916|918|919|921|970|971|972|973|980|986|987|988|991|998|1009|1011|1015|1016|1031|1037|1038|1039|1040|1045|1046|1051|1052|1053|1054|1057|1058|1060|1064|1069|1070|1071|1074|1075|1085|1089|1090|1091|1093|1094|1095|1096|1097|1101|1103|1107|1109|1110|1112|1115|1116|1117|1171|1172|1175|1183|1184|1233|1289|1296|1300|1307|1315|1317|1327|1367|1374|1384|1392|1393|1408|1409|1412|1428|1479|1480|1481|1482|1483|1484|1485|1486|1487|1488|1490|1491|1492|1493|1497|1510|1522|1524|1565|1566|1567|1568|1573|1574|1576|1582|1584|1586|1588|1591|1592|1593|1596|1599|1600|1604|1606|1615|1616|1617|1621|1625|1631|1632|1633|1636|1640|1643|1644|1645|1646|1648|1650|1652|1655|1656|1657|1658|1660|1661|1663|1669|1670|1671|1672|1673|1675|1676|1677|1679|1680|1683|1684|1685|1686|1687|1688|1689|1695|1697|1702|1703|1704|1705|1706|1711|1712|1713|1714|1716|1722|1725|1726|1731|1738|1744|1747|1748|1749|1750|1753|1757|1761|1762|1763|1764|1765|1766|1767|1769|1771|1772|1773|1774|1775|1776|1777|1778|1779|1780|1781|1782|1783|1784|1785|1786|1788|1789|1790|1791|1792|1793|1794|1796|1797|1798|1799|1801|1802|1803|1804|1805|1806|1807|1808|1809|1810|1811|1812|1815|1816|1817|1818|1821|1822|1823|1824|1825|1827|1828|1831|1835|1840|1844|1845|1849|1850|1852|1853|1854|1855|1856|1857|1858|1859|1860|1862|1866|1867|1874|1885|1886|1887|1890|1894|1897|1898|1903|1912|1913|1917|1923|1933|1940|1941|1944|1945|1946|1947|1948|1949|1950|1963|1964|1965|1967|1971|1972|1973|1974|1978|1983|1988|1990|1991|2001|2003|2013|2015|2020|2025|2026|2027|2029|2034|2039|2040|2041|2047|2048|2049|2050|2053|2054|2055|2057|2058|2059|2060|2061|2064|2067|2070|2073|2076|2079|2082|2085|2088|2090|2092|2093|2094|2095|2096|2098|2099|2100|2101|2102|2103|2105|2114|2119|2121|2122|2124|2128|2131|2132|21|170|177|190|191|291|982|1038|1655|1978|2090|2133|1983|783|1582|2102|6|14|53|65|66|67|68|72|85|88|95|96|97|121|126|145|148|154|160|184|188|219|220|258|267|277|289|292|295|297|304|317|318|322|332|342|343|353|354|367|373|378|381|384|398|402|418|419|425|428|438|643|662|665|673|675|705|706|803|876|973|988|1013|1015|1020|1047|1091|1171|1184|1317|1400|1401|1486|1572|1590|1591|1593|1600|1621|1632|1633|1635|1636|1638|1640|1648|1657|1958|1966|1969|1973|1983|2048|2061|2064|2067|2070|2073|2076|2079|2082|2085|2088|2091|2126|2127|2128|1063|986|16|59|66|67|80|82|143|170|176|189|308|363|364|365|377|393|404|405|419|430|641|732|754|783|786|972|977|980|982|1010|1011|1027|1028|1039|1040|1074|1084|1086|1098|1267|1296|1305|1367|1371|1379|1480|1481|1482|1484|1510|1526|1565|1568|1574|1577|1604|1632|1638|1643|1657|1708|1722|1941|1948|1955|1965|1966|2027|2039|2040|2041|2048|2054|2059|2090|2091|2092|2105|2118|1300|971|2047|2050|986|1632|2049|1184|2047)-/g")); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-243389-n.js b/js/src/tests/js1_5/Regress/regress-243389-n.js new file mode 100644 index 000000000..00c11b4c2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-243389-n.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// test from Henrik Gemal +var BUGNUMBER = 243389; +var summary = 'Don\'t crash on Regular Expression'; +var actual = 'Crash'; +var expect = 'error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// this is a syntax error which will fire +// before the framework is ready. therefore the browser based +// version will not appear to run this test if it does not crash +if (/(\\|/)/) { +} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-243869.js b/js/src/tests/js1_5/Regress/regress-243869.js new file mode 100644 index 000000000..483ca2ef1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-243869.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from Alex Vincent +var BUGNUMBER = 243869; +var summary = 'Rethrown custom Errors should retain file and line number'; +var actual = ''; +var expect = 'Test Location:123'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function bar() +{ + try + { + var f = new Error("Test Error", "Test Location", 123); + throw f; + } + catch(e) + { + throw e; + } +} + +try +{ + bar(); +} +catch(eb) +{ + actual = eb.fileName + ':' + eb.lineNumber + } + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-244470.js b/js/src/tests/js1_5/Regress/regress-244470.js new file mode 100644 index 000000000..88b2e7a74 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-244470.js @@ -0,0 +1,1079 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 244470; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +var g; +for (var i=1; ; ++i) { + + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + + + if (i % 80 == 0) { + printStatus("This doesn't want to crash now, please keep trying."); + break; + } + +} + +// These have to be named functions, using anonymous functions doesn't crash. +// Using just one function here makes the crash much less likely. +function dummy(){} +function dummy2(){} +function dummy3(){} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-244619.js b/js/src/tests/js1_5/Regress/regress-244619.js new file mode 100644 index 000000000..1406535e8 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-244619.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 244619; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f1() +{ + var o = new Object(); + eval.call(o, "var a = 'vodka'"); // <- CRASH !!! +} + +// Rhino does not allow indirect eval calls +try +{ + f1(); +} +catch(e) +{ +} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-245113.js b/js/src/tests/js1_5/Regress/regress-245113.js new file mode 100644 index 000000000..abbda6ac0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-245113.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245113; +var summary = 'instanceof operator should return false for class prototype'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +Date.prototype.test = function() { + return (this instanceof Date); +}; + +String.prototype.test = function() { + return (this instanceof String); +}; + +status = summary + inSection(1); +expect = false; +actual = (Date.prototype.test instanceof Date); +reportCompare(expect, actual, status); + +status = summary + inSection(2); +expect = false; +actual = Date.prototype.test(); +reportCompare(expect, actual, status); + +status = summary + inSection(3); +expect = false; +actual = String.prototype.test(); +reportCompare(expect, actual, status); + +status = summary + inSection(4); +expect = true; +actual = (new Date()).test(); +reportCompare(expect, actual, status); + +status = summary + inSection(5); +expect = true; +actual = (new String()).test(); +reportCompare(expect, actual, status); + diff --git a/js/src/tests/js1_5/Regress/regress-245308.js b/js/src/tests/js1_5/Regress/regress-245308.js new file mode 100644 index 000000000..51c928587 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-245308.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245308; +var summary = 'Don\'t Crash with nest try catch'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function foo(e) { + try {} + catch(ex) { + try {} + catch(ex) {} + } +} + +foo('foo'); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-246911.js b/js/src/tests/js1_5/Regress/regress-246911.js new file mode 100644 index 000000000..2f35f5fd8 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-246911.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 246911; +var summary = 'switch() statement with variable as label'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'PASS'; + +var a = 10; +a = 9; +var b = 10; + +switch(b) +{ +case a: + actual = 'FAIL'; + break; +default: + actual = 'PASS'; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-246964.js b/js/src/tests/js1_5/Regress/regress-246964.js new file mode 100644 index 000000000..d95b3c1da --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-246964.js @@ -0,0 +1,160 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 246964; +// see also bug 248549, bug 253150, bug 259935 +var summary = 'undetectable document.all'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document == 'undefined') +{ + expect = actual = 'Test requires browser: skipped'; + reportCompare(expect, actual, summary); +} +else +{ + status = summary + ' ' + inSection(1) + ' if (document.all) '; + expect = false; + actual = false; + if (document.all) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(2) + 'if (isIE) '; + expect = false; + actual = false; + var isIE = document.all; + if (isIE) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(3) + ' if (document.all != undefined) '; + expect = false; + actual = false; + if (document.all != undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + + status = summary + ' ' + inSection(4) + ' if (document.all !== undefined) '; + expect = true; + actual = false; + if (document.all !== undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(5) + ' if (document.all != null) ' ; + expect = false; + actual = false; + if (document.all != null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(6) + ' if (document.all !== null) ' ; + expect = true; + actual = false; + if (document.all !== null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(7) + ' if (document.all == null) '; + expect = true; + actual = false; + if (document.all == null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(8) + ' if (document.all === null) '; + expect = false; + actual = false; + if (document.all === null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(9) + ' if (document.all == undefined) '; + expect = true; + actual = false; + if (document.all == undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(10) + ' if (document.all === undefined) '; + expect = false; + actual = false; + if (document.all === undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(11) + + ' if (typeof document.all == "undefined") '; + expect = true; + actual = false; + if (typeof document.all == 'undefined') + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(12) + + ' if (typeof document.all != "undefined") '; + expect = false; + actual = false; + if (typeof document.all != 'undefined') + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(13) + ' if ("all" in document) '; + expect = (document.compatMode == 'CSS1Compat') ? false : true; + actual = false; + if ('all' in document) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(14) + ' if (f.ie) '; + var f = new foo(); + + expect = false; + actual = false; + if (f.ie) + { + actual = true; + } + reportCompare(expect, actual, status); + +} + +function foo() +{ + this.ie = document.all; +} diff --git a/js/src/tests/js1_5/Regress/regress-247179.js b/js/src/tests/js1_5/Regress/regress-247179.js new file mode 100644 index 000000000..9e01051ee --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-247179.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 247179; +var summary = 'RegExp \\b should not recognize non-ASCII alphanumerics as word characters'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 3; +actual = "m\ucc44nd".split(/\b/).length; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-248444.js b/js/src/tests/js1_5/Regress/regress-248444.js new file mode 100644 index 000000000..f04a4bac0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-248444.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 248444; +var summary = 'toString/toSource of RegExp should escape slashes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re; +expect = '/[^\\/]+$/'; + +status = summary + ' ' + inSection(1); +re = /[^\/]+$/; +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2); +re = RegExp("[^\\\/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3); +re = RegExp("[^\\/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-249211.js b/js/src/tests/js1_5/Regress/regress-249211.js new file mode 100644 index 000000000..4fb718ba9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-249211.js @@ -0,0 +1,30 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 249211; +var summary = 'support export and import for 4xp'; +var actual = ''; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + var o = {}; + var f = function(){}; + export *; + import o.*; + actual = 'no error'; +} +catch(e) +{ + actual = 'error'; +} + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-252892.js b/js/src/tests/js1_5/Regress/regress-252892.js new file mode 100644 index 000000000..5f799bb18 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-252892.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 252892; +var summary = 'for (var i in o) in heavyweight function f should define i in f\'s activation'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; + +var dodis; + +function f1(o){for(var x in o)printStatus(o[x]); return x} +function f2(o){with(this)for(var x in o)printStatus(o[x]); return x} +function f2novar(o){with(this)for(x in o)printStatus(o[x]); return x} +function f3(i,o){for(var x in o)printStatus(o[x]); return x} +function f4(i,o){with(this)for(var x in o)printStatus(o[x]); return x} + +var t=0; +function assert(c) +{ + ++t; + + status = summary + ' ' + inSection(t); + expect = true; + actual = c; + + if (!c) + { + printStatus(t + " FAILED!"); + } + reportCompare(expect, actual, summary); +} + +assertEq(f1([]), undefined); + +assertEq(f1(['first']), "0"); + +assertEq(f2([]), undefined); + +assertEq(f2(['first']), "0"); + +assertEq(f3(42, []), undefined); + +assertEq(f3(42, ['first']), "0"); + +assertEq(f4(42, []), undefined); + +assertEq(f4(42, ['first']), "0"); + +this.x = 41; + +assertEq(f2([]), undefined); + +assertEq(f2novar([]), 41); + +assertEq(f2(['first']), undefined); + +assertEq(f2novar(['first']), "0"); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/js/src/tests/js1_5/Regress/regress-253150.js b/js/src/tests/js1_5/Regress/regress-253150.js new file mode 100644 index 000000000..dc6a0de10 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-253150.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 253150; +var summary = 'Do not warn on detecting properties'; +var actual = ''; +var expect = 'No warning'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var testobject = {}; + +options('strict'); +options('werror'); + +try +{ + var testresult = testobject.foo; + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 1'); + +try +{ + if (testobject.foo) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 2'); + +try +{ + if (typeof testobject.foo == 'undefined') + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 3'); + +try +{ + if (testobject.foo == null) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 4'); + +try +{ + if (testobject.foo == undefined) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 3'); diff --git a/js/src/tests/js1_5/Regress/regress-254296.js b/js/src/tests/js1_5/Regress/regress-254296.js new file mode 100644 index 000000000..041c3876c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-254296.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 254296; +var summary = 'javascript regular expression negative lookahead'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = [3].toString(); +actual = /^\d(?!\.\d)/.exec('3.A'); +if (actual) +{ + actual = actual.toString(); +} + +reportCompare(expect, actual, summary + ' ' + inSection(1)); + +expect = 'AB'; +actual = /(?!AB+D)AB/.exec("AB") + ''; +reportCompare(expect, actual, summary + ' ' + inSection(2)); diff --git a/js/src/tests/js1_5/Regress/regress-254974.js b/js/src/tests/js1_5/Regress/regress-254974.js new file mode 100644 index 000000000..306fafbb1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-254974.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// this test originally was only seen if typed into the js shell. +// loading as a script file did not exhibit the problem. +// this test case may not exercise the problem properly. + +var BUGNUMBER = 254974; +var summary = 'all var and arg properties should be JSPROP_SHARED'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function testfunc(tokens) { + function eek(y) {} /* remove function eek and the code will change its behavior */ + return tokens.split(/\]?(?:\[|$)/).shift(); +} +bad=testfunc; +function testfunc(tokens) { + return tokens.split(/\]?(?:\[|$)/).shift(); +} +good=testfunc; + +var goodvalue = good("DIV[@id=\"test\"]"); +var badvalue = bad("DIV[@id=\"test\"]"); + +printStatus(goodvalue); +printStatus(badvalue); + +expect = goodvalue; +actual = badvalue; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-256501.js b/js/src/tests/js1_5/Regress/regress-256501.js new file mode 100644 index 000000000..11186d9df --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-256501.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 256501; +var summary = 'Check Recursion'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'error'; + +try +{ + var N = 100*1000; + var buffer = new Array(N * 2 + 1); + for (var i = 0; i != N; ++i) + { + buffer[i] = 'do '; + buffer[buffer.length - i - 1] = ' while(0);'; + } + buffer[N] = 'printStatus("TEST");'; + + // text is do do ... do print("TEST"); while(0); while(0); ... while(0); + var text = buffer.join(''); + + eval(text); + actual = 'no error'; +} +catch(e) +{ + actual = 'error'; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-256617.js b/js/src/tests/js1_5/Regress/regress-256617.js new file mode 100644 index 000000000..6dfc44bec --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-256617.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// should fail with syntax error. won't run in browser... +var BUGNUMBER = 256617; +var summary = 'throw statement: eol should not be allowed'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'syntax error'; + +try +{ + eval('throw\n1;'); + actual = 'throw ignored'; +} +catch(e) +{ + if (e instanceof SyntaxError) + { + actual = 'syntax error'; + } + else + { + actual = 'no error'; + } +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-256798.js b/js/src/tests/js1_5/Regress/regress-256798.js new file mode 100644 index 000000000..3926c40eb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-256798.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 256798; +var summary = 'regexp zero-width positive lookahead'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; + +status = summary + ' ' + inSection(1); +expect = 'aaaa,a'; +actual = /(?:(a)+)/.exec("baaaa") + ''; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2); +expect = ',aaa'; +actual = /(?=(a+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3); +expect = 'b,aaa'; +actual = /b(?=(a+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); + +// XXXbc revisit this +status = summary + ' ' + inSection(4); +expect = 'null'; +actual = /b(?=(b+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-259935.js b/js/src/tests/js1_5/Regress/regress-259935.js new file mode 100644 index 000000000..0c8a717ad --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-259935.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(xulRuntime.shell) -- browser only +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 259935; +var summary = 'document.all can be easily detected'; +var actual = ''; +var expect = 'not detected'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document == 'undefined') +{ + document = {}; +} + +function foo() { + this.ie = document.all; +} + +var f = new foo(); + +if (f.ie) { + actual = 'detected'; +} else { + actual = 'not detected'; +} + +reportCompare(expect, actual, summary); + +f = {ie: document.all}; + +if (f.ie) { + actual = 'detected'; +} else { + actual = 'not detected'; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-260541.js b/js/src/tests/js1_5/Regress/regress-260541.js new file mode 100644 index 000000000..fc696ba25 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-260541.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// have not been able to reproduce the crash in any build. +var BUGNUMBER = 260541; +var summary = 'Recursive Error object should not crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var myErr = new Error( "Error Text" ); +myErr.name = myErr; + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-261886.js b/js/src/tests/js1_5/Regress/regress-261886.js new file mode 100644 index 000000000..45fbf27e6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-261886.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 261886; +var summary = 'Always evaluate delete operand expression'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {a:1}; + +expect = 2; +try +{ + delete ++o.a; + actual = o.a; +} +catch(e) +{ + actual = o.a; + summary += ' ' + e; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-261887.js b/js/src/tests/js1_5/Regress/regress-261887.js new file mode 100644 index 000000000..28e393928 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-261887.js @@ -0,0 +1,37 @@ +// |reftest| skip -- we violate the spec here with our new iterators +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from Oscar Fogelberg <osfo@home.se> +var BUGNUMBER = 261887; +var summary = 'deleted properties should not be visited by for in'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var count = 0; +var result = ""; +var value = ""; + +var t = new Object(); +t.one = "one"; +t.two = "two"; +t.three = "three"; +t.four = "four"; + +for (var prop in t) { + if (count==1) delete(t.three); + count++; + value = value + t[prop]; + result = result + prop; +} + +expect = 'onetwofour:onetwofour'; +actual = value + ':' + result; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-271716-n.js b/js/src/tests/js1_5/Regress/regress-271716-n.js new file mode 100644 index 000000000..f936d3081 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-271716-n.js @@ -0,0 +1,27 @@ +// |reftest| skip -- never terminates +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 271716; +var summary = 'Don\'t Crash on infinite loop creating new Arrays'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + a = new Array(); + while (1) a = new Array(a); + actual = 'No Crash'; +} +catch(e) +{ + actual = 'No Crash'; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-274035.js b/js/src/tests/js1_5/Regress/regress-274035.js new file mode 100644 index 000000000..00fcb1a04 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-274035.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 274035; +var summary = 'Array.prototype[concat|slice|splice] lengths'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' Array.prototype.concat.length '; +expect = 1; +actual = Array.prototype.concat.length; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' Array.prototype.slice.length '; +expect = 2; +actual = Array.prototype.slice.length; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' Array.prototype.splice.length '; +expect = 2; +actual = Array.prototype.splice.length; +reportCompare(expect, actual, status); + diff --git a/js/src/tests/js1_5/Regress/regress-274888.js b/js/src/tests/js1_5/Regress/regress-274888.js new file mode 100644 index 000000000..1b59b3ea3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-274888.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 274888; +var summary = 'Negative lookahead should match at positions > approx. 64k'; +var actual = ''; +var expect = ''; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re; +var status; +var s; + +re = /(?!\d)a/; +status = summary + ' ' + inSection(1) + ' /(?!\\d)a/.text("12345a")'; +s = '12345a'; + +expect = true; +actual = re.test(s); + +reportCompare(expect, actual, status); + +re = /(?!\d)a/; +status = summary + ' ' + inSection(2) + ' ' + '/(?!\\d)a/.text("1...ka")'; +s = '1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329a'; + +expect = true; +actual = re.test(s); + +reportCompare(expect, actual, status); + +exitFunc ('test'); + diff --git a/js/src/tests/js1_5/Regress/regress-275378.js b/js/src/tests/js1_5/Regress/regress-275378.js new file mode 100644 index 000000000..3c6999804 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-275378.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Martin Zvieger <martin.zvieger@sphinx.at> +// if fails, will fail to run in browser due to syntax error +var BUGNUMBER = 275378; +var summary = 'Literal RegExp in case block should not give syntax error'; +var actual = ''; +var expect = ''; + +var status; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var tmpString= "XYZ"; +// works +/ABC/.test(tmpString); +var tmpVal= 1; +if (tmpVal == 1) +{ + // works + /ABC/.test(tmpString); +} +switch(tmpVal) +{ +case 1: +{ + // works + /ABC/.test(tmpString); +} +break; +} +switch(tmpVal) +{ +case 1: + // fails with syntax error + /ABC/.test(tmpString); + break; +} + +expect = actual = 'no error'; +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-276103.js b/js/src/tests/js1_5/Regress/regress-276103.js new file mode 100644 index 000000000..1242b5964 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-276103.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Gianugo Rabellino <gianugo@apache.org> +var BUGNUMBER = 276103; +var summary = 'link foo and null bytes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var testString = "test|string"; +var idx = testString.indexOf("|"); +var link = testString.substring(0, idx); +var desc = testString.substring(idx + 1); + +expect = '<a href="test">string</a>'; +actual = desc.link(link); + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-278873.js b/js/src/tests/js1_5/Regress/regress-278873.js new file mode 100644 index 000000000..74215a2cc --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-278873.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Philipp Vogt <vogge@vlbg.dhs.org> +var BUGNUMBER = 278873; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function SwitchTest( input) { + switch ( input ) { + default: break; + case A: break; + } +} + +printStatus(SwitchTest + ''); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-280769-1.js b/js/src/tests/js1_5/Regress/regress-280769-1.js new file mode 100644 index 000000000..d17e0997d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769-1.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 64K boundary of [] offset in regexp search string '; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' (new RegExp("zzz...[AB]").exec("zzz...A") '; + +var N = 100 * 1000; // N should be more then 64K +var a = new Array(N + 1); +var prefix = a.join("z"); // prefix is sequence of N "z", zzz...zzz +var str = prefix+"[AB]"; // str is zzz...zzz[AB] +var re = new RegExp(str); +try { + re.exec(prefix+"A"); + reportCompare(expect, actual, status); +} catch (e) { + reportCompare(true, e instanceof Error, actual, status); +} diff --git a/js/src/tests/js1_5/Regress/regress-280769-2.js b/js/src/tests/js1_5/Regress/regress-280769-2.js new file mode 100644 index 000000000..78855a143 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769-2.js @@ -0,0 +1,44 @@ +// |reftest| skip-if(Android) silentfail +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K boundary in treeDepth'; +var actual = 'No Crash'; +var expect = /No Crash|InternalError: allocation size overflow/; +var status; +var result; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +status = summary + ' ' + inSection(1) + ' (new RegExp("0|...|99999") '; + +try +{ + var N = 100 * 1000; + var a = new Array(N); + for (var i = 0; i != N; ++i) { + a[i] = i; + } + var str = a.join('|'); // str is 0|1|2|3|...|<printed value of N -1> + var re = new RegExp(str); + re.exec(N - 1); +} +catch(ex) +{ + actual = ex + ''; +} + +print('Done: ' + actual); + +reportMatch(expect, actual, summary); + + + diff --git a/js/src/tests/js1_5/Regress/regress-280769-3.js b/js/src/tests/js1_5/Regress/regress-280769-3.js new file mode 100644 index 000000000..23d5c2e51 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769-3.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 64K boundary in number of classes in regexp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var N = 100 * 1000; + +status = summary + ' ' + inSection(3) + ' (new RegExp("[0][1]...[99999]").exec("") '; + +var a = new Array(N); + +for (var i = 0; i != N; ++i) { + a[i] = i; +} + +var str = '['+a.join('][')+']'; // str is [0][1][2]...[<PRINTED N-1>] + +try +{ + var re = new RegExp(str); +} +catch(e) +{ + printStatus('Exception creating RegExp: ' + e); +} + +try +{ + re.exec(''); +} +catch(e) +{ + printStatus('Exception executing RegExp: ' + e); +} + +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-280769-4.js b/js/src/tests/js1_5/Regress/regress-280769-4.js new file mode 100644 index 000000000..eefc6db2c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769-4.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K length of char sequence in RegExp []'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var N = 20 * 1000; // It should be that N*6 > 64K and N < 32K + +var prefixes = ["000", "00", "0"]; + +function to_4_hex(i) +{ + var printed = i.toString(16); + if (printed.length < 4) { + printed= prefixes[printed.length - 1]+printed; + } + return printed; + +} + +var a = new Array(N); +for (var i = 0; i != N; ++i) { + a[i] = to_4_hex(2*i); +} + +var str = '[\\u'+a.join('\\u')+']'; +// str is [\u0000\u0002\u0004...\u<printed value of 2N>] + +var re = new RegExp(str); + +var string_to_match = String.fromCharCode(2 * (N - 1)); + +var value = re.exec(string_to_match); + +var expect = string_to_match; +var actual = value ? value[0] : value; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-280769-5.js b/js/src/tests/js1_5/Regress/regress-280769-5.js new file mode 100644 index 000000000..930583a07 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769-5.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K string offset'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var N = 100 * 1000; + +var prefix = new Array(N).join("a"); // prefix is sequence of N "a" + +var suffix = "111"; + +var re = new RegExp(prefix+"0?"+suffix); // re is /aaa...aaa0?111/ + +var str_to_match = prefix+suffix; // str_to_match is "aaa...aaa111" + +try { + var index = str_to_match.search(re); + + expect = 0; + actual = index; + + reportCompare(expect, actual, summary); +} catch (e) { + reportCompare(true, e instanceof Error, actual, summary); +} diff --git a/js/src/tests/js1_5/Regress/regress-280769.js b/js/src/tests/js1_5/Regress/regress-280769.js new file mode 100644 index 000000000..44873cf83 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-280769.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 32K boundary in regexp bytecode jump offset'; +var actual = 'No Crash'; +var expect = 'No Crash'; +var status; +var result; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' /1|...|6779/.exec("6777") '; + +var re = /1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400|401|402|403|404|405|406|407|408|409|410|411|412|413|414|415|416|417|418|419|420|421|422|423|424|425|426|427|428|429|430|431|432|433|434|435|436|437|438|439|440|441|442|443|444|445|446|447|448|449|450|451|452|453|454|455|456|457|458|459|460|461|462|463|464|465|466|467|468|469|470|471|472|473|474|475|476|477|478|479|480|481|482|483|484|485|486|487|488|489|490|491|492|493|494|495|496|497|498|499|500|501|502|503|504|505|506|507|508|509|510|511|512|513|514|515|516|517|518|519|520|521|522|523|524|525|526|527|528|529|530|531|532|533|534|535|536|537|538|539|540|541|542|543|544|545|546|547|548|549|550|551|552|553|554|555|556|557|558|559|560|561|562|563|564|565|566|567|568|569|570|571|572|573|574|575|576|577|578|579|580|581|582|583|584|585|586|587|588|589|590|591|592|593|594|595|596|597|598|599|600|601|602|603|604|605|606|607|608|609|610|611|612|613|614|615|616|617|618|619|620|621|622|623|624|625|626|627|628|629|630|631|632|633|634|635|636|637|638|639|640|641|642|643|644|645|646|647|648|649|650|651|652|653|654|655|656|657|658|659|660|661|662|663|664|665|666|667|668|669|670|671|672|673|674|675|676|677|678|679|680|681|682|683|684|685|686|687|688|689|690|691|692|693|694|695|696|697|698|699|700|701|702|703|704|705|706|707|708|709|710|711|712|713|714|715|716|717|718|719|720|721|722|723|724|725|726|727|728|729|730|731|732|733|734|735|736|737|738|739|740|741|742|743|744|745|746|747|748|749|750|751|752|753|754|755|756|757|758|759|760|761|762|763|764|765|766|767|768|769|770|771|772|773|774|775|776|777|778|779|780|781|782|783|784|785|786|787|788|789|790|791|792|793|794|795|796|797|798|799|800|801|802|803|804|805|806|807|808|809|810|811|812|813|814|815|816|817|818|819|820|821|822|823|824|825|826|827|828|829|830|831|832|833|834|835|836|837|838|839|840|841|842|843|844|845|846|847|848|849|850|851|852|853|854|855|856|857|858|859|860|861|862|863|864|865|866|867|868|869|870|871|872|873|874|875|876|877|878|879|880|881|882|883|884|885|886|887|888|889|890|891|892|893|894|895|896|897|898|899|900|901|902|903|904|905|906|907|908|909|910|911|912|913|914|915|916|917|918|919|920|921|922|923|924|925|926|927|928|929|930|931|932|933|934|935|936|937|938|939|940|941|942|943|944|945|946|947|948|949|950|951|952|953|954|955|956|957|958|959|960|961|962|963|964|965|966|967|968|969|970|971|972|973|974|975|976|977|978|979|980|981|982|983|984|985|986|987|988|989|990|991|992|993|994|995|996|997|998|999|1000|1001|1002|1003|1004|1005|1006|1007|1008|1009|1010|1011|1012|1013|1014|1015|1016|1017|1018|1019|1020|1021|1022|1023|1024|1025|1026|1027|1028|1029|1030|1031|1032|1033|1034|1035|1036|1037|1038|1039|1040|1041|1042|1043|1044|1045|1046|1047|1048|1049|1050|1051|1052|1053|1054|1055|1056|1057|1058|1059|1060|1061|1062|1063|1064|1065|1066|1067|1068|1069|1070|1071|1072|1073|1074|1075|1076|1077|1078|1079|1080|1081|1082|1083|1084|1085|1086|1087|1088|1089|1090|1091|1092|1093|1094|1095|1096|1097|1098|1099|1100|1101|1102|1103|1104|1105|1106|1107|1108|1109|1110|1111|1112|1113|1114|1115|1116|1117|1118|1119|1120|1121|1122|1123|1124|1125|1126|1127|1128|1129|1130|1131|1132|1133|1134|1135|1136|1137|1138|1139|1140|1141|1142|1143|1144|1145|1146|1147|1148|1149|1150|1151|1152|1153|1154|1155|1156|1157|1158|1159|1160|1161|1162|1163|1164|1165|1166|1167|1168|1169|1170|1171|1172|1173|1174|1175|1176|1177|1178|1179|1180|1181|1182|1183|1184|1185|1186|1187|1188|1189|1190|1191|1192|1193|1194|1195|1196|1197|1198|1199|1200|1201|1202|1203|1204|1205|1206|1207|1208|1209|1210|1211|1212|1213|1214|1215|1216|1217|1218|1219|1220|1221|1222|1223|1224|1225|1226|1227|1228|1229|1230|1231|1232|1233|1234|1235|1236|1237|1238|1239|1240|1241|1242|1243|1244|1245|1246|1247|1248|1249|1250|1251|1252|1253|1254|1255|1256|1257|1258|1259|1260|1261|1262|1263|1264|1265|1266|1267|1268|1269|1270|1271|1272|1273|1274|1275|1276|1277|1278|1279|1280|1281|1282|1283|1284|1285|1286|1287|1288|1289|1290|1291|1292|1293|1294|1295|1296|1297|1298|1299|1300|1301|1302|1303|1304|1305|1306|1307|1308|1309|1310|1311|1312|1313|1314|1315|1316|1317|1318|1319|1320|1321|1322|1323|1324|1325|1326|1327|1328|1329|1330|1331|1332|1333|1334|1335|1336|1337|1338|1339|1340|1341|1342|1343|1344|1345|1346|1347|1348|1349|1350|1351|1352|1353|1354|1355|1356|1357|1358|1359|1360|1361|1362|1363|1364|1365|1366|1367|1368|1369|1370|1371|1372|1373|1374|1375|1376|1377|1378|1379|1380|1381|1382|1383|1384|1385|1386|1387|1388|1389|1390|1391|1392|1393|1394|1395|1396|1397|1398|1399|1400|1401|1402|1403|1404|1405|1406|1407|1408|1409|1410|1411|1412|1413|1414|1415|1416|1417|1418|1419|1420|1421|1422|1423|1424|1425|1426|1427|1428|1429|1430|1431|1432|1433|1434|1435|1436|1437|1438|1439|1440|1441|1442|1443|1444|1445|1446|1447|1448|1449|1450|1451|1452|1453|1454|1455|1456|1457|1458|1459|1460|1461|1462|1463|1464|1465|1466|1467|1468|1469|1470|1471|1472|1473|1474|1475|1476|1477|1478|1479|1480|1481|1482|1483|1484|1485|1486|1487|1488|1489|1490|1491|1492|1493|1494|1495|1496|1497|1498|1499|1500|1501|1502|1503|1504|1505|1506|1507|1508|1509|1510|1511|1512|1513|1514|1515|1516|1517|1518|1519|1520|1521|1522|1523|1524|1525|1526|1527|1528|1529|1530|1531|1532|1533|1534|1535|1536|1537|1538|1539|1540|1541|1542|1543|1544|1545|1546|1547|1548|1549|1550|1551|1552|1553|1554|1555|1556|1557|1558|1559|1560|1561|1562|1563|1564|1565|1566|1567|1568|1569|1570|1571|1572|1573|1574|1575|1576|1577|1578|1579|1580|1581|1582|1583|1584|1585|1586|1587|1588|1589|1590|1591|1592|1593|1594|1595|1596|1597|1598|1599|1600|1601|1602|1603|1604|1605|1606|1607|1608|1609|1610|1611|1612|1613|1614|1615|1616|1617|1618|1619|1620|1621|1622|1623|1624|1625|1626|1627|1628|1629|1630|1631|1632|1633|1634|1635|1636|1637|1638|1639|1640|1641|1642|1643|1644|1645|1646|1647|1648|1649|1650|1651|1652|1653|1654|1655|1656|1657|1658|1659|1660|1661|1662|1663|1664|1665|1666|1667|1668|1669|1670|1671|1672|1673|1674|1675|1676|1677|1678|1679|1680|1681|1682|1683|1684|1685|1686|1687|1688|1689|1690|1691|1692|1693|1694|1695|1696|1697|1698|1699|1700|1701|1702|1703|1704|1705|1706|1707|1708|1709|1710|1711|1712|1713|1714|1715|1716|1717|1718|1719|1720|1721|1722|1723|1724|1725|1726|1727|1728|1729|1730|1731|1732|1733|1734|1735|1736|1737|1738|1739|1740|1741|1742|1743|1744|1745|1746|1747|1748|1749|1750|1751|1752|1753|1754|1755|1756|1757|1758|1759|1760|1761|1762|1763|1764|1765|1766|1767|1768|1769|1770|1771|1772|1773|1774|1775|1776|1777|1778|1779|1780|1781|1782|1783|1784|1785|1786|1787|1788|1789|1790|1791|1792|1793|1794|1795|1796|1797|1798|1799|1800|1801|1802|1803|1804|1805|1806|1807|1808|1809|1810|1811|1812|1813|1814|1815|1816|1817|1818|1819|1820|1821|1822|1823|1824|1825|1826|1827|1828|1829|1830|1831|1832|1833|1834|1835|1836|1837|1838|1839|1840|1841|1842|1843|1844|1845|1846|1847|1848|1849|1850|1851|1852|1853|1854|1855|1856|1857|1858|1859|1860|1861|1862|1863|1864|1865|1866|1867|1868|1869|1870|1871|1872|1873|1874|1875|1876|1877|1878|1879|1880|1881|1882|1883|1884|1885|1886|1887|1888|1889|1890|1891|1892|1893|1894|1895|1896|1897|1898|1899|1900|1901|1902|1903|1904|1905|1906|1907|1908|1909|1910|1911|1912|1913|1914|1915|1916|1917|1918|1919|1920|1921|1922|1923|1924|1925|1926|1927|1928|1929|1930|1931|1932|1933|1934|1935|1936|1937|1938|1939|1940|1941|1942|1943|1944|1945|1946|1947|1948|1949|1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015|2016|2017|2018|2019|2020|2021|2022|2023|2024|2025|2026|2027|2028|2029|2030|2031|2032|2033|2034|2035|2036|2037|2038|2039|2040|2041|2042|2043|2044|2045|2046|2047|2048|2049|2050|2051|2052|2053|2054|2055|2056|2057|2058|2059|2060|2061|2062|2063|2064|2065|2066|2067|2068|2069|2070|2071|2072|2073|2074|2075|2076|2077|2078|2079|2080|2081|2082|2083|2084|2085|2086|2087|2088|2089|2090|2091|2092|2093|2094|2095|2096|2097|2098|2099|2100|2101|2102|2103|2104|2105|2106|2107|2108|2109|2110|2111|2112|2113|2114|2115|2116|2117|2118|2119|2120|2121|2122|2123|2124|2125|2126|2127|2128|2129|2130|2131|2132|2133|2134|2135|2136|2137|2138|2139|2140|2141|2142|2143|2144|2145|2146|2147|2148|2149|2150|2151|2152|2153|2154|2155|2156|2157|2158|2159|2160|2161|2162|2163|2164|2165|2166|2167|2168|2169|2170|2171|2172|2173|2174|2175|2176|2177|2178|2179|2180|2181|2182|2183|2184|2185|2186|2187|2188|2189|2190|2191|2192|2193|2194|2195|2196|2197|2198|2199|2200|2201|2202|2203|2204|2205|2206|2207|2208|2209|2210|2211|2212|2213|2214|2215|2216|2217|2218|2219|2220|2221|2222|2223|2224|2225|2226|2227|2228|2229|2230|2231|2232|2233|2234|2235|2236|2237|2238|2239|2240|2241|2242|2243|2244|2245|2246|2247|2248|2249|2250|2251|2252|2253|2254|2255|2256|2257|2258|2259|2260|2261|2262|2263|2264|2265|2266|2267|2268|2269|2270|2271|2272|2273|2274|2275|2276|2277|2278|2279|2280|2281|2282|2283|2284|2285|2286|2287|2288|2289|2290|2291|2292|2293|2294|2295|2296|2297|2298|2299|2300|2301|2302|2303|2304|2305|2306|2307|2308|2309|2310|2311|2312|2313|2314|2315|2316|2317|2318|2319|2320|2321|2322|2323|2324|2325|2326|2327|2328|2329|2330|2331|2332|2333|2334|2335|2336|2337|2338|2339|2340|2341|2342|2343|2344|2345|2346|2347|2348|2349|2350|2351|2352|2353|2354|2355|2356|2357|2358|2359|2360|2361|2362|2363|2364|2365|2366|2367|2368|2369|2370|2371|2372|2373|2374|2375|2376|2377|2378|2379|2380|2381|2382|2383|2384|2385|2386|2387|2388|2389|2390|2391|2392|2393|2394|2395|2396|2397|2398|2399|2400|2401|2402|2403|2404|2405|2406|2407|2408|2409|2410|2411|2412|2413|2414|2415|2416|2417|2418|2419|2420|2421|2422|2423|2424|2425|2426|2427|2428|2429|2430|2431|2432|2433|2434|2435|2436|2437|2438|2439|2440|2441|2442|2443|2444|2445|2446|2447|2448|2449|2450|2451|2452|2453|2454|2455|2456|2457|2458|2459|2460|2461|2462|2463|2464|2465|2466|2467|2468|2469|2470|2471|2472|2473|2474|2475|2476|2477|2478|2479|2480|2481|2482|2483|2484|2485|2486|2487|2488|2489|2490|2491|2492|2493|2494|2495|2496|2497|2498|2499|2500|2501|2502|2503|2504|2505|2506|2507|2508|2509|2510|2511|2512|2513|2514|2515|2516|2517|2518|2519|2520|2521|2522|2523|2524|2525|2526|2527|2528|2529|2530|2531|2532|2533|2534|2535|2536|2537|2538|2539|2540|2541|2542|2543|2544|2545|2546|2547|2548|2549|2550|2551|2552|2553|2554|2555|2556|2557|2558|2559|2560|2561|2562|2563|2564|2565|2566|2567|2568|2569|2570|2571|2572|2573|2574|2575|2576|2577|2578|2579|2580|2581|2582|2583|2584|2585|2586|2587|2588|2589|2590|2591|2592|2593|2594|2595|2596|2597|2598|2599|2600|2601|2602|2603|2604|2605|2606|2607|2608|2609|2610|2611|2612|2613|2614|2615|2616|2617|2618|2619|2620|2621|2622|2623|2624|2625|2626|2627|2628|2629|2630|2631|2632|2633|2634|2635|2636|2637|2638|2639|2640|2641|2642|2643|2644|2645|2646|2647|2648|2649|2650|2651|2652|2653|2654|2655|2656|2657|2658|2659|2660|2661|2662|2663|2664|2665|2666|2667|2668|2669|2670|2671|2672|2673|2674|2675|2676|2677|2678|2679|2680|2681|2682|2683|2684|2685|2686|2687|2688|2689|2690|2691|2692|2693|2694|2695|2696|2697|2698|2699|2700|2701|2702|2703|2704|2705|2706|2707|2708|2709|2710|2711|2712|2713|2714|2715|2716|2717|2718|2719|2720|2721|2722|2723|2724|2725|2726|2727|2728|2729|2730|2731|2732|2733|2734|2735|2736|2737|2738|2739|2740|2741|2742|2743|2744|2745|2746|2747|2748|2749|2750|2751|2752|2753|2754|2755|2756|2757|2758|2759|2760|2761|2762|2763|2764|2765|2766|2767|2768|2769|2770|2771|2772|2773|2774|2775|2776|2777|2778|2779|2780|2781|2782|2783|2784|2785|2786|2787|2788|2789|2790|2791|2792|2793|2794|2795|2796|2797|2798|2799|2800|2801|2802|2803|2804|2805|2806|2807|2808|2809|2810|2811|2812|2813|2814|2815|2816|2817|2818|2819|2820|2821|2822|2823|2824|2825|2826|2827|2828|2829|2830|2831|2832|2833|2834|2835|2836|2837|2838|2839|2840|2841|2842|2843|2844|2845|2846|2847|2848|2849|2850|2851|2852|2853|2854|2855|2856|2857|2858|2859|2860|2861|2862|2863|2864|2865|2866|2867|2868|2869|2870|2871|2872|2873|2874|2875|2876|2877|2878|2879|2880|2881|2882|2883|2884|2885|2886|2887|2888|2889|2890|2891|2892|2893|2894|2895|2896|2897|2898|2899|2900|2901|2902|2903|2904|2905|2906|2907|2908|2909|2910|2911|2912|2913|2914|2915|2916|2917|2918|2919|2920|2921|2922|2923|2924|2925|2926|2927|2928|2929|2930|2931|2932|2933|2934|2935|2936|2937|2938|2939|2940|2941|2942|2943|2944|2945|2946|2947|2948|2949|2950|2951|2952|2953|2954|2955|2956|2957|2958|2959|2960|2961|2962|2963|2964|2965|2966|2967|2968|2969|2970|2971|2972|2973|2974|2975|2976|2977|2978|2979|2980|2981|2982|2983|2984|2985|2986|2987|2988|2989|2990|2991|2992|2993|2994|2995|2996|2997|2998|2999|3000|3001|3002|3003|3004|3005|3006|3007|3008|3009|3010|3011|3012|3013|3014|3015|3016|3017|3018|3019|3020|3021|3022|3023|3024|3025|3026|3027|3028|3029|3030|3031|3032|3033|3034|3035|3036|3037|3038|3039|3040|3041|3042|3043|3044|3045|3046|3047|3048|3049|3050|3051|3052|3053|3054|3055|3056|3057|3058|3059|3060|3061|3062|3063|3064|3065|3066|3067|3068|3069|3070|3071|3072|3073|3074|3075|3076|3077|3078|3079|3080|3081|3082|3083|3084|3085|3086|3087|3088|3089|3090|3091|3092|3093|3094|3095|3096|3097|3098|3099|3100|3101|3102|3103|3104|3105|3106|3107|3108|3109|3110|3111|3112|3113|3114|3115|3116|3117|3118|3119|3120|3121|3122|3123|3124|3125|3126|3127|3128|3129|3130|3131|3132|3133|3134|3135|3136|3137|3138|3139|3140|3141|3142|3143|3144|3145|3146|3147|3148|3149|3150|3151|3152|3153|3154|3155|3156|3157|3158|3159|3160|3161|3162|3163|3164|3165|3166|3167|3168|3169|3170|3171|3172|3173|3174|3175|3176|3177|3178|3179|3180|3181|3182|3183|3184|3185|3186|3187|3188|3189|3190|3191|3192|3193|3194|3195|3196|3197|3198|3199|3200|3201|3202|3203|3204|3205|3206|3207|3208|3209|3210|3211|3212|3213|3214|3215|3216|3217|3218|3219|3220|3221|3222|3223|3224|3225|3226|3227|3228|3229|3230|3231|3232|3233|3234|3235|3236|3237|3238|3239|3240|3241|3242|3243|3244|3245|3246|3247|3248|3249|3250|3251|3252|3253|3254|3255|3256|3257|3258|3259|3260|3261|3262|3263|3264|3265|3266|3267|3268|3269|3270|3271|3272|3273|3274|3275|3276|3277|3278|3279|3280|3281|3282|3283|3284|3285|3286|3287|3288|3289|3290|3291|3292|3293|3294|3295|3296|3297|3298|3299|3300|3301|3302|3303|3304|3305|3306|3307|3308|3309|3310|3311|3312|3313|3314|3315|3316|3317|3318|3319|3320|3321|3322|3323|3324|3325|3326|3327|3328|3329|3330|3331|3332|3333|3334|3335|3336|3337|3338|3339|3340|3341|3342|3343|3344|3345|3346|3347|3348|3349|3350|3351|3352|3353|3354|3355|3356|3357|3358|3359|3360|3361|3362|3363|3364|3365|3366|3367|3368|3369|3370|3371|3372|3373|3374|3375|3376|3377|3378|3379|3380|3381|3382|3383|3384|3385|3386|3387|3388|3389|3390|3391|3392|3393|3394|3395|3396|3397|3398|3399|3400|3401|3402|3403|3404|3405|3406|3407|3408|3409|3410|3411|3412|3413|3414|3415|3416|3417|3418|3419|3420|3421|3422|3423|3424|3425|3426|3427|3428|3429|3430|3431|3432|3433|3434|3435|3436|3437|3438|3439|3440|3441|3442|3443|3444|3445|3446|3447|3448|3449|3450|3451|3452|3453|3454|3455|3456|3457|3458|3459|3460|3461|3462|3463|3464|3465|3466|3467|3468|3469|3470|3471|3472|3473|3474|3475|3476|3477|3478|3479|3480|3481|3482|3483|3484|3485|3486|3487|3488|3489|3490|3491|3492|3493|3494|3495|3496|3497|3498|3499|3500|3501|3502|3503|3504|3505|3506|3507|3508|3509|3510|3511|3512|3513|3514|3515|3516|3517|3518|3519|3520|3521|3522|3523|3524|3525|3526|3527|3528|3529|3530|3531|3532|3533|3534|3535|3536|3537|3538|3539|3540|3541|3542|3543|3544|3545|3546|3547|3548|3549|3550|3551|3552|3553|3554|3555|3556|3557|3558|3559|3560|3561|3562|3563|3564|3565|3566|3567|3568|3569|3570|3571|3572|3573|3574|3575|3576|3577|3578|3579|3580|3581|3582|3583|3584|3585|3586|3587|3588|3589|3590|3591|3592|3593|3594|3595|3596|3597|3598|3599|3600|3601|3602|3603|3604|3605|3606|3607|3608|3609|3610|3611|3612|3613|3614|3615|3616|3617|3618|3619|3620|3621|3622|3623|3624|3625|3626|3627|3628|3629|3630|3631|3632|3633|3634|3635|3636|3637|3638|3639|3640|3641|3642|3643|3644|3645|3646|3647|3648|3649|3650|3651|3652|3653|3654|3655|3656|3657|3658|3659|3660|3661|3662|3663|3664|3665|3666|3667|3668|3669|3670|3671|3672|3673|3674|3675|3676|3677|3678|3679|3680|3681|3682|3683|3684|3685|3686|3687|3688|3689|3690|3691|3692|3693|3694|3695|3696|3697|3698|3699|3700|3701|3702|3703|3704|3705|3706|3707|3708|3709|3710|3711|3712|3713|3714|3715|3716|3717|3718|3719|3720|3721|3722|3723|3724|3725|3726|3727|3728|3729|3730|3731|3732|3733|3734|3735|3736|3737|3738|3739|3740|3741|3742|3743|3744|3745|3746|3747|3748|3749|3750|3751|3752|3753|3754|3755|3756|3757|3758|3759|3760|3761|3762|3763|3764|3765|3766|3767|3768|3769|3770|3771|3772|3773|3774|3775|3776|3777|3778|3779|3780|3781|3782|3783|3784|3785|3786|3787|3788|3789|3790|3791|3792|3793|3794|3795|3796|3797|3798|3799|3800|3801|3802|3803|3804|3805|3806|3807|3808|3809|3810|3811|3812|3813|3814|3815|3816|3817|3818|3819|3820|3821|3822|3823|3824|3825|3826|3827|3828|3829|3830|3831|3832|3833|3834|3835|3836|3837|3838|3839|3840|3841|3842|3843|3844|3845|3846|3847|3848|3849|3850|3851|3852|3853|3854|3855|3856|3857|3858|3859|3860|3861|3862|3863|3864|3865|3866|3867|3868|3869|3870|3871|3872|3873|3874|3875|3876|3877|3878|3879|3880|3881|3882|3883|3884|3885|3886|3887|3888|3889|3890|3891|3892|3893|3894|3895|3896|3897|3898|3899|3900|3901|3902|3903|3904|3905|3906|3907|3908|3909|3910|3911|3912|3913|3914|3915|3916|3917|3918|3919|3920|3921|3922|3923|3924|3925|3926|3927|3928|3929|3930|3931|3932|3933|3934|3935|3936|3937|3938|3939|3940|3941|3942|3943|3944|3945|3946|3947|3948|3949|3950|3951|3952|3953|3954|3955|3956|3957|3958|3959|3960|3961|3962|3963|3964|3965|3966|3967|3968|3969|3970|3971|3972|3973|3974|3975|3976|3977|3978|3979|3980|3981|3982|3983|3984|3985|3986|3987|3988|3989|3990|3991|3992|3993|3994|3995|3996|3997|3998|3999|4000|4001|4002|4003|4004|4005|4006|4007|4008|4009|4010|4011|4012|4013|4014|4015|4016|4017|4018|4019|4020|4021|4022|4023|4024|4025|4026|4027|4028|4029|4030|4031|4032|4033|4034|4035|4036|4037|4038|4039|4040|4041|4042|4043|4044|4045|4046|4047|4048|4049|4050|4051|4052|4053|4054|4055|4056|4057|4058|4059|4060|4061|4062|4063|4064|4065|4066|4067|4068|4069|4070|4071|4072|4073|4074|4075|4076|4077|4078|4079|4080|4081|4082|4083|4084|4085|4086|4087|4088|4089|4090|4091|4092|4093|4094|4095|4096|4097|4098|4099|4100|4101|4102|4103|4104|4105|4106|4107|4108|4109|4110|4111|4112|4113|4114|4115|4116|4117|4118|4119|4120|4121|4122|4123|4124|4125|4126|4127|4128|4129|4130|4131|4132|4133|4134|4135|4136|4137|4138|4139|4140|4141|4142|4143|4144|4145|4146|4147|4148|4149|4150|4151|4152|4153|4154|4155|4156|4157|4158|4159|4160|4161|4162|4163|4164|4165|4166|4167|4168|4169|4170|4171|4172|4173|4174|4175|4176|4177|4178|4179|4180|4181|4182|4183|4184|4185|4186|4187|4188|4189|4190|4191|4192|4193|4194|4195|4196|4197|4198|4199|4200|4201|4202|4203|4204|4205|4206|4207|4208|4209|4210|4211|4212|4213|4214|4215|4216|4217|4218|4219|4220|4221|4222|4223|4224|4225|4226|4227|4228|4229|4230|4231|4232|4233|4234|4235|4236|4237|4238|4239|4240|4241|4242|4243|4244|4245|4246|4247|4248|4249|4250|4251|4252|4253|4254|4255|4256|4257|4258|4259|4260|4261|4262|4263|4264|4265|4266|4267|4268|4269|4270|4271|4272|4273|4274|4275|4276|4277|4278|4279|4280|4281|4282|4283|4284|4285|4286|4287|4288|4289|4290|4291|4292|4293|4294|4295|4296|4297|4298|4299|4300|4301|4302|4303|4304|4305|4306|4307|4308|4309|4310|4311|4312|4313|4314|4315|4316|4317|4318|4319|4320|4321|4322|4323|4324|4325|4326|4327|4328|4329|4330|4331|4332|4333|4334|4335|4336|4337|4338|4339|4340|4341|4342|4343|4344|4345|4346|4347|4348|4349|4350|4351|4352|4353|4354|4355|4356|4357|4358|4359|4360|4361|4362|4363|4364|4365|4366|4367|4368|4369|4370|4371|4372|4373|4374|4375|4376|4377|4378|4379|4380|4381|4382|4383|4384|4385|4386|4387|4388|4389|4390|4391|4392|4393|4394|4395|4396|4397|4398|4399|4400|4401|4402|4403|4404|4405|4406|4407|4408|4409|4410|4411|4412|4413|4414|4415|4416|4417|4418|4419|4420|4421|4422|4423|4424|4425|4426|4427|4428|4429|4430|4431|4432|4433|4434|4435|4436|4437|4438|4439|4440|4441|4442|4443|4444|4445|4446|4447|4448|4449|4450|4451|4452|4453|4454|4455|4456|4457|4458|4459|4460|4461|4462|4463|4464|4465|4466|4467|4468|4469|4470|4471|4472|4473|4474|4475|4476|4477|4478|4479|4480|4481|4482|4483|4484|4485|4486|4487|4488|4489|4490|4491|4492|4493|4494|4495|4496|4497|4498|4499|4500|4501|4502|4503|4504|4505|4506|4507|4508|4509|4510|4511|4512|4513|4514|4515|4516|4517|4518|4519|4520|4521|4522|4523|4524|4525|4526|4527|4528|4529|4530|4531|4532|4533|4534|4535|4536|4537|4538|4539|4540|4541|4542|4543|4544|4545|4546|4547|4548|4549|4550|4551|4552|4553|4554|4555|4556|4557|4558|4559|4560|4561|4562|4563|4564|4565|4566|4567|4568|4569|4570|4571|4572|4573|4574|4575|4576|4577|4578|4579|4580|4581|4582|4583|4584|4585|4586|4587|4588|4589|4590|4591|4592|4593|4594|4595|4596|4597|4598|4599|4600|4601|4602|4603|4604|4605|4606|4607|4608|4609|4610|4611|4612|4613|4614|4615|4616|4617|4618|4619|4620|4621|4622|4623|4624|4625|4626|4627|4628|4629|4630|4631|4632|4633|4634|4635|4636|4637|4638|4639|4640|4641|4642|4643|4644|4645|4646|4647|4648|4649|4650|4651|4652|4653|4654|4655|4656|4657|4658|4659|4660|4661|4662|4663|4664|4665|4666|4667|4668|4669|4670|4671|4672|4673|4674|4675|4676|4677|4678|4679|4680|4681|4682|4683|4684|4685|4686|4687|4688|4689|4690|4691|4692|4693|4694|4695|4696|4697|4698|4699|4700|4701|4702|4703|4704|4705|4706|4707|4708|4709|4710|4711|4712|4713|4714|4715|4716|4717|4718|4719|4720|4721|4722|4723|4724|4725|4726|4727|4728|4729|4730|4731|4732|4733|4734|4735|4736|4737|4738|4739|4740|4741|4742|4743|4744|4745|4746|4747|4748|4749|4750|4751|4752|4753|4754|4755|4756|4757|4758|4759|4760|4761|4762|4763|4764|4765|4766|4767|4768|4769|4770|4771|4772|4773|4774|4775|4776|4777|4778|4779|4780|4781|4782|4783|4784|4785|4786|4787|4788|4789|4790|4791|4792|4793|4794|4795|4796|4797|4798|4799|4800|4801|4802|4803|4804|4805|4806|4807|4808|4809|4810|4811|4812|4813|4814|4815|4816|4817|4818|4819|4820|4821|4822|4823|4824|4825|4826|4827|4828|4829|4830|4831|4832|4833|4834|4835|4836|4837|4838|4839|4840|4841|4842|4843|4844|4845|4846|4847|4848|4849|4850|4851|4852|4853|4854|4855|4856|4857|4858|4859|4860|4861|4862|4863|4864|4865|4866|4867|4868|4869|4870|4871|4872|4873|4874|4875|4876|4877|4878|4879|4880|4881|4882|4883|4884|4885|4886|4887|4888|4889|4890|4891|4892|4893|4894|4895|4896|4897|4898|4899|4900|4901|4902|4903|4904|4905|4906|4907|4908|4909|4910|4911|4912|4913|4914|4915|4916|4917|4918|4919|4920|4921|4922|4923|4924|4925|4926|4927|4928|4929|4930|4931|4932|4933|4934|4935|4936|4937|4938|4939|4940|4941|4942|4943|4944|4945|4946|4947|4948|4949|4950|4951|4952|4953|4954|4955|4956|4957|4958|4959|4960|4961|4962|4963|4964|4965|4966|4967|4968|4969|4970|4971|4972|4973|4974|4975|4976|4977|4978|4979|4980|4981|4982|4983|4984|4985|4986|4987|4988|4989|4990|4991|4992|4993|4994|4995|4996|4997|4998|4999|5000|5001|5002|5003|5004|5005|5006|5007|5008|5009|5010|5011|5012|5013|5014|5015|5016|5017|5018|5019|5020|5021|5022|5023|5024|5025|5026|5027|5028|5029|5030|5031|5032|5033|5034|5035|5036|5037|5038|5039|5040|5041|5042|5043|5044|5045|5046|5047|5048|5049|5050|5051|5052|5053|5054|5055|5056|5057|5058|5059|5060|5061|5062|5063|5064|5065|5066|5067|5068|5069|5070|5071|5072|5073|5074|5075|5076|5077|5078|5079|5080|5081|5082|5083|5084|5085|5086|5087|5088|5089|5090|5091|5092|5093|5094|5095|5096|5097|5098|5099|5100|5101|5102|5103|5104|5105|5106|5107|5108|5109|5110|5111|5112|5113|5114|5115|5116|5117|5118|5119|5120|5121|5122|5123|5124|5125|5126|5127|5128|5129|5130|5131|5132|5133|5134|5135|5136|5137|5138|5139|5140|5141|5142|5143|5144|5145|5146|5147|5148|5149|5150|5151|5152|5153|5154|5155|5156|5157|5158|5159|5160|5161|5162|5163|5164|5165|5166|5167|5168|5169|5170|5171|5172|5173|5174|5175|5176|5177|5178|5179|5180|5181|5182|5183|5184|5185|5186|5187|5188|5189|5190|5191|5192|5193|5194|5195|5196|5197|5198|5199|5200|5201|5202|5203|5204|5205|5206|5207|5208|5209|5210|5211|5212|5213|5214|5215|5216|5217|5218|5219|5220|5221|5222|5223|5224|5225|5226|5227|5228|5229|5230|5231|5232|5233|5234|5235|5236|5237|5238|5239|5240|5241|5242|5243|5244|5245|5246|5247|5248|5249|5250|5251|5252|5253|5254|5255|5256|5257|5258|5259|5260|5261|5262|5263|5264|5265|5266|5267|5268|5269|5270|5271|5272|5273|5274|5275|5276|5277|5278|5279|5280|5281|5282|5283|5284|5285|5286|5287|5288|5289|5290|5291|5292|5293|5294|5295|5296|5297|5298|5299|5300|5301|5302|5303|5304|5305|5306|5307|5308|5309|5310|5311|5312|5313|5314|5315|5316|5317|5318|5319|5320|5321|5322|5323|5324|5325|5326|5327|5328|5329|5330|5331|5332|5333|5334|5335|5336|5337|5338|5339|5340|5341|5342|5343|5344|5345|5346|5347|5348|5349|5350|5351|5352|5353|5354|5355|5356|5357|5358|5359|5360|5361|5362|5363|5364|5365|5366|5367|5368|5369|5370|5371|5372|5373|5374|5375|5376|5377|5378|5379|5380|5381|5382|5383|5384|5385|5386|5387|5388|5389|5390|5391|5392|5393|5394|5395|5396|5397|5398|5399|5400|5401|5402|5403|5404|5405|5406|5407|5408|5409|5410|5411|5412|5413|5414|5415|5416|5417|5418|5419|5420|5421|5422|5423|5424|5425|5426|5427|5428|5429|5430|5431|5432|5433|5434|5435|5436|5437|5438|5439|5440|5441|5442|5443|5444|5445|5446|5447|5448|5449|5450|5451|5452|5453|5454|5455|5456|5457|5458|5459|5460|5461|5462|5463|5464|5465|5466|5467|5468|5469|5470|5471|5472|5473|5474|5475|5476|5477|5478|5479|5480|5481|5482|5483|5484|5485|5486|5487|5488|5489|5490|5491|5492|5493|5494|5495|5496|5497|5498|5499|5500|5501|5502|5503|5504|5505|5506|5507|5508|5509|5510|5511|5512|5513|5514|5515|5516|5517|5518|5519|5520|5521|5522|5523|5524|5525|5526|5527|5528|5529|5530|5531|5532|5533|5534|5535|5536|5537|5538|5539|5540|5541|5542|5543|5544|5545|5546|5547|5548|5549|5550|5551|5552|5553|5554|5555|5556|5557|5558|5559|5560|5561|5562|5563|5564|5565|5566|5567|5568|5569|5570|5571|5572|5573|5574|5575|5576|5577|5578|5579|5580|5581|5582|5583|5584|5585|5586|5587|5588|5589|5590|5591|5592|5593|5594|5595|5596|5597|5598|5599|5600|5601|5602|5603|5604|5605|5606|5607|5608|5609|5610|5611|5612|5613|5614|5615|5616|5617|5618|5619|5620|5621|5622|5623|5624|5625|5626|5627|5628|5629|5630|5631|5632|5633|5634|5635|5636|5637|5638|5639|5640|5641|5642|5643|5644|5645|5646|5647|5648|5649|5650|5651|5652|5653|5654|5655|5656|5657|5658|5659|5660|5661|5662|5663|5664|5665|5666|5667|5668|5669|5670|5671|5672|5673|5674|5675|5676|5677|5678|5679|5680|5681|5682|5683|5684|5685|5686|5687|5688|5689|5690|5691|5692|5693|5694|5695|5696|5697|5698|5699|5700|5701|5702|5703|5704|5705|5706|5707|5708|5709|5710|5711|5712|5713|5714|5715|5716|5717|5718|5719|5720|5721|5722|5723|5724|5725|5726|5727|5728|5729|5730|5731|5732|5733|5734|5735|5736|5737|5738|5739|5740|5741|5742|5743|5744|5745|5746|5747|5748|5749|5750|5751|5752|5753|5754|5755|5756|5757|5758|5759|5760|5761|5762|5763|5764|5765|5766|5767|5768|5769|5770|5771|5772|5773|5774|5775|5776|5777|5778|5779|5780|5781|5782|5783|5784|5785|5786|5787|5788|5789|5790|5791|5792|5793|5794|5795|5796|5797|5798|5799|5800|5801|5802|5803|5804|5805|5806|5807|5808|5809|5810|5811|5812|5813|5814|5815|5816|5817|5818|5819|5820|5821|5822|5823|5824|5825|5826|5827|5828|5829|5830|5831|5832|5833|5834|5835|5836|5837|5838|5839|5840|5841|5842|5843|5844|5845|5846|5847|5848|5849|5850|5851|5852|5853|5854|5855|5856|5857|5858|5859|5860|5861|5862|5863|5864|5865|5866|5867|5868|5869|5870|5871|5872|5873|5874|5875|5876|5877|5878|5879|5880|5881|5882|5883|5884|5885|5886|5887|5888|5889|5890|5891|5892|5893|5894|5895|5896|5897|5898|5899|5900|5901|5902|5903|5904|5905|5906|5907|5908|5909|5910|5911|5912|5913|5914|5915|5916|5917|5918|5919|5920|5921|5922|5923|5924|5925|5926|5927|5928|5929|5930|5931|5932|5933|5934|5935|5936|5937|5938|5939|5940|5941|5942|5943|5944|5945|5946|5947|5948|5949|5950|5951|5952|5953|5954|5955|5956|5957|5958|5959|5960|5961|5962|5963|5964|5965|5966|5967|5968|5969|5970|5971|5972|5973|5974|5975|5976|5977|5978|5979|5980|5981|5982|5983|5984|5985|5986|5987|5988|5989|5990|5991|5992|5993|5994|5995|5996|5997|5998|5999|6000|6001|6002|6003|6004|6005|6006|6007|6008|6009|6010|6011|6012|6013|6014|6015|6016|6017|6018|6019|6020|6021|6022|6023|6024|6025|6026|6027|6028|6029|6030|6031|6032|6033|6034|6035|6036|6037|6038|6039|6040|6041|6042|6043|6044|6045|6046|6047|6048|6049|6050|6051|6052|6053|6054|6055|6056|6057|6058|6059|6060|6061|6062|6063|6064|6065|6066|6067|6068|6069|6070|6071|6072|6073|6074|6075|6076|6077|6078|6079|6080|6081|6082|6083|6084|6085|6086|6087|6088|6089|6090|6091|6092|6093|6094|6095|6096|6097|6098|6099|6100|6101|6102|6103|6104|6105|6106|6107|6108|6109|6110|6111|6112|6113|6114|6115|6116|6117|6118|6119|6120|6121|6122|6123|6124|6125|6126|6127|6128|6129|6130|6131|6132|6133|6134|6135|6136|6137|6138|6139|6140|6141|6142|6143|6144|6145|6146|6147|6148|6149|6150|6151|6152|6153|6154|6155|6156|6157|6158|6159|6160|6161|6162|6163|6164|6165|6166|6167|6168|6169|6170|6171|6172|6173|6174|6175|6176|6177|6178|6179|6180|6181|6182|6183|6184|6185|6186|6187|6188|6189|6190|6191|6192|6193|6194|6195|6196|6197|6198|6199|6200|6201|6202|6203|6204|6205|6206|6207|6208|6209|6210|6211|6212|6213|6214|6215|6216|6217|6218|6219|6220|6221|6222|6223|6224|6225|6226|6227|6228|6229|6230|6231|6232|6233|6234|6235|6236|6237|6238|6239|6240|6241|6242|6243|6244|6245|6246|6247|6248|6249|6250|6251|6252|6253|6254|6255|6256|6257|6258|6259|6260|6261|6262|6263|6264|6265|6266|6267|6268|6269|6270|6271|6272|6273|6274|6275|6276|6277|6278|6279|6280|6281|6282|6283|6284|6285|6286|6287|6288|6289|6290|6291|6292|6293|6294|6295|6296|6297|6298|6299|6300|6301|6302|6303|6304|6305|6306|6307|6308|6309|6310|6311|6312|6313|6314|6315|6316|6317|6318|6319|6320|6321|6322|6323|6324|6325|6326|6327|6328|6329|6330|6331|6332|6333|6334|6335|6336|6337|6338|6339|6340|6341|6342|6343|6344|6345|6346|6347|6348|6349|6350|6351|6352|6353|6354|6355|6356|6357|6358|6359|6360|6361|6362|6363|6364|6365|6366|6367|6368|6369|6370|6371|6372|6373|6374|6375|6376|6377|6378|6379|6380|6381|6382|6383|6384|6385|6386|6387|6388|6389|6390|6391|6392|6393|6394|6395|6396|6397|6398|6399|6400|6401|6402|6403|6404|6405|6406|6407|6408|6409|6410|6411|6412|6413|6414|6415|6416|6417|6418|6419|6420|6421|6422|6423|6424|6425|6426|6427|6428|6429|6430|6431|6432|6433|6434|6435|6436|6437|6438|6439|6440|6441|6442|6443|6444|6445|6446|6447|6448|6449|6450|6451|6452|6453|6454|6455|6456|6457|6458|6459|6460|6461|6462|6463|6464|6465|6466|6467|6468|6469|6470|6471|6472|6473|6474|6475|6476|6477|6478|6479|6480|6481|6482|6483|6484|6485|6486|6487|6488|6489|6490|6491|6492|6493|6494|6495|6496|6497|6498|6499|6500|6501|6502|6503|6504|6505|6506|6507|6508|6509|6510|6511|6512|6513|6514|6515|6516|6517|6518|6519|6520|6521|6522|6523|6524|6525|6526|6527|6528|6529|6530|6531|6532|6533|6534|6535|6536|6537|6538|6539|6540|6541|6542|6543|6544|6545|6546|6547|6548|6549|6550|6551|6552|6553|6554|6555|6556|6557|6558|6559|6560|6561|6562|6563|6564|6565|6566|6567|6568|6569|6570|6571|6572|6573|6574|6575|6576|6577|6578|6579|6580|6581|6582|6583|6584|6585|6586|6587|6588|6589|6590|6591|6592|6593|6594|6595|6596|6597|6598|6599|6600|6601|6602|6603|6604|6605|6606|6607|6608|6609|6610|6611|6612|6613|6614|6615|6616|6617|6618|6619|6620|6621|6622|6623|6624|6625|6626|6627|6628|6629|6630|6631|6632|6633|6634|6635|6636|6637|6638|6639|6640|6641|6642|6643|6644|6645|6646|6647|6648|6649|6650|6651|6652|6653|6654|6655|6656|6657|6658|6659|6660|6661|6662|6663|6664|6665|6666|6667|6668|6669|6670|6671|6672|6673|6674|6675|6676|6677|6678|6679|6680|6681|6682|6683|6684|6685|6686|6687|6688|6689|6690|6691|6692|6693|6694|6695|6696|6697|6698|6699|6700|6701|6702|6703|6704|6705|6706|6707|6708|6709|6710|6711|6712|6713|6714|6715|6716|6717|6718|6719|6720|6721|6722|6723|6724|6725|6726|6727|6728|6729|6730|6731|6732|6733|6734|6735|6736|6737|6738|6739|6740|6741|6742|6743|6744|6745|6746|6747|6748|6749|6750|6751|6752|6753|6754|6755|6756|6757|6758|6759|6760|6761|6762|6763|6764|6765|6766|6767|6768|6769|6770|6771|6772|6773|6774|6775|6776|6777|6778/; + +result = re.exec('6777'); + +reportCompare(expect, actual, summary); + +status = summary + ' ' + inSection(2) + ' (new RegExp("0|...|9999") '; + +var N = 10 * 1000; +var a = new Array(N); +for (var i = 0; i != N; ++i) { + a[i] = i; +} +var str = a.join('|'); // str is 0|1|2|3|...|<printed value of N -1> +var re = new RegExp(str); +re.exec(N - 1); + +reportCompare(expect, actual, summary); + + + diff --git a/js/src/tests/js1_5/Regress/regress-281606.js b/js/src/tests/js1_5/Regress/regress-281606.js new file mode 100644 index 000000000..2f36c150c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-281606.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 281606; +var summary = 'l instanceof r throws TypeError if r does not support [[HasInstance]]'; +var actual = ''; +var expect = ''; +var status; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {}; + +status = summary + ' ' + inSection(1) + ' o instanceof Math '; +expect = 'TypeError'; +try +{ + if (o instanceof Math) + { + } + actual = 'No Error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' o instanceof o '; +expect = 'TypeError'; +try +{ + if (o instanceof o) + { + } + actual = 'No Error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-281930.js b/js/src/tests/js1_5/Regress/regress-281930.js new file mode 100644 index 000000000..2939c8be8 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-281930.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 281930; +var summary = 'this reference should point to global object in function expressions'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var global = this; + +actual = function() { return this; }(); +expect = global; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-283477.js b/js/src/tests/js1_5/Regress/regress-283477.js new file mode 100644 index 000000000..65fcbb02d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-283477.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 283477; +var summary = 'a.lastIndexOf(b, c) should return -1 when there is no match'; +var actual = ''; +var expect = ''; +var status; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + " " + '"".lastIndexOf("hello", 0);'; +expect = -1; +actual = "".lastIndexOf("hello", 0); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + " " + ' "".lastIndexOf("hello");'; +expect = -1; +actual = "".lastIndexOf("hello"); +reportCompare(expect, actual, status); + +exitFunc ('test'); diff --git a/js/src/tests/js1_5/Regress/regress-288688.js b/js/src/tests/js1_5/Regress/regress-288688.js new file mode 100644 index 000000000..551b6d970 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-288688.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 288688; +var summary = 'x->regExpStatics should be stacked and unstacked around the lambda invocations'; +var actual = ''; +var expect = ''; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function genGluck(str){ + var x = str; + var rx=/end/i; + x = x.replace(rx,function($1){ + $1.match(rx); + return ""; + }); + x = x.replace(/^end/,""); + return x; +} + +expect = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXX"; + +actual = genGluck( expect + "end" ); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-289094.js b/js/src/tests/js1_5/Regress/regress-289094.js new file mode 100644 index 000000000..03945f77e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-289094.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 289094; +var summary = 'argument shadowing function property special case for lambdas'; +var actual = ''; +var expect = 'function:function'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function fn() +{ + var o = { + d: function(x,y) {}, + init: function() { this.d.x = function(x) {}; this.d.y = function(y) {}; } + }; + o.init(); + actual = typeof(o.d.x) + ':' + typeof(o.d.y); +} + +fn(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-290575.js b/js/src/tests/js1_5/Regress/regress-290575.js new file mode 100644 index 000000000..65c43919a --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-290575.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 290575; +var summary = 'Do not crash calling function with more than 32768 arguments'; +var actual = 'No Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +function crashMe(n) { + var nasty, fn; + + nasty = []; + while (n--) + nasty.push("a"+n); // Function arguments + nasty.push("void 0"); // Function body + fn = Function.apply(null, nasty); + fn.toString(); +} + +printStatus('crashMe(0x8001)'); + +crashMe(0x8001); + +reportCompare(expect, actual, summary); + +function crashMe2(n) { + var nasty = [], fn + + while (n--) nasty[n] = "a"+n + fn = Function(nasty.join(), "void 0") + fn.toString() + } + +printStatus('crashMe2(0x10000)'); + +summary = 'No Syntax Error Function to string when more than 65536 arguments'; +expect = 'Error'; +try +{ + crashMe2(0x10000); + actual = 'No Error'; + reportCompare(expect, actual, summary); +} +catch(e) +{ + actual = 'Error'; + reportCompare(expect, actual, summary); + expect = 'SyntaxError'; + actual = e.name; + reportCompare(expect, actual, summary); +} + diff --git a/js/src/tests/js1_5/Regress/regress-290656.js b/js/src/tests/js1_5/Regress/regress-290656.js new file mode 100644 index 000000000..671304cb4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-290656.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 290656; +var summary = 'Regression from bug 254974'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function foo() { + with(foo) { + this["insert"] = function(){ var node = new bar(); }; + } + function bar() {} +} + +try +{ + var list = new foo(); + list.insert(); +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-294191.js b/js/src/tests/js1_5/Regress/regress-294191.js new file mode 100644 index 000000000..35eea40a1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-294191.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294191; +var summary = 'Do not crash with nested function and "delete" op'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() +{ + function x() + { + x; + } +} + +f.z=0; + +delete f.x; + +f(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-294195-01.js b/js/src/tests/js1_5/Regress/regress-294195-01.js new file mode 100644 index 000000000..273b50554 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-294195-01.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294195; +var summary = 'Do not crash during String replace when accessing methods on backreferences'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var s = 'some text sample'; + +// this first version didn't crash +var result = s.replace(new RegExp('(^|\\s)(text)'), (new String('$1'))); +result = result.substr(0, 1); +reportCompare(expect, actual, inSection(1) + ' ' + summary); + +// the original version however did crash. +result = s.replace(new RegExp('(^|\\s)(text)'), + (new String('$1')).substr(0, 1)); +reportCompare(expect, actual, inSection(2) + ' ' + summary); diff --git a/js/src/tests/js1_5/Regress/regress-294195-02.js b/js/src/tests/js1_5/Regress/regress-294195-02.js new file mode 100644 index 000000000..c6a3cc810 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-294195-02.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294195; +var summary = 'Do not crash during String replace when accessing methods on backreferences'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var result = "".replace(/()/, "$1".slice(0,1)) + + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-294302.js b/js/src/tests/js1_5/Regress/regress-294302.js new file mode 100644 index 000000000..b4f1ed2fc --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-294302.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294302; +var summary = 'JS Shell load should throw catchable exceptions'; +var actual = 'Error not caught'; +var expect = 'Error caught'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + load('foo.js'); +} +catch(ex) +{ + actual = 'Error caught'; + printStatus(actual); +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-295052.js b/js/src/tests/js1_5/Regress/regress-295052.js new file mode 100644 index 000000000..a84a15787 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-295052.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 295052; +var summary = 'Do not crash when apply method is called on String.prototype.match'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + "".match.apply(); + throw new Error("should have thrown for undefined this"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "No TypeError for String.prototype.match"); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-295666.js b/js/src/tests/js1_5/Regress/regress-295666.js new file mode 100644 index 000000000..b527b5ec9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-295666.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 295666; +var summary = 'Check JS only recursion stack overflow'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + throw {toString: parseInt.call}; +} +catch(e) +{ +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-299209.js b/js/src/tests/js1_5/Regress/regress-299209.js new file mode 100644 index 000000000..891a4fd35 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-299209.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 299209; +var summary = 'anonymous function expression statement => JS stack overflow'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('for (a = 0; a <= 10000; a++) { function(){("");} }'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-299641.js b/js/src/tests/js1_5/Regress/regress-299641.js new file mode 100644 index 000000000..6f844b27f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-299641.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 299641; +var summary = '12.6.4 - LHS for (LHS in expression) execution'; +var actual = ''; +var expect = 0; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { + var i = 0; + var a = [{x: 42}]; + for (a[i++].x in []) + return(a[i-1].x); + return(i); +} +actual = f(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-303213.js b/js/src/tests/js1_5/Regress/regress-303213.js new file mode 100644 index 000000000..d01c28d12 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-303213.js @@ -0,0 +1,56 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) -- bug 524731 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 303213; +var summary = 'integer overflow in js'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus('This bug passes if no crash occurs'); + +expectExitCode(0); +expectExitCode(5); + +try +{ + var s=String.fromCharCode(257); + + var ki=""; + var me=""; + for (i = 0; i < 1024; i++) + { + ki = ki + s; + } + + for (i = 0; i < 1024; i++) + { + me = me + ki; + } + + var ov = s; + + for (i = 0; i < 28; i++) + ov += ov; + + for (i = 0; i < 88; i++) + ov += me; + + printStatus("done generating"); + var eov = escape(ov); + printStatus("done escape"); + printStatus(eov); +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-306633.js b/js/src/tests/js1_5/Regress/regress-306633.js new file mode 100644 index 000000000..880e4efb2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-306633.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306633; +var summary = 'report compile warnings in evald code when strict warnings enabled'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +expect = 'SyntaxError'; + +try +{ + actual = eval('super = 5'); +} +catch(e) +{ + actual = e.name; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-306727.js b/js/src/tests/js1_5/Regress/regress-306727.js new file mode 100644 index 000000000..13e3881a0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-306727.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306727; +var summary = 'Parsing RegExp of octal expressions in strict mode'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// test with strict off + +try +{ + expect = null; + actual = /.\011/.exec ('a'+String.fromCharCode(0)+'11'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); + +// test with strict on +options('strict'); + +expect = null; +try +{ + actual = /.\011/.exec ('a'+String.fromCharCode(0)+'11'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-306794.js b/js/src/tests/js1_5/Regress/regress-306794.js new file mode 100644 index 000000000..178c715e0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-306794.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306794; +var summary = 'Do not assert: parsing foo getter'; +var actual = 'No Assertion'; +var expect = 'No Assertion'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('getter\n'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-308085.js b/js/src/tests/js1_5/Regress/regress-308085.js new file mode 100644 index 000000000..d23ff12c1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-308085.js @@ -0,0 +1,569 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 308085; +var summary = 'JavaScript switch statement going to the wrong case'; +var actual = 'fail'; +var expect = 'pass'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +switch (0) { +case 0: + actual = "pass"; + break; +case 1: + // 546 lines each with 30 "1;" statements + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-308566.js b/js/src/tests/js1_5/Regress/regress-308566.js new file mode 100644 index 000000000..d3bc205f4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-308566.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 308566; +var summary = 'Do not treat octal sequence as regexp backrefs in strict mode'; +var actual = 'No error'; +var expect = 'No error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +try +{ + var c = eval("/\260/"); +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-310295.js b/js/src/tests/js1_5/Regress/regress-310295.js new file mode 100644 index 000000000..1e0aaacc4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-310295.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310295; +var summary = 'Do not crash on JS_ValueToString'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var tmp = 23948730458647527874392837439299837412374859487593; + +tmp = new Number(tmp); +tmp = tmp.valueOf() + tmp = String(tmp); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-310607.js b/js/src/tests/js1_5/Regress/regress-310607.js new file mode 100644 index 000000000..13d2449ff --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-310607.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310607; +var summary = 'Do not crash iterating over Object.prototype'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var f = new Foo(); +f.go("bar"); + +function Foo() { + this.go = function(prototype) { + printStatus("Start"); + for(var i in Object.prototype) { + printStatus("Here"); + eval("5+4"); + } + printStatus("End"); + }; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-310993.js b/js/src/tests/js1_5/Regress/regress-310993.js new file mode 100644 index 000000000..da98bb80b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-310993.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310993; +var summary = 'treat <! as the start of a comment to end of line'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'foo'; +actual = 'foo'; + +if (false) <!-- dumbdonkey --> + actual = 'bar'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-311071.js b/js/src/tests/js1_5/Regress/regress-311071.js new file mode 100644 index 000000000..b563f7163 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-311071.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311071; +var summary = 'treat <! as the start of a comment to end of line'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'foo'; +actual = 'foo'; <!-- comment hack -->; actual = 'bar'; +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-311629.js b/js/src/tests/js1_5/Regress/regress-311629.js new file mode 100644 index 000000000..6a4250445 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-311629.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311629; +var summary = 'Prevent recursive death in UnaryExp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'); +} +catch(e) +{ +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-312260.js b/js/src/tests/js1_5/Regress/regress-312260.js new file mode 100644 index 000000000..5e52d6261 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-312260.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312260; +var summary = 'Switch discriminant detecting case should not warn'; +var actual = 'No warning'; +var expect = 'No warning'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +try +{ + switch ({}.foo) {} +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-31255.js b/js/src/tests/js1_5/Regress/regress-31255.js new file mode 100644 index 000000000..3a6444952 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-31255.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 November 2002 + * SUMMARY: JS should treat --> as a single-line comment indicator. + * Whitespace may occur before the --> on the same line. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=31255 + * and http://bugzilla.mozilla.org/show_bug.cgi?id=179366 (Rhino version) + * + * Note: <!--, --> are the HTML multi-line comment opener, closer. + * JS already accepted <!-- as a single-line comment indicator. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 31255; +var summary = 'JS should treat --> as a single-line comment indicator'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +<!-- HTML comment start is already a single-line JS comment indicator + var x = 1; <!-- until end-of-line + + status = inSection(1); +actual = (x == 1); +expect = true; +addThis(); + +--> HTML comment end is JS comments until end-of-line +--> but only if it follows a possible whitespace after line start +--> so in the following --> should not be treated as comments +if (x-->0) + x = 2; + +status = inSection(2); +actual = (x == 2); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-312588.js b/js/src/tests/js1_5/Regress/regress-312588.js new file mode 100644 index 000000000..46a900f43 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-312588.js @@ -0,0 +1,27 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312588; +var summary = 'Do not crash creating infinite array'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var a = new Array(); + +try +{ + for (var i = 0; i < 1e6; i++) + (a = new Array(a)).sort(); +} +catch(ex) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-314401.js b/js/src/tests/js1_5/Regress/regress-314401.js new file mode 100644 index 000000000..5fa8ee392 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-314401.js @@ -0,0 +1,72 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 314401; +var summary = 'setTimeout(eval,0,"",null)|setTimeout(Script,0,"",null) should not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof setTimeout == 'undefined') +{ + reportCompare(expect, actual, 'Test Skipped.'); +} +else +{ + gDelayTestDriverEnd = true; + window.onerror = null; + + try + { + setTimeout(eval, 0, '', null); + } + catch(ex) + { + printStatus(ex+''); + } + + reportCompare(expect, actual, 'setTimeout(eval, 0, "", null)'); + + if (typeof Script != 'undefined') + { + try + { + setTimeout(Script, 0, '', null); + } + catch(ex) + { + printStatus(ex+''); + } + reportCompare(expect, actual, 'setTimeout(Script, 0, "", null)'); + } + + try + { + setInterval(eval, 0, '', null); + } + catch(ex) + { + printStatus(ex+''); + } + reportCompare(expect, actual, 'setInterval(eval, 0, "", null)'); + + if (typeof Script != 'undefined') + { + try + { + setInterval(Script, 0, '', null); + } + catch(ex) + { + printStatus(ex+''); + } + reportCompare(expect, actual, 'setInterval(Script, 0, "", null)'); + } + setTimeout('gDelayTestDriverEnd = false; jsTestDriverEnd();', 0); +} diff --git a/js/src/tests/js1_5/Regress/regress-315990.js b/js/src/tests/js1_5/Regress/regress-315990.js new file mode 100644 index 000000000..78fcf5407 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-315990.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 315990; +var summary = 'this.statement.is.an.error'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary + ': function expression'); + +expect = 'TypeError'; +try +{ + (function() { + this.statement.is.an.error; + })() + } +catch(ex) +{ + printStatus(ex); + actual = ex.name; +} +reportCompare(expect, actual, summary + ': function expression'); + + +printStatus (summary + ': top level'); +try +{ + this.statement.is.an.error; +} +catch(ex) +{ + printStatus(ex); + actual = ex.name; +} +reportCompare(expect, actual, summary + ': top level'); diff --git a/js/src/tests/js1_5/Regress/regress-317476.js b/js/src/tests/js1_5/Regress/regress-317476.js new file mode 100644 index 000000000..dfafa5b0c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-317476.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 317476; +var summary = 'The error thrown by JS_ReportError should be catchable'; +var actual = 'no error'; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof setTimeout != 'undefined') +{ + expect = 'error'; + try + { + setTimeout(); + } + catch(ex) + { + actual = 'error'; + printStatus(ex+''); + } +} + + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-317714-01.js b/js/src/tests/js1_5/Regress/regress-317714-01.js new file mode 100644 index 000000000..efa1769f1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-317714-01.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 317714; +var summary = 'Regression test for regression from bug 316885'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var d5="-1"; +var r3=d5.split(":"); +r3[0]++; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-317714-02.js b/js/src/tests/js1_5/Regress/regress-317714-02.js new file mode 100644 index 000000000..8ae50ffee --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-317714-02.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 317714; +var summary = 'Regression test for regression from bug 316885'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var r3="-1"; +r3[0]++; + +reportCompare(expect, actual, summary); + + diff --git a/js/src/tests/js1_5/Regress/regress-319384.js b/js/src/tests/js1_5/Regress/regress-319384.js new file mode 100644 index 000000000..bac8dd6e0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-319384.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 319384; +var summary = 'Do not crash converting string to number'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('This test only runs in the browser'); + +if (typeof clearTimeout === 'function') +{ + try + { + clearTimeout('foo'); + } + catch(ex) + { + } +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-319391.js b/js/src/tests/js1_5/Regress/regress-319391.js new file mode 100644 index 000000000..aebb60c43 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-319391.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 319391; +var summary = 'Assignment to eval(...) should be runtime error'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var b = {}; + +expect = 'error'; +try +{ + if (1) { eval("b.z") = 3; } + actual = 'no error'; +} +catch(ex) +{ + actual = 'error'; +} +reportCompare(expect, actual, summary); + +expect = 'no error'; +try +{ + if (0) { eval("b.z") = 3; } + actual = 'no error'; +} +catch(ex) +{ + actual = 'error'; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-320032.js b/js/src/tests/js1_5/Regress/regress-320032.js new file mode 100644 index 000000000..ded2e98a9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-320032.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 320032; +var summary = 'Parenthesization should not dereference ECMA Reference type'; +var actual = 'No error'; +var expect = 'No error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document != 'undefined' && 'getElementById' in document) +{ + try + { + (document.getElementById)("x"); + } + catch(ex) + { + actual = ex + ''; + } +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-320119.js b/js/src/tests/js1_5/Regress/regress-320119.js new file mode 100644 index 000000000..8aeb7abdb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-320119.js @@ -0,0 +1,116 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 320119; +var summary = 'delegating objects and arguments, arity, caller, name'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('original test'); + +function origtest(name, bar) +{ + this.name = name; + this.bar = bar; +} + +function Monty(id, name, bar) +{ + this.id = id; + this.base = origtest; + this.base(name, bar); +} + +Monty.prototype = origtest; + +function testtwo(notNamedName, bar) +{ + this.name = notNamedName; + this.bar = bar; +} + +function Python(id, notNamedName, bar) +{ + this.id = id; + this.base = origtest; + this.base(notNamedName, bar); +} + +Python.prototype = testtwo; + +var foo = new Monty(1, 'my name', 'sna!'); + +var manchu = new Python(1, 'my name', 'sna!'); + +printStatus('foo.name: ' + foo.name); +printStatus('manchu.name: ' + manchu.name); + +expect = 'my name:my name'; +actual = foo.name + ':' + manchu.name; +reportCompare(expect, actual, summary + ': override function..name'); + +// end original test + +printStatus('test shared properties'); + +function testshared() +{ +} + +expect = false; +actual = testshared.hasOwnProperty('arguments'); +reportCompare(expect, actual, summary + ': arguments no longer shared'); + +expect = false; +actual = testshared.hasOwnProperty('caller'); +reportCompare(expect, actual, summary + ': caller no longer shared'); + +expect = false; +actual = testshared.hasOwnProperty('arity'); +reportCompare(expect, actual, summary + ': arity no longer shared'); + +expect = false; +actual = testshared.hasOwnProperty('name'); +reportCompare(expect, actual, summary + ': name no longer shared'); + +expect = true; +actual = testshared.hasOwnProperty('length'); +reportCompare(expect, actual, summary + ': length still shared'); + +printStatus('test overrides'); + +function Parent() +{ + this.arguments = 'oarguments'; + this.caller = 'ocaller'; + this.arity = 'oarity'; + this.length = 'olength'; + this.name = 'oname'; +} + +function Child() +{ + this.base = Parent; + this.base(); +} + +Child.prototype = Parent; + +Child.prototype.value = function() +{ + return this.arguments + ',' + this.caller + ',' + this.arity + ',' + + this.length + ',' + this.name; +}; + +var child = new Child(); + +expect = 'oarguments,ocaller,oarity,0,oname'; +actual = child.value(); +reportCompare(expect, actual, summary + ': overrides'); diff --git a/js/src/tests/js1_5/Regress/regress-321757.js b/js/src/tests/js1_5/Regress/regress-321757.js new file mode 100644 index 000000000..268d737cf --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-321757.js @@ -0,0 +1,109 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 321757; +var summary = 'Compound assignment operators should not bind LHS'; +var actual = ''; +var expect = 'pass'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + foo += 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': +='); + +try +{ + foo -= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': -='); + +try +{ + foo *= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': *='); + +try +{ + foo /= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': /='); + +try +{ + foo %= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': %='); + +try +{ + foo <<= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': <<='); + +try +{ + foo >>= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': >>='); + +try +{ + foo >>>= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': >>>='); diff --git a/js/src/tests/js1_5/Regress/regress-321874.js b/js/src/tests/js1_5/Regress/regress-321874.js new file mode 100644 index 000000000..d6fbf77c2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-321874.js @@ -0,0 +1,207 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 321874; +var summary = 'lhs must be a reference in (for lhs in rhs) ...'; +var actual = ''; +var expect = ''; +var section; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function a() {} +var b = {foo: 'bar'}; + +printStatus('for-in tests'); + +var v; +section = summary + ': for((v) in b);'; +expect = 'foo'; +printStatus(section); +try +{ + eval('for ((v) in b);'); + actual = v; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': function foo(){for((v) in b);};foo();'; +expect = 'foo'; +printStatus(section); +try +{ + eval('function foo(){ for ((v) in b);}; foo();'); + actual = v; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': for(a() in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (a() in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': function foo(){for(a() in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (a() in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = ': for(new a() in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (new a() in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': function foo(){for(new a() in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (new a() in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': for(void in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (void in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': function foo(){for(void in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (void in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +var d = 1; +var e = 2; +expect = 'error'; +section = ': for((d*e) in b);'; +printStatus(section); +try +{ + eval('for ((d*e) in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +var d = 1; +var e = 2; +expect = 'error'; +section = ': function foo(){for((d*e) in b);};foo();'; +printStatus(section); +try +{ + eval('function foo(){ for ((d*e) in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +const c = 0; +expect = 'error'; +section = ': for(c in b);'; +printStatus(section); +try +{ + eval('for (c in b);'); + actual = c; + printStatus('typeof c: ' + (typeof c) + ', c: ' + c); +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +expect = 'error'; +section = ': function foo(){for(c in b);};foo();'; +printStatus(section); +try +{ + eval('function foo(){ for (c in b);};foo();'); + actual = c; + printStatus('typeof c: ' + (typeof c) + ', c: ' + c); +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); diff --git a/js/src/tests/js1_5/Regress/regress-321971.js b/js/src/tests/js1_5/Regress/regress-321971.js new file mode 100644 index 000000000..c40b1f47b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-321971.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 321971; +var summary = 'JSOP_FINDNAME replaces JSOP_BINDNAME'; +var actual = 'no error'; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var s=''; +for (i=0; i < 1<<16; i++) + s += 'x' + i + '=' + i + ';\n'; + +s += 'foo=' + i + ';\n'; +eval(s); +foo; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-322430.js b/js/src/tests/js1_5/Regress/regress-322430.js new file mode 100644 index 000000000..f5fbf3041 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-322430.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322430; +var summary = 'Remove deprecated with statement warning'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +expect = 'No Warning'; + +try +{ + var obj = {foo: 'baz'}; + + // this must either be top level or must be + // evald since there is a bug in older versions + // that suppresses the |with| warning inside of a + // try catch block. doh! + eval('with (obj) { foo; }'); + + actual = 'No Warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-323314-1.js b/js/src/tests/js1_5/Regress/regress-323314-1.js new file mode 100644 index 000000000..0d3c5496f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-323314-1.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 323314; +var summary = 'JSMSG_EQUAL_AS_ASSIGN in js.msg should be JSEXN_SYNTAXERR'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var xyzzy; + +expect = 'SyntaxError'; + +try +{ + eval('if (xyzzy=1) printStatus(xyzzy);'); + + actual = 'No Warning'; +} +catch(ex) +{ + actual = ex.name; + printStatus(ex + ''); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-325925.js b/js/src/tests/js1_5/Regress/regress-325925.js new file mode 100644 index 000000000..e75415b10 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-325925.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 325925; +var summary = 'Do not Assert: c <= cs->length in AddCharacterToCharSet'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/[\cA]/.exec('\x01'); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-326467.js b/js/src/tests/js1_5/Regress/regress-326467.js new file mode 100644 index 000000000..5dc1f59b5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-326467.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 326467; +var summary = 'Do not assert: slot < fp->nvars, at jsinterp.c'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval('for(var prop in {1:1})prop;', {}) + + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-328012.js b/js/src/tests/js1_5/Regress/regress-328012.js new file mode 100644 index 000000000..8ccc673b6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-328012.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328012; +var summary = 'Content PropertyIterator should not root in chrome'; +var actual = 'No Error'; +var expect = 'No Error'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof focus != 'undefined' && focus.prototype) +{ + try + { + for (prop in focus.prototype.toString) + ; + } + catch(ex) + { + printStatus(ex + ''); + actual = ex + ''; + } +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-328664.js b/js/src/tests/js1_5/Regress/regress-328664.js new file mode 100644 index 000000000..e4638ca6c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-328664.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328664; +var summary = 'Correct error message for funccall(undefined, undefined.prop)'; +var actual = ''; +var expect = /TypeError: value.parameters (has no properties|is undefined)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var value = {}; + +function funccall(a,b) +{ +} + +try +{ + funccall(value[1], value.parameters[1]); +} +catch(ex) +{ + printStatus(ex); + actual = ex + ''; +} + +reportMatch(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-329383.js b/js/src/tests/js1_5/Regress/regress-329383.js new file mode 100644 index 000000000..00c7260ca --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-329383.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 329383; +var summary = 'Math copysign issues'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var inputs = [ + -Infinity, + -10.01, + -9.01, + -8.01, + -7.01, + -6.01, + -5.01, + -4.01, + -Math.PI, + -3.01, + -2.01, + -1.01, + -0.5, + -0.49, + -0.01, + -0, + 0, + +0, + 0.01, + 0.49, + 0.50, + 0, + 1.01, + 2.01, + 3.01, + Math.PI, + 4.01, + 5.01, + 6.01, + 7.01, + 8.01, + 9.01, + 10.01, + Infinity + ]; + +var iinput; + +for (iinput = 0; iinput < inputs.length; iinput++) +{ + var input = inputs[iinput]; + reportCompare(Math.round(input), + emulateRound(input), + summary + ': Math.round(' + input + ')'); +} + +reportCompare(isNaN(Math.round(NaN)), + isNaN(emulateRound(NaN)), + summary + ': Math.round(' + input + ')'); + +function emulateRound(x) +{ + if (!isFinite(x) || x === 0) return x + if (-0.5 <= x && x < 0) return -0 + return Math.floor(x + 0.5) + } + +var z; + +z = Math.min(-0, 0); + +reportCompare(-Math.PI, Math.atan2(z, z), summary + ': Math.atan2(-0, -0)'); +reportCompare(-Infinity, 1/z, summary + ': 1/-0'); + +z = Math.max(-0, 0); + +reportCompare(0, Math.atan2(z, z), summary + ': Math.atan2(0, 0)'); +reportCompare(Infinity, 1/z, summary + ': 1/0'); diff --git a/js/src/tests/js1_5/Regress/regress-329530.js b/js/src/tests/js1_5/Regress/regress-329530.js new file mode 100644 index 000000000..05aa1e78b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-329530.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 329530; +var summary = 'Do not crash when calling toString on a deeply nested function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var nestingLevel = 1000; + +function buildTestFunction(N) { + var i, funSourceStart = "", funSourceEnd = ""; + for (i=0; i < N; ++i) { + funSourceStart += "function testFoo() {"; + funSourceEnd += "}"; + } + return Function(funSourceStart + funSourceEnd); +} + +try +{ + var testSource = buildTestFunction(nestingLevel).toString(); + printStatus(testSource.length); +} +catch(ex) +{ + printStatus(ex + ''); +} + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-330352.js b/js/src/tests/js1_5/Regress/regress-330352.js new file mode 100644 index 000000000..a33c61762 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-330352.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330352; +var summary = 'Very non-greedy regexp causes crash in jsregexp.c'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +if ("AB".match(/(.*?)*?B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*?)*?B/)'); + +if ("AB".match(/(.*)*?B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*)*?B/)'); + +if ("AB".match(/(.*?)*B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*?)*B/)'); diff --git a/js/src/tests/js1_5/Regress/regress-330951.js b/js/src/tests/js1_5/Regress/regress-330951.js new file mode 100644 index 000000000..a7b214023 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-330951.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330951; +var summary = 'Crash in Array.sort on array with undefined value'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +[undefined,1].sort(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-01.js b/js/src/tests/js1_5/Regress/regress-334807-01.js new file mode 100644 index 000000000..977b97fc1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-01.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + (function () { printStatus( arguments.join()); })( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-02.js b/js/src/tests/js1_5/Regress/regress-334807-02.js new file mode 100644 index 000000000..59b616695 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Object = Array'); + +Object = Array; + +try +{ + (function () { printStatus( arguments.join()); })( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-03.js b/js/src/tests/js1_5/Regress/regress-334807-03.js new file mode 100644 index 000000000..ae4e6a87d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-03.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + 0, function () { printStatus( arguments.join()); }( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-04.js b/js/src/tests/js1_5/Regress/regress-334807-04.js new file mode 100644 index 000000000..4c229ceb3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-04.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Object = Array'); + +Object = Array; + +try +{ + 0, function () { printStatus( arguments.join()); }( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-05.js b/js/src/tests/js1_5/Regress/regress-334807-05.js new file mode 100644 index 000000000..02e698c50 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-05.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '12.14 - exception prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + x.y; +} +catch(ex) +{ + try + { + actual = ex.name; + printStatus(ex + ': x.y'); + ex.valueOf(); + } + catch(ex2) + { + printStatus(ex2 + ': ex.valueOf()'); + actual = ex2.name; + } +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-334807-06.js b/js/src/tests/js1_5/Regress/regress-334807-06.js new file mode 100644 index 000000000..46ca2c664 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-334807-06.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '12.14 - exception prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Error = Number'); + +Error = Number; + +try +{ + x.y; +} +catch(ex) +{ + try + { + actual = ex.name; + printStatus(ex + ': x.y'); + ex.valueOf(); + } + catch(ex2) + { + printStatus(ex2 + ': ex.valueOf()'); + actual = ex2.name; + } +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-336100.js b/js/src/tests/js1_5/Regress/regress-336100.js new file mode 100644 index 000000000..9f19e761c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-336100.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336100; +var summary = 'bug 336100 - arguments regressed'; +var actual = ''; +var expect; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var arguments = []; + +expect = '[object Arguments]'; +actual = (function(){return (arguments + '');})(); +reportCompare(expect, actual, summary); + +// see bug 336100 comment 29 +expect = ''; +actual = (function(){with (this) return(arguments + '');})(); +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-338307.js b/js/src/tests/js1_5/Regress/regress-338307.js new file mode 100644 index 000000000..2e35cfd00 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-338307.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338307; +var summary = 'for (i in arguments) causes type error (JS_1_7_ALPHA_BRANCH)'; +var actual = ''; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { + for (var i in arguments); +} + +try +{ + f(); + actual = 'No Error'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-340369.js b/js/src/tests/js1_5/Regress/regress-340369.js new file mode 100644 index 000000000..61dfd2ce2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-340369.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 340369; +var summary = 'Oh for crying out loud.'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('return /;'); +} +catch(ex) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-341360.js b/js/src/tests/js1_5/Regress/regress-341360.js new file mode 100644 index 000000000..41fe5a0ca --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-341360.js @@ -0,0 +1,55 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341360; +var summary = 'clearInterval broken'; +var actual = ''; +var expect = 'Ok'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function xxx() +{ + if(t != null) + { + print('Clearing interval...'); + window.clearInterval(t); + t = null; + setTimeout('yyy()', 2000); + + } + else { + print('Clearing interval failed...'); + actual = "Broken"; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); + } +} + +function yyy() +{ + print('Checking result...'); + actual = 'Ok'; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} + +if (typeof window == 'undefined') +{ + expect = actual = 'Not tested'; + reportCompare(expect, actual, summary); +} +else +{ + print('Start...'); + gDelayTestDriverEnd = true; + var t = window.setInterval(xxx, 1000); +} + diff --git a/js/src/tests/js1_5/Regress/regress-343713.js b/js/src/tests/js1_5/Regress/regress-343713.js new file mode 100644 index 000000000..8d2cd609c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-343713.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 343713; +var summary = 'Do not assert with nested function evaluation'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +with (this) + with (this) { + eval("function outer() { function inner() { " + + "print('inner');} inner(); print('outer');} outer()"); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-343966.js b/js/src/tests/js1_5/Regress/regress-343966.js new file mode 100644 index 000000000..a2bb14540 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-343966.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 343966; +var summary = 'ClearScope foo regressed due to bug 343417'; +var actual = 'failed'; +var expect = 'passed'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Function["prototype"].inherits=function(a){}; + function foo(){}; + function bar(){}; + foo.inherits(bar); + actual = "passed"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-344711-n.js b/js/src/tests/js1_5/Regress/regress-344711-n.js new file mode 100644 index 000000000..6a23285a2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-344711-n.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344711; +var summary = 'Do not crash compiling when peeking over a newline'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + // exclude from browser as the crash only occurs in shell + // and attempting to trap the error prevents the crash. + var a1 = {abc2 : 1, abc3 : 3}; + var j = eval('a1\\\n.abc2;'); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-344804.js b/js/src/tests/js1_5/Regress/regress-344804.js new file mode 100644 index 000000000..fef426ea6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-344804.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344804; +var summary = 'Do not crash iterating over window.Packages'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window != 'undefined') + { + for (var p in window.Packages) + ; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-344959.js b/js/src/tests/js1_5/Regress/regress-344959.js new file mode 100644 index 000000000..e8e264c68 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-344959.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344959; +var summary = 'Functions should not lose scope chain after exception'; +var actual = ''; +var expect = 'with'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = "global" + + with ({x:"with"}) + actual = (function() { try {} catch(exc) {}; return x }()); + + reportCompare(expect, actual, summary + ': 1'); + + with ({x:"with"}) + actual = (function() { try { throw 1} catch(exc) {}; return x }()); + + reportCompare(expect, actual, summary + ': 2'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-346237.js b/js/src/tests/js1_5/Regress/regress-346237.js new file mode 100644 index 000000000..e8ca047f4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-346237.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346237; +var summary = 'RegExp - /(|)??x/g.exec("y")'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /(|)??x/g.exec("y"); + + reportCompare(expect, actual, summary + ': /(|)??x/g.exec("y")'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-346801.js b/js/src/tests/js1_5/Regress/regress-346801.js new file mode 100644 index 000000000..0a61cb6ff --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-346801.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346801; +var summary = 'Hang regression from bug 346021'; +var actual = ''; +var expect = 'No Hang'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } + } + + Object.extend = function(destination, source) { + print("Start"); +// print(destination); +// print(source); + if(destination==source) + print("Same desination and source!"); + var i = 0; + for (property in source) { +// print(" " + property); + destination[property] = source[property]; + ++i; + if (i > 1000) { + throw "Hang"; + } + } + print("Finish"); + return destination; + } + + var Ajax = { + }; + + Ajax.Base = function() {}; + Ajax.Base.prototype = { + responseIsFailure: function() { } + } + + Ajax.Request = Class.create(); + + Ajax.Request.prototype = Object.extend(new Ajax.Base(), {}); + + Ajax.Updater = Class.create(); + + Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype); + actual = 'No Hang'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-349482-01.js b/js/src/tests/js1_5/Regress/regress-349482-01.js new file mode 100644 index 000000000..8e2b542b5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-349482-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349482; +var summary = 'Decompiling try/catch in for..in should not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function() { for(p in {}) try{}catch(e){} }; + print(f.toString()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-349482-02.js b/js/src/tests/js1_5/Regress/regress-349482-02.js new file mode 100644 index 000000000..4dffe81d3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-349482-02.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349482; +var summary = 'Decompiling try/catch in with() should not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function() { with({}) { try{}catch(e){} } } + print(f.toString()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-349592.js b/js/src/tests/js1_5/Regress/regress-349592.js new file mode 100644 index 000000000..64eef3447 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-349592.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349592; +var summary = 'Do not assert with try/finally inside finally'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { try { } finally { try { } finally { } } }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350253.js b/js/src/tests/js1_5/Regress/regress-350253.js new file mode 100644 index 000000000..154c835a1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350253.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350253; +var summary = 'Do not assert on (g()) = 3'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (g()) = 3; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350268.js b/js/src/tests/js1_5/Regress/regress-350268.js new file mode 100644 index 000000000..78e836b17 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350268.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350268; +var summary = 'new Function with unbalanced braces'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("}"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": }"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("}}}}}"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": }}}}}"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("alert(6); } alert(5);"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": alert(6); } alert(5);"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("} {"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": } {"); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350312.js b/js/src/tests/js1_5/Regress/regress-350312.js new file mode 100644 index 000000000..4b54f1e95 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350312.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var counter = 0; + + function f(x,y) { + + try + { + throw x; + } + catch(e) + { + if (y) + throw e; + } + finally + { + try + { + actual += 'finally,'; + throw 42; + } + catch(e2) + { + actual += e2; + if (++counter > 10) + { + throw 'Infinite loop...'; + } + } + } + return 'returned'; + } + + expect = 'finally,42'; + actual = ''; + + try + { + print('test 1'); + f(2, 1); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + actual = ''; + try + { + print('test 2'); + f(2, 0); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350415.js b/js/src/tests/js1_5/Regress/regress-350415.js new file mode 100644 index 000000000..0775e2b39 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350415.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350415; +var summary = 'Do not assert with new Function("let /*")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + new Function("let /*"); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350529.js b/js/src/tests/js1_5/Regress/regress-350529.js new file mode 100644 index 000000000..ae0d6f042 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350529.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350529; +var summary = "Do not assert: x--'"; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval("x--'"); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-350692.js b/js/src/tests/js1_5/Regress/regress-350692.js new file mode 100644 index 000000000..d28d7f543 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-350692.js @@ -0,0 +1,38 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350692; +var summary = 'import x["y"]["z"]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = {y: {z: function() {}}}; + + try + { + import x['y']['z']; + } + catch(ex) + { + reportCompare('TypeError: x["y"]["z"] is not exported', ex + '', summary); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-351116.js b/js/src/tests/js1_5/Regress/regress-351116.js new file mode 100644 index 000000000..b5723320e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-351116.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(xulRuntime.OS=="Linux"&&!xulRuntime.shell&&!xulRuntime.XPCOMABI.match(/x86_64/)&&isDebugBuild) -- bug 521549 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351116; +var summary = 'formal parameter and inner function have same name'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function (s) { function s() { } }; + + function g(s) { function s() { } } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-351515.js b/js/src/tests/js1_5/Regress/regress-351515.js new file mode 100644 index 000000000..46963660f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-351515.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351515; +var summary = 'js17 features must be enabled by version request'; +var actual = 'No Error'; +var expect = 'No Error'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +yield = 1; +let = 1; + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(yield, let) { return yield+let; } + + var yield = 1; + var let = 1; + + function yield() {} + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-352208.js b/js/src/tests/js1_5/Regress/regress-352208.js new file mode 100644 index 000000000..279ba0bb5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-352208.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352208; +var summary = 'Do not assert new Function("setter/*\n")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'SyntaxError: unterminated string literal'; + try + { + eval('new Function("setter/*\n");'); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'new Function("setter/*\n");'); + + try + { + eval('new Function("setter/*\n*/");'); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'new Function("setter/*\n*/");'); + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-352604.js b/js/src/tests/js1_5/Regress/regress-352604.js new file mode 100644 index 000000000..a0094c588 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-352604.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352604; +var summary = 'Do not assert: !OBJ_GET_PROTO(cx, ctor)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + delete Function; + var x = function () {}; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-354924.js b/js/src/tests/js1_5/Regress/regress-354924.js new file mode 100644 index 000000000..8446c90fb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-354924.js @@ -0,0 +1,32 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354924; +var summary = 'Do not crash with export/import and setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + this.x setter= function(){}; + export *; + t = this; + new Function("import t.*; import t.*;")(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355341.js b/js/src/tests/js1_5/Regress/regress-355341.js new file mode 100644 index 000000000..ab2a4b884 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355341.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355341; +var summary = 'Do not crash with watch and setter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Object.defineProperty(this, "x", { set: Function, enumerable: true, configurable: true }); + this.watch('x', function () { }); x = 3; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355344.js b/js/src/tests/js1_5/Regress/regress-355344.js new file mode 100644 index 000000000..00bd39147 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355344.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355344; +var summary = 'Exceptions thrown by watch point'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var o = {}; + + expect = 'setter: yikes'; + + o.watch('x', function(){throw 'yikes'}); + try + { + o.x = 3; + } + catch(ex) + { + actual = "setter: " + ex; + } + + try + { + eval("") ; + } + catch(e) + { + actual = "eval: " + e; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355556.js b/js/src/tests/js1_5/Regress/regress-355556.js new file mode 100644 index 000000000..be9efb56c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355556.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355556; +var summary = 'Do not crash with eval(..., arguments)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'TypeError: "foo".b is not a function'; + try + { + (function () { eval("'foo'.b()", arguments) })(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355829-01.js b/js/src/tests/js1_5/Regress/regress-355829-01.js new file mode 100644 index 000000000..9b7fcf746 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355829-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'Do not assert: !argc || argv[0].isNull() || argv[0].isUndefined()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + new Object({valueOf: /a/}); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355829-02.js b/js/src/tests/js1_5/Regress/regress-355829-02.js new file mode 100644 index 000000000..f1fb22ea4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355829-02.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'js_ValueToObject should return the original object if OBJ_DEFAULT_VALUE returns a primitive value'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'Good conversion'; + + var primitiveValues = [ + true, false, 0, 1, -2, 0.1, -2e100, 0/0, 1/0, -1/1, "", "xxx", + undefined, null + ]; + + for (var i = 0; i != primitiveValues.length; ++i) { + var v = primitiveValues[i]; + var obj = { valueOf: function() { return v; } }; + var obj2 = Object(obj); + if (obj !== obj2) + actual = "Bad conversion for '"+v + "'"; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-355829-03.js b/js/src/tests/js1_5/Regress/regress-355829-03.js new file mode 100644 index 000000000..449ef02d5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-355829-03.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'js_ValueToObject should return the original object if OBJ_DEFAULT_VALUE returns a primitive value'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = [ { valueOf: function() { return null; } } ]; + a.toLocaleString(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-356250.js b/js/src/tests/js1_5/Regress/regress-356250.js new file mode 100644 index 000000000..a989e07d0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-356250.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356250; +var summary = 'Do not assert: !fp->fun || !(fp->fun->flags & JSFUN_HEAVYWEIGHT) || fp->callobj'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +(function() { eval("(function() { })"); })(); +reportCompare(expect, actual, summary + ': nested 0'); + +//----------------------------------------------------------------------------- +test1(); +test2(); +//----------------------------------------------------------------------------- + +function test1() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { eval("(function() { })"); })(); + + reportCompare(expect, actual, summary + ': nested 1'); + + exitFunc ('test'); +} + +function test2() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function () {(function() { eval("(function() { })"); })();})(); + + reportCompare(expect, actual, summary + ': nested 2'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-356693.js b/js/src/tests/js1_5/Regress/regress-356693.js new file mode 100644 index 000000000..b9d348f65 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-356693.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356693; +var summary = 'Do not assert: pn2->pn_op == JSOP_SETCALL'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'ReferenceError: x is not defined'; + try + { + delete (0 ? 3 : x()); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-360969-01.js b/js/src/tests/js1_5/Regress/regress-360969-01.js new file mode 100644 index 000000000..b57110d8e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-01.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local var'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('var pv;'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-360969-02.js b/js/src/tests/js1_5/Regress/regress-360969-02.js new file mode 100644 index 000000000..7ab7efed1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-02.js @@ -0,0 +1,32 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global var'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('var pv;'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); diff --git a/js/src/tests/js1_5/Regress/regress-360969-03.js b/js/src/tests/js1_5/Regress/regress-360969-03.js new file mode 100644 index 000000000..312583dd9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-03.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local const'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('const pv' + i + ' = undefined;'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-360969-04.js b/js/src/tests/js1_5/Regress/regress-360969-04.js new file mode 100644 index 000000000..d33dbbc21 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-04.js @@ -0,0 +1,32 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global const'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('const pv' + i + ' = undefined;'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); diff --git a/js/src/tests/js1_5/Regress/regress-360969-05.js b/js/src/tests/js1_5/Regress/regress-360969-05.js new file mode 100644 index 000000000..54b4d6829 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-05.js @@ -0,0 +1,44 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); + +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('function pf' + i + '() {}'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-360969-06.js b/js/src/tests/js1_5/Regress/regress-360969-06.js new file mode 100644 index 000000000..cd95040fb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-360969-06.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(Android&&isDebugBuild) slow -- bug 1216226 +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('function pf' + i + '() {}'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + diff --git a/js/src/tests/js1_5/Regress/regress-361467.js b/js/src/tests/js1_5/Regress/regress-361467.js new file mode 100644 index 000000000..371c0a8b5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-361467.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361467; +var summary = 'Do not crash with certain watchers'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + var x; + this.watch('x', print); + x = 5; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-361617.js b/js/src/tests/js1_5/Regress/regress-361617.js new file mode 100644 index 000000000..5d20fd78f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-361617.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361617; +var summary = 'Do not crash with getter, watch and gc'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { + Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true }); + })(); + this.watch('x', print); + Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true }); + gc(); + this.unwatch('x'); + x; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-362583.js b/js/src/tests/js1_5/Regress/regress-362583.js new file mode 100644 index 000000000..389ac539c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-362583.js @@ -0,0 +1,44 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 362583; +var summary = 'Do not assert: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + expect = actual = 'Script object not defined, test skipped.'; + } + else + { + try + { + this.x setter= (new Script('')); + this.watch('x', function() { return; import p.q; }); + x = 4; + } + catch(ex) + { + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-3649-n.js b/js/src/tests/js1_5/Regress/regress-3649-n.js new file mode 100644 index 000000000..33355163d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-3649-n.js @@ -0,0 +1,33 @@ +// |reftest| skip -- skip test due to random oom related errors. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from bug 2235 mff@research.att.com +var BUGNUMBER = 3649; +var summary = 'gc-checking branch callback.'; +var actual = 'error'; +var expect = 'error'; + +DESCRIPTION = summary; +EXPECTED = expect; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(3); +expectExitCode(5); + +var s = ""; +s = "abcd"; +for (i = 0; i < 100000; i++) { + s += s; +} + +expect = 'No Crash'; +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-366122.js b/js/src/tests/js1_5/Regress/regress-366122.js new file mode 100644 index 000000000..ef458fe88 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-366122.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366122; +var summary = 'Compile large script'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var code = "", obj = {}; + for(var i = 0; i < 0x10000; i++) { + if(i == 10242) { + code += "void 0x10000050505050;\n"; + } else { + code += "void 'x" + i + "';\n"; + } + } + code += "export undefined;\n"; + code += "void 125;\n"; + eval(code); + } + try + { + exploit(); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-366468.js b/js/src/tests/js1_5/Regress/regress-366468.js new file mode 100644 index 000000000..457cc0e1c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-366468.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366468; +var summary = 'Set property without setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + function o(){} o.prototype = {get foo() {}}; obj = new o(); obj.foo = 2; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-366601.js b/js/src/tests/js1_5/Regress/regress-366601.js new file mode 100644 index 000000000..5178d9f9e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-366601.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366601; +var summary = 'Switch with more than 64k atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 100*1000; + var src = 'var x = ["'; + var array = Array(N); + for (var i = 0; i != N; ++i) + array[i] = i; + src += array.join('","')+'"];\n'; + src += 'switch (a) { case "a": case "b": case "c": return null; } return x;'; + var f = Function('a', src); + var r = f("a"); + if (r !== null) + throw "Unexpected result: bad switch label"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-367561-01.js b/js/src/tests/js1_5/Regress/regress-367561-01.js new file mode 100644 index 000000000..4504cdaad --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-367561-01.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367561; +var summary = 'JSOP_(GET|SET)METHOD and JSOP_SETCONST with > 64K atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 1 << 16; + var src = 'var x = /'; + var array = Array(); + for (var i = 0; i != N/2; ++i) + array[i] = i; + src += array.join('/;x=/')+'/; x="'; + src += array.join('";x="')+'";'; + src += 'y.some_function();'; + var f = Function(src); + var src2 = f.toString(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-367561-03.js b/js/src/tests/js1_5/Regress/regress-367561-03.js new file mode 100644 index 000000000..cfb7432e2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-367561-03.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367561; +var summary = 'JSOP_(GET|SET)METHOD and JSOP_SETCONST with > 64K atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 1 << 16; + var src = 'var x = /'; + var array = Array(); + for (var i = 0; i != N/2; ++i) + array[i] = i; + src += array.join('/;x=/')+'/; x="'; + src += array.join('";x="')+'";'; + src += 'const some_const = 10'; + eval(src); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-372364.js b/js/src/tests/js1_5/Regress/regress-372364.js new file mode 100644 index 000000000..8117d0c58 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-372364.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 372364; +var summary = 'Incorrect error message "() has no properties"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('See Also bug 365891'); + expect = /TypeError: a\(.+\) (has no properties|is null)/; + try + { + function a(){return null;} a(1)[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + expect = /TypeError: \/a\/.exec\(.+\) (has no properties|is null)/; + try + { + /a/.exec("b")[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-379245.js b/js/src/tests/js1_5/Regress/regress-379245.js new file mode 100644 index 000000000..9e4b46858 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-379245.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 379245; +var summary = 'inline calls'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var fThis; + + function f() + { + fThis = this; + return ({x: f}).x; + } + + f()(); + + if (this !== fThis) + throw "bad this"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-383674.js b/js/src/tests/js1_5/Regress/regress-383674.js new file mode 100644 index 000000000..688e00629 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-383674.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383674; +var summary = 'Statement that implicitly calls toString should not be optimized away as a "useless expression"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + options("strict"); + options("werror"); + + expect = 'toString called'; + actual = 'toString not called'; + try + { + var x = {toString: function() { + actual = 'toString called'; + print(actual); + } + }; + var f = function() { var j = x; j + ""; } + f(); + reportCompare(expect, actual, summary + ': 1'); + } + catch(ex) + { + reportCompare("No Error", ex + "", summary + ': 1'); + } + + actual = 'toString not called'; + try + { + (function() { var a = + ({toString: function(){ + actual = 'toString called'; print(actual)} }); a += ""; })(); + reportCompare(expect, actual, summary + ': 2'); + } + catch(ex) + { + reportCompare("No Error", ex + "", summary + ': 2'); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-383682.js b/js/src/tests/js1_5/Regress/regress-383682.js new file mode 100644 index 000000000..def3c48ee --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-383682.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383682; +var summary = 'eval is too dynamic'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(s) { + return this.eval(s); + } + + expect = 'PASS'; + f("function g() { return('PASS'); }"); + actual = g(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-385393-06.js b/js/src/tests/js1_5/Regress/regress-385393-06.js new file mode 100644 index 000000000..327103f39 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-385393-06.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + true.watch("x", function(){}); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-387951-01.js b/js/src/tests/js1_5/Regress/regress-387951-01.js new file mode 100644 index 000000000..f58892b5f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-387951-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (delete (0 ? 3 : {})); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-387951-02.js b/js/src/tests/js1_5/Regress/regress-387951-02.js new file mode 100644 index 000000000..2c9bf7118 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-387951-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + "" + (function() { if(delete(null?0:{})){[]} }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-387951-03.js b/js/src/tests/js1_5/Regress/regress-387951-03.js new file mode 100644 index 000000000..d614fa92a --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-387951-03.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + switch(delete[null?0:{}]){default:} + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-39309.js b/js/src/tests/js1_5/Regress/regress-39309.js new file mode 100644 index 000000000..28e72f4be --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-39309.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 Sep 2003 + * SUMMARY: Testing concatenation of string + number + * See http://bugzilla.mozilla.org/show_bug.cgi?id=39309 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 39309; +var summary = 'Testing concatenation of string + number'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f(textProp, len) +{ + var i = 0; + while (++i <= len) + { + var name = textProp + i; + actual = name; + } +} + + +status = inSection(1); +f('text', 1); // sets |actual| +expect = 'text1'; +addThis(); + +status = inSection(2); +f('text', 100); // sets |actual| +expect = 'text100'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-396684.js b/js/src/tests/js1_5/Regress/regress-396684.js new file mode 100644 index 000000000..ab265a855 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-396684.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396684; +var summary = 'Function call with stack arena exhausted'; +var actual = ''; +var expect = ''; + +/* + The test case builds a function containing f(0,0,...,0,Math.atan2()) with + enough zero arguments to exhaust the current stack arena fully. Thus, when + Math.atan2 is loaded into the stack, there would be no room for the extra 2 + args required by Math.atan2 and args will be allocated from the new arena. +*/ + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function f() { + return arguments[arguments.length - 1]; +} + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'PASS'; + + var src = "return f(" +Array(10*1000).join("0,")+"Math.atan2());"; + + var result = new Function(src)(); + + if (typeof result != "number" || !isNaN(result)) + actual = "unexpected result: " + result; + else + actual = 'PASS'; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-398085-01.js b/js/src/tests/js1_5/Regress/regress-398085-01.js new file mode 100644 index 000000000..f57f6f022 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-398085-01.js @@ -0,0 +1,745 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 398085; +var summary = 'Do not crash with large switch statement'; +var actual = ''; +var expect = 'PASSED'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + ls("a, taken", "b, taken"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + + +function ls(a, b) { + switch(a) { + case "a, not taken": + // Next line requires 48 bytes: 8 * (getargprop (5 bytes) + add (1 byte)) + // Repeated 700 times: 700 * 48 bytes = 33600 bytes + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + break; + case "a, taken": + switch(b) { + case "b, taken": + actual = 'PASSED'; + } + } +} + + diff --git a/js/src/tests/js1_5/Regress/regress-398085-02.js b/js/src/tests/js1_5/Regress/regress-398085-02.js new file mode 100644 index 000000000..6e2b8ab8d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-398085-02.js @@ -0,0 +1,728 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 398085; +var summary = 'Do not crash with large switch statement'; +var actual = 'PASSED'; +var expect = 'PASSED'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + ls(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + +function ls(a) { + if (a) { + return (actual = "FAIL"); + return (actual = "FAIL"); + return (actual = "FAIL"); + // Next line requires 48 bytes: 8 * getargprop (5 bytes) + 7 add (1 byte) + 1 pop (1 byte) + // Repeated 683 times: 683 * 48 bytes = 32784 bytes + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + a.x + } + return "Everything's fine." + // Comment out the switch statement and the bug disappears. + switch (a) { + case 1: ; + case 2: return; + } +} + diff --git a/js/src/tests/js1_5/Regress/regress-398609.js b/js/src/tests/js1_5/Regress/regress-398609.js new file mode 100644 index 000000000..af12433a0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-398609.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 398609; +var summary = 'Test regression from bug 398609'; +var actual = 'No Error'; +var expect = 'No Error'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(m) { + m = m || Math; + return x(); + + function x() { + return m.sin(0); + } + }; + + var r = f(); + if (r !== Math.sin(0)) + throw "Unexpected result"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-404755.js b/js/src/tests/js1_5/Regress/regress-404755.js new file mode 100644 index 000000000..9a6c158d4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-404755.js @@ -0,0 +1,50 @@ +// |reftest| skip -- unreliable - based on GC timing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 404755; +var summary = 'Do not consume heap when deleting property'; +var actual = 'No leak'; +var expect = 'No leak'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var n = 1 << 22; + var o = {}; + do { + o[0] = 0; + delete o[0]; + } while (--n != 0); + + gc(); + var time = Date.now(); + gc(); + time = Date.now() - time; + + o = {}; + o[0] = 0; + delete o[0]; + gc(); + var time2 = Date.now(); + gc(); + time2 = Date.now() - time2; + print(time+" "+time2); + if (time > 2 && time > time2 * 5) + throw "A possible leak is observed"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-406769.js b/js/src/tests/js1_5/Regress/regress-406769.js new file mode 100644 index 000000000..b6bd73989 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-406769.js @@ -0,0 +1,155 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 406769; +var summary = 'Regression from bug 398609 caused infinite loop'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + +var a0; +var a1; +var a2; +var a3; +var a4; +var a5; +var a6; +var a7; +var a8; +var a9; +var a10; +var a11; +var a12; +var a13; +var a14; +var a15; +var a16; +var a17; +var a18; +var a19; +var a20; +var a21; +var a22; +var a23; +var a24; +var a25; +var a26; +var a27; +var a28; +var a29; +var a30; +var a31; +var a32; +var a33; +var a34; +var a35; +var a36; +var a37; +var a38; +var a39; +var a40; +var a41; +var a42; +var a43; +var a44; +var a45; +var a46; +var a47; +var a48; +var a49; +var a50; +var a51; +var a52; +var a53; +var a54; +var a55; +var a56; +var a57; +var a58; +var a59; +var a60; +var a61; +var a62; +var a63; +var a64; +var a65; +var a66; +var a67; +var a68; +var a69; +var a70; +var a71; +var a72; +var a73; +var a74; +var a75; +var a76; +var a77; +var a78; +var a79; +var a80; +var a81; +var a82; +var a83; +var a84; +var a85; +var a86; +var a87; +var a88; +var a89; +var a90; +var a91; +var a92; +var a93; +var a94; +var a95; +var a96; +var a97; +var a98; +var a99; +var a100; +var a101; +var a102; +var a103; +var a104; +var a105; +var a106; +var a107; +var a108; +var a109; +var a110; +var a111; +var a112; +var a113; +var a114; +var a115; +var a116; +var a117; +var a118; +var a119; +var a120; +var a121; +var a122; +var a123; +var a124; +var a125; +for (var a126 = 1; a126 < ([1,2,3]).length -1; ++a126) + 1; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-407024.js b/js/src/tests/js1_5/Regress/regress-407024.js new file mode 100644 index 000000000..7bc4a7c09 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-407024.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407024; +var summary = 'Do not assert pn3->pn_val.isNumber() || pn3->pn_val.isString() || pn3->pn_val.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval("function f(x) { switch (x) { case Array: return 1; }}"); +var result = f(Array); +if (result !== 1) + throw "Unexpected result: "+uneval(result); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-407957.js b/js/src/tests/js1_5/Regress/regress-407957.js new file mode 100644 index 000000000..ffd05bd42 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-407957.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407957; +var summary = 'Iterator is mutable.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = {}; + var saveIterator = Iterator; + + Iterator = obj; + reportCompare(obj, Iterator, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-410852.js b/js/src/tests/js1_5/Regress/regress-410852.js new file mode 100644 index 000000000..04109b468 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-410852.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 410852; +var summary = 'Valgrind errors in jsemit.cpp'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('Note: You must run this test under valgrind to determine if it passes'); + + try + { + eval('function(){if(t)'); + } + catch(ex) + { + assertEq(ex instanceof SyntaxError, true, "wrong error: " + ex); + } + + reportCompare(true, true, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-416737-01.js b/js/src/tests/js1_5/Regress/regress-416737-01.js new file mode 100644 index 000000000..7321d830e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-416737-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416737; +var summary = 'Do not assert: *pc == JSOP_GETARG'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { (function([]){ function n(){} })(1) }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-416737-02.js b/js/src/tests/js1_5/Regress/regress-416737-02.js new file mode 100644 index 000000000..1d4c43c54 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-416737-02.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416737; +var summary = 'Do not assert: *pc == JSOP_GETARG'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function([]){ function n(){} }; + if (typeof dis == 'function') + { + dis(f); + } + print(f); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-417893.js b/js/src/tests/js1_5/Regress/regress-417893.js new file mode 100644 index 000000000..4a7ce6e1b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-417893.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 417893; +var summary = 'Fast natives must use JS_THIS/JS_THIS_OBJECT'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { var s = function(){}.prototype.toSource; s(); })(); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "No TypeError for Object.prototype.toSource"); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-418540.js b/js/src/tests/js1_5/Regress/regress-418540.js new file mode 100644 index 000000000..f03f98b27 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-418540.js @@ -0,0 +1,62 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418540; +var summary = 'Do not assert: OBJ_IS_NATIVE(obj)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + expect = actual = 'Browser test only - skipped'; + reportCompare(expect, actual, summary); + } + else + { + gDelayTestDriverEnd = true; + window.onload = boom; + } + + exitFunc ('test'); +} + +function boom() +{ + var p; + var b = document.createElement("body"); + var v = document.createElement("div"); + b.getAttribute("id") + v.getAttribute("id") + for (p in v) { } + for (p in b) { } + b.__proto__ = []; + try { aC(v, null); } catch(e) { } + try { aC(b, null); } catch(e) { } + + setTimeout(check, 1000); +} + +function aC(r, n) { r.appendChild(n); } + +function check() +{ + expect = actual = 'No Crash'; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} diff --git a/js/src/tests/js1_5/Regress/regress-419018.js b/js/src/tests/js1_5/Regress/regress-419018.js new file mode 100644 index 000000000..35a4fb832 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-419018.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 419018; +var summary = 'UMR in JSENUMERATE_INIT'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test must be run under valgrind to check if an UMR occurs in slowarray_enumerate'); + + try + { + function parse() { + var a = []; // need array init + a["b"] = 1; // need to set obj property + return a; + } + // var c; // can't declare c + // var d = {}; // can't add this (weird!) + // var d = ""; // nor this + var x = parse(""); // won't crash without string arg (weird!) + // var d = ""; // nor here + for (var o in x) + c[o]; // need to look up o in undefined object + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-419803.js b/js/src/tests/js1_5/Regress/regress-419803.js new file mode 100644 index 000000000..765298c72 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-419803.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 419803; +var summary = 'Do not assert: sprop->parent == scope->lastProp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<2; ++i) ({ p: 5, p: 7 }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-420919.js b/js/src/tests/js1_5/Regress/regress-420919.js new file mode 100644 index 000000000..f58b8d99f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-420919.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 420919; +var summary = 'this.u.v = 1 should report this.u is undefined'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // 1.8 branch reports no properties, trunk reports undefined + expect = /TypeError: this.u is undefined|TypeError: this.u has no properties/; + + try + { + this.u.v = 1; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-422348.js b/js/src/tests/js1_5/Regress/regress-422348.js new file mode 100644 index 000000000..7ae83f4a6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-422348.js @@ -0,0 +1,38 @@ +// |reftest| skip-if(xulRuntime.XPCOMABI.match(/x86_64|aarch64|ppc64|ppc64le|s390x/)) -- On 64-bit, takes forever rather than throwing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 422348; +var summary = 'Proper overflow error reporting'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'InternalError: allocation size overflow'; + try + { + Array(1 << 30).sort(); + actual = 'No Error'; + } + catch (ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-424311.js b/js/src/tests/js1_5/Regress/regress-424311.js new file mode 100644 index 000000000..e2d0adeac --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-424311.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 424311; +var summary = 'Do not assert: entry->kpc == ((PCVCAP_TAG(entry->vcap) > 1) ? (jsbytecode *) JSID_TO_ATOM(id) : cx->fp->regs->pc)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function(){(function(){ constructor=({}); })()})(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-425360.js b/js/src/tests/js1_5/Regress/regress-425360.js new file mode 100644 index 000000000..8d72808ab --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-425360.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 425360; +var summary = 'Do not assert: !cx->throwing'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +function finishtest() +{ + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} + +function throwBlah() +{ + throw 'blah'; +} + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window == 'undefined') +{ + expect = actual = 'Not tested. Requires browser.'; + reportCompare(expect, actual, summary); +} +else +{ + gDelayTestDriverEnd = true; + window.onerror = null; + setTimeout('finishtest()', 1000); + window.onload = (function () { setInterval('throwBlah()', 0); }); + setInterval('foo(', 0); +} + + diff --git a/js/src/tests/js1_5/Regress/regress-426827.js b/js/src/tests/js1_5/Regress/regress-426827.js new file mode 100644 index 000000000..69115b9e7 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-426827.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 426827; +var summary = 'Do not assert: !(CodeSpec[op2].format & JOF_DEL)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('eval()=delete a;'); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-428366.js b/js/src/tests/js1_5/Regress/regress-428366.js new file mode 100644 index 000000000..13a6699fd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-428366.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 428366; +var summary = 'Do not assert deleting eval 16 times'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__proto__.x = eval; +for (i = 0; i < 16; ++i) delete eval; +(function w() { x = 1; })(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-438415-01.js b/js/src/tests/js1_5/Regress/regress-438415-01.js new file mode 100644 index 000000000..5aa6b6bf0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-438415-01.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 438415; +var summary = 'Do not assert: *vp != JSVAL_HOLE'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + [1,,].pop(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-438415-02.js b/js/src/tests/js1_5/Regress/regress-438415-02.js new file mode 100644 index 000000000..24febbc78 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-438415-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 438415; +var summary = 'Do not assert: *vp != JSVAL_HOLE'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'zero'; + Array.prototype[0] = 'zero'; + var a = []; + a.length = 1; + actual = a.pop(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-440926.js b/js/src/tests/js1_5/Regress/regress-440926.js new file mode 100644 index 000000000..463981123 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-440926.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 440926; +var summary = 'Correctly match regexps with special "i" characters'; +var actual = ''; +var expect = 'iI#,iI#;iI#,iI#'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + actual += 'iI\u0130'.replace(/[\u0130]/gi, '#'); + actual += ',' + 'iI\u0130'.replace(/\u0130/gi, '#'); + + actual += ';' + 'iI\u0130'.replace(/[\u0130]/gi, '#'); + actual += ',' + 'iI\u0130'.replace(/\u0130/gi, '#'); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-449627.js b/js/src/tests/js1_5/Regress/regress-449627.js new file mode 100644 index 000000000..f50fd29e2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-449627.js @@ -0,0 +1,114 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 449627; +var summary = 'Crash with JIT in js_FillPropertyCache'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +/************************ BROWSER DETECT (http://www.quirksmode.org/js/detect.html) ************************/ + +if (typeof navigator == 'undefined') +{ + navigator = { + userAgent: "Firefox", + vendor: "Mozilla", + platform: "Mac" + }; +} + +global = this; + +var BrowserDetect = { + init: function _init() + { + this.browser=this.searchString(this.dataBrowser) || "An unknown browser"; + + this.OS= this.searchString(this.dataOS)||"an unknown OS"; + }, + searchString: function _searchString(a) + { + for(var i=0; i < a.length; i++) + { + var b=a[i].string; + var c=a[i].prop; + this.versionSearchString=a[i].versionSearch||a[i].identity; + if(b) + { + if(b.indexOf(a[i].subString)!=-1) + return a[i].identity; + } + else if(c) + return a[i].identity; + } + }, + + searchVersion:function _searchVersion(a) + { + var b=a.indexOf(this.versionSearchString); + if(b==-1) + return; + return parseFloat(a.substring(b+this.versionSearchString.length+1)); + }, + + dataBrowser:[ + { + string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb" + }, + { + string:navigator.vendor,subString:"Apple",identity:"Safari" + }, + { + prop:global.opera,identity:"Opera" + }, + { + string:navigator.vendor,subString:"iCab",identity:"iCab" + }, + { + string:navigator.vendor,subString:"KDE",identity:"Konqueror" + }, + { + string:navigator.userAgent,subString:"Firefox",identity:"Firefox" + }, + { + string:navigator.vendor,subString:"Camino",identity:"Camino" + }, + { + string:navigator.userAgent,subString:"Netscape",identity:"Netscape" + }, + { + string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE" + }, + { + string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv" + }, + { + string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla" + } + ], + dataOS:[ + { + string:navigator.platform,subString:"Win",identity:"Windows" + }, + { + string:navigator.platform,subString:"Mac",identity:"Mac" + }, + { + string:navigator.platform,subString:"Linux",identity:"Linux" + } + ] + }; + +BrowserDetect.init(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-449666.js b/js/src/tests/js1_5/Regress/regress-449666.js new file mode 100644 index 000000000..2703b8ee9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-449666.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 449666; +var summary = 'Do not assert: JSSTRING_IS_FLAT(str_)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var global; + + + if (typeof window == 'undefined') { + global = this; + } + else { + global = window; + } + + if (!global['g']) { + global['g'] = {}; + } + + if (!global['g']['l']) { + global['g']['l'] = {}; + (function() { + function k(a,b){ + var c=a.split(/\./); + var d=global; + for(var e=0;e<c.length-1;e++){ + if(!d[c[e]]){ + d[c[e]]={}; + } + d=d[c[e]]; + } + d[c[c.length-1]]=b; + print("hi"); + } + + function T(a){return "hmm"} + k("g.l.loaded",T); + })(); + + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-450369.js b/js/src/tests/js1_5/Regress/regress-450369.js new file mode 100644 index 000000000..3bb9d28f8 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-450369.js @@ -0,0 +1,310 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 450369; +var summary = 'Crash with JIT and json2.js'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +/* + json2.js + 2007-11-06 + + Public Domain + + See http://www.JSON.org/js.html + + This file creates a global JSON object containing two methods: + + JSON.stringify(value, whitelist) + value any JavaScript value, usually an object or array. + + whitelist an optional that determines how object values are + stringified. + + This method produces a JSON text from a JavaScript value. + There are three possible ways to stringify an object, depending + on the optional whitelist parameter. + + If an object has a toJSON method, then the toJSON() method will be + called. The value returned from the toJSON method will be + stringified. + + Otherwise, if the optional whitelist parameter is an array, then + the elements of the array will be used to select members of the + object for stringification. + + Otherwise, if there is no whitelist parameter, then all of the + members of the object will be stringified. + + Values that do not have JSON representaions, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped, in arrays will be replaced with null. JSON.stringify() + returns undefined. Dates will be stringified as quoted ISO dates. + + Example: + + var text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + JSON.parse(text, filter) + This method parses a JSON text to produce an object or + array. It can throw a SyntaxError exception. + + The optional filter parameter is a function that can filter and + transform the results. It receives each of the keys and values, and + its return value is used instead of the original value. If it + returns what it received, then structure is not modified. If it + returns undefined then the member is deleted. + + Example: + + // Parse the text. If a key contains the string 'date' then + // convert the value to a date. + + myData = JSON.parse(text, function (key, value) { + return key.indexOf('date') >= 0 ? new Date(value) : value; + }); + + This is a reference implementation. You are free to copy, modify, or + redistribute. + + Use your own copy. It is extremely unwise to load third party + code into your pages. +*/ + +/*jslint evil: true */ +/*extern JSON */ + +if (!this.emulatedJSON) { + + emulatedJSON = function () { + + function f(n) { // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + Date.prototype.toJSON = function () { + +// Eventually, this method will be based on the date.toISOString method. + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + + var m = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + function stringify(value, whitelist) { + var a, // The array holding the partial texts. + i, // The loop counter. + k, // The member key. + l, // Length. + r = /["\\\x00-\x1f\x7f-\x9f]/g, + v; // The member value. + + switch (typeof value) { + case 'string': + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe sequences. + + return r.test(value) ? + '"' + value.replace(r, function (a) { + var c = m[a]; + if (c) { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }) + '"' : + '"' + value + '"'; + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + return String(value); + + case 'object': + +// Due to a specification blunder in ECMAScript, +// typeof null is 'object', so watch out for that case. + + if (!value) { + return 'null'; + } + +// If the object has a toJSON method, call it, and stringify the result. + + if (typeof value.toJSON === 'function') { + return stringify(value.toJSON()); + } + a = []; + if (typeof value.length === 'number' && + !(value.propertyIsEnumerable('length'))) { + +// The object is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + l = value.length; + for (i = 0; i < l; i += 1) { + a.push(stringify(value[i], whitelist) || 'null'); + } + +// Join all of the elements together and wrap them in brackets. + + return '[' + a.join(',') + ']'; + } + if (whitelist) { + +// If a whitelist (array of keys) is provided, use it to select the components +// of the object. + + l = whitelist.length; + for (i = 0; i < l; i += 1) { + k = whitelist[i]; + if (typeof k === 'string') { + v = stringify(value[k], whitelist); + if (v) { + a.push(stringify(k) + ':' + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (typeof k === 'string') { + v = stringify(value[k], whitelist); + if (v) { + a.push(stringify(k) + ':' + v); + } + } + } + } + +// Join all of the member texts together and wrap them in braces. + + return '{' + a.join(',') + '}'; + } + return undefined; + } + + return { + stringify: stringify, + parse: function (text, filter) { + var j; + + function walk(k, v) { + var i, n; + if (v && typeof v === 'object') { + for (i in v) { + if (Object.prototype.hasOwnProperty.apply(v, [i])) { + n = walk(i, v[i]); + if (n !== undefined) { + v[i] = n; + } + } + } + } + return filter(k, v); + } + + +// Parsing happens in three stages. In the first stage, we run the text against +// regular expressions that look for non-JSON patterns. We are especially +// concerned with '()' and 'new' because they can cause invocation, and '=' +// because it can cause mutation. But just to be safe, we want to reject all +// unexpected forms. + +// We split the first stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace all backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@'). +replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(:?[eE][+\-]?\d+)?/g, ']'). +replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the second stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional third stage, we recursively walk the new structure, passing +// each name/value pair to a filter function for possible transformation. + + return typeof filter === 'function' ? walk('', j) : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('parseJSON'); + } + }; + }(); +} + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var testPairs = [ + ["{}", {}], + ["[]", []], + ['{"foo":"bar"}', {"foo":"bar"}], + ['{"null":null}', {"null":null}], + ['{"five":5}', {"five":5}], + ] + + var a = []; + for (var i=0; i < testPairs.length; i++) { + var pair = testPairs[i]; + var s = emulatedJSON.stringify(pair[1]) + a[i] = s; + } + print(a.join("\n")); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-450833.js b/js/src/tests/js1_5/Regress/regress-450833.js new file mode 100644 index 000000000..c94a68585 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-450833.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 450833; +var summary = 'TM: Multiple trees per entry point'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 100; + + + function f(i) { + for (var m = 0; m < 20; ++m) + for (var n = 0; n < 100; n += i) + ; + return n; + } + + print(actual = f(1)); + + + reportCompare(expect, actual, summary); + + + print(actual = f(.5)); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-451322.js b/js/src/tests/js1_5/Regress/regress-451322.js new file mode 100755 index 000000000..9ea75e4e6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-451322.js @@ -0,0 +1,37 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451322; +var summary = 'Do not crash with OOM in LirBufWriter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function f() { + for (var i = 0; i < 200000; i++) { + var m = new Function("var k = 0; for (var j = 0; j < 5; j++) { k += j * 2 + 8 / (j+3) * k} return k;"); + m(); + } + } + f(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-451884.js b/js/src/tests/js1_5/Regress/regress-451884.js new file mode 100644 index 000000000..dbff37c64 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-451884.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451884; +var summary = 'Do not crash [@ QuoteString]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function(k){eval("k.y")})(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-451946.js b/js/src/tests/js1_5/Regress/regress-451946.js new file mode 100644 index 000000000..e30606448 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-451946.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451946; +var summary = 'Do not crash with SELinux execheap protection'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test is only valid with SELinux targetted policy with exeheap protection'); + + + var i; for (i = 0; i < 2000000; i++) {;} + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452008.js b/js/src/tests/js1_5/Regress/regress-452008.js new file mode 100644 index 000000000..8c278a033 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452008.js @@ -0,0 +1,151 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452008; +var summary = 'Bad math with JIT'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + +// regression test for Bug 452008 - TM: SRP in Clipperz crypto library fails when JIT (TraceMonkey) is enabled. + + var x = [9385, 32112, 25383, 16317, 30138, 14565, 17812, 24500, 2719, 30174, 3546, 9096, 15352, 19120, 20648, 14334, 7426, 0, 0, 0]; + var n = [27875, 25925, 30422, 12227, 27798, 32170, 10873, 21748, 30629, 26296, 20697, 5125, 4815, 2221, 14392, 23369, 5560, 2, 0, 0]; + var np = 18229; + var expected = [18770, 31456, 17999, 32635, 27508, 29131, 2856, 16233, 5439, 27580, 7093, 18192, 30804, 5472, 8529, 28649, 14852, 0, 0, 0]; + +//globals + bpe=0; //bits stored per array element + mask=0; //AND this with an array element to chop it down to bpe bits + +//initialize the global variables + for (bpe=0; (1<<(bpe+1)) > (1<<bpe); bpe++); //bpe=number of bits in the mantissa on this platform + bpe>>=1; //bpe=number of bits in one element of the array representing the bigInt + mask=(1<<bpe)-1; //AND the mask with an integer to get its bpe least significant bits + + +//the following global variables are scratchpad memory to +//reduce dynamic memory allocation in the inner loop + sa = new Array(0); //used in mont_() + +//do x=y on bigInts x and y. x must be an array at least as big as y (not counting the leading zeros in y). + function copy_(x,y) { + var i; + var k=x.length<y.length ? x.length : y.length; + for (i=0;i<k;i++) + x[i]=y[i]; + for (i=k;i<x.length;i++) + x[i]=0; + } + +//do x=y on bigInt x and integer y. + function copyInt_(x,n) { + var i,c; + for (c=n,i=0;i<x.length;i++) { + x[i]=c & mask; + c>>=bpe; + } + } + +//is x > y? (x and y both nonnegative) + function greater(x,y) { + var i; + var k=(x.length<y.length) ? x.length : y.length; + + for (i=x.length;i<y.length;i++) + if (y[i]) + return 0; //y has more digits + + for (i=y.length;i<x.length;i++) + if (x[i]) + return 1; //x has more digits + + for (i=k-1;i>=0;i--) + if (x[i]>y[i]) + return 1; + else if (x[i]<y[i]) + return 0; + return 0; + } + + +//do x=x*y*Ri mod n for bigInts x,y,n, +// where Ri = 2**(-kn*bpe) mod n, and kn is the +// number of elements in the n array, not +// counting leading zeros. +//x must be large enough to hold the answer. +//It's OK if x and y are the same variable. +//must have: +// x,y < n +// n is odd +// np = -(n^(-1)) mod radix + function mont_(x,y,n,np) { + var i,j,c,ui,t; + var kn=n.length; + var ky=y.length; + + if (sa.length!=kn) + sa=new Array(kn); + + for (;kn>0 && n[kn-1]==0;kn--); //ignore leading zeros of n + for (;ky>0 && y[ky-1]==0;ky--); //ignore leading zeros of y + + copyInt_(sa,0); + + //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large keys + for (i=0; i<kn; i++) { + t=sa[0]+x[i]*y[0]; + ui=((t & mask) * np) & mask; //the inner "& mask" is needed on Macintosh MSIE, but not windows MSIE + c=(t+ui*n[0]) >> bpe; + t=x[i]; + + //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe + for (j=1;j<ky;j++) { + c+=sa[j]+t*y[j]+ui*n[j]; + sa[j-1]=c & mask; + c>>=bpe; + } + for (;j<kn;j++) { + c+=sa[j]+ui*n[j]; + sa[j-1]=c & mask; + c>>=bpe; + } + sa[j-1]=c & mask; + } + + if (!greater(n,sa)) + sub_(sa,n); + copy_(x,sa); + } + + mont_(x, x, n, np); + + var passed = expected.length == x.length; + for (var i = 0; i < expected.length; i++) { + if (passed) + passed = expected[i] == x[i]; + } + print(passed); + + + expect = true; + actual = passed; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452170.js b/js/src/tests/js1_5/Regress/regress-452170.js new file mode 100644 index 000000000..813102bda --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452170.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452170; +var summary = 'Do not assert with JIT: (*m != JSVAL_INT) || isInt32(*vp)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) { (-0).toString(); } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452189.js b/js/src/tests/js1_5/Regress/regress-452189.js new file mode 100644 index 000000000..811fe5fbd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452189.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Geoff Garen + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452189; +var summary = "Don't shadow a readonly or setter proto-property"; +var expect = "PASS"; +var actual = "FAIL"; + +function c() { + this.x = 3; +} + + +new c; +Object.prototype.__defineSetter__('x', function(){ actual = expect; }) +new c; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-452333.js b/js/src/tests/js1_5/Regress/regress-452333.js new file mode 100644 index 000000000..41d919bde --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452333.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452333; +var summary = 'Do not crash with JIT: @ js_SkipWhiteSpace'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { (typeof 3/0); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452336.js b/js/src/tests/js1_5/Regress/regress-452336.js new file mode 100644 index 000000000..2ade29ca0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452336.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452336; +var summary = 'Do not assert with JIT: (slot) < (uint32_t)(obj)->dslots[-1]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) { [1].x++; } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452346.js b/js/src/tests/js1_5/Regress/regress-452346.js new file mode 100644 index 000000000..e3aeefe86 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452346.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452346; +var summary = 'Do not crash: @ Balloc'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<2;++j) (0.1).toPrecision(30); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452495.js b/js/src/tests/js1_5/Regress/regress-452495.js new file mode 100644 index 000000000..ae07f37a1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452495.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452495; +var summary = 'Do not crash with JIT: @ TraceRecorder::getThis'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +for (var j = 0; j < 4; ++j) { try { new 1(this); } catch(e) { } } + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-452573-01.js b/js/src/tests/js1_5/Regress/regress-452573-01.js new file mode 100644 index 000000000..bd5171f4c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452573-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452573; +var summary = 'Do not assert with JIT: boxed.isUndefined() || boxed.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for(var j=0;j<5;++j) typeof void /x/; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452573-02.js b/js/src/tests/js1_5/Regress/regress-452573-02.js new file mode 100644 index 000000000..7d5faf8e1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452573-02.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452573; +var summary = 'Do not assert with JIT: "(((rmask(rr) & FpRegs) != 0))"'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for(var j=0;j<5;++j) typeof void 1; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452713.js b/js/src/tests/js1_5/Regress/regress-452713.js new file mode 100644 index 000000000..c7c4dd9a9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452713.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452713; +var summary = 'Do not assert with JIT: "Should not move data from GPR to XMM": false'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 5; ++j) { if (''[-1]) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452724-01.js b/js/src/tests/js1_5/Regress/regress-452724-01.js new file mode 100644 index 000000000..1c8c55a25 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452724-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452724; +var summary = 'Do not assert with JIT: (rmask(rr) & FpRegs) != 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j=0;j<5;++j) { (0/0) in this; } })() + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452724-02.js b/js/src/tests/js1_5/Regress/regress-452724-02.js new file mode 100644 index 000000000..135d402d5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452724-02.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452724; +var summary = 'Do not crash with JIT: @TraceRecorder::getThis'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j=0;j<5;++j) { (0/0) in this; } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452742-01.js b/js/src/tests/js1_5/Regress/regress-452742-01.js new file mode 100644 index 000000000..69fdd2ba6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452742-01.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452742; +var summary = 'Do not do overzealous eval inside function optimization in BindNameToSlot'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Error'; + + var obj = { x: -100 }; + + function a(x) + { + var orig_x = x; + var orig_obj_x = obj.x; + + with (obj) { eval("x = x + 10"); } + + if (x !== orig_x) + throw "Unexpected mutation of x: " + x; + if (obj.x !== orig_obj_x + 10) + throw "Unexpected mutation of obj.x: " + obj.x; + } + + try + { + a(0); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452742-02.js b/js/src/tests/js1_5/Regress/regress-452742-02.js new file mode 100644 index 000000000..7a5e9a5b4 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452742-02.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452742; +var summary = 'Do not do overzealous eval inside function optimization in BindNameToSlot'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = ''; + + var obj = { arguments: [-100] }; + + function a() + { + with (obj) { return eval("arguments[0]"); } + } + + function b() + { + var result; + eval('with (obj) { result = eval("arguments[0]"); };'); + return result; + } + + try + { + var result = a(); + if (result !== -100) + throw "Bad result " + result; + + var result = b(); + if (result !== -100) + throw "Bad result " + result; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452853.js b/js/src/tests/js1_5/Regress/regress-452853.js new file mode 100644 index 000000000..7e9b3f6cf --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452853.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452853; +var summary = 'Do not crash in simple loop with array'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j=0; j<4; ++j) { var a = ["", ""]; a[0] * a[1]; } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452884-01.js b/js/src/tests/js1_5/Regress/regress-452884-01.js new file mode 100644 index 000000000..cfd68fa55 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452884-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452884; +var summary = 'Do not crash in switch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j=0;j<5;++j) { switch(1.1) { case NaN: case 2: } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-452884-02.js b/js/src/tests/js1_5/Regress/regress-452884-02.js new file mode 100644 index 000000000..3a433c9f2 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-452884-02.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452884; +var summary = 'Do not crash in switch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j=0;j<5;++j) { switch(1.1) { case 2: case NaN: } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-453024.js b/js/src/tests/js1_5/Regress/regress-453024.js new file mode 100644 index 000000000..f89a4793f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-453024.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453024; +var summary = 'Do not assert: vp + 2 + argc <= (jsval *) cx->stackPool.current->avail'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +if (typeof window == 'undefined') +{ + reportCompare(true, true, summary + ': test requires browser.'); +} +else +{ + gDelayTestDriverEnd = true; + var j = 0; + + function test() + { + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < 2000; ++i) { + var ns = document.createElementNS("http://www.w3.org/1999/xhtml", "script"); + var nt = document.createTextNode("++j"); + ns.appendChild(nt); + document.body.appendChild(ns); + } + + gDelayTestDriverEnd = false; + + reportCompare(expect, actual, summary); + + jsTestDriverEnd(); + + exitFunc ('test'); + } + + window.addEventListener('load', test, false); + +} diff --git a/js/src/tests/js1_5/Regress/regress-453173.js b/js/src/tests/js1_5/Regress/regress-453173.js new file mode 100644 index 000000000..804a5cf68 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-453173.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453173; +var summary = 'Do not Crash with JIT [@ TraceRecorder::record_JSOP_ENDINIT] with "[,]"'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var i; + + + for(i=0;i<4;++i) [,]; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-453397.js b/js/src/tests/js1_5/Regress/regress-453397.js new file mode 100644 index 000000000..ec7835f55 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-453397.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453397; +var summary = 'Do not assert with JIT: script->main <= target && target < script->code + script->length'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function computeEscapeSpeed(real) { + for (var j = 1; j < 4; ++j) { + if (real > 2) { + } + } + } + + const numRows = 4; + const numCols = 4; + var realStep = 1.5; + for (var i = 0, curReal = -2.1; + i < numCols; + ++i, curReal += realStep) { + for (var j = 0; j < numRows; ++j) { + computeEscapeSpeed(curReal); + } + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-453701.js b/js/src/tests/js1_5/Regress/regress-453701.js new file mode 100644 index 000000000..a068e5cdc --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-453701.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453701; +var summary = 'Do not assert with JIT: (rmask(rr) & FpRegs) != 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { (1).hasOwnProperty(""); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-453747.js b/js/src/tests/js1_5/Regress/regress-453747.js new file mode 100644 index 000000000..04e57f7a9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-453747.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453747; +var summary = 'Do not assert with JIT: boxed.isUndefined() || boxed.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function(){ + var a = []; + var s = 10; + for (var i = 0; i < s; ++i) + a[i] = 1; + a[4*s-1] = 2; + for (var i = s+1; i < s+4; ++i) + typeof a[i]; + })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-454682.js b/js/src/tests/js1_5/Regress/regress-454682.js new file mode 100644 index 000000000..ee459d080 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-454682.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454682; +var summary = 'Do not crash with JIT in MatchRegExp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var a = new String("foo"); + for (i = 0; i < 300; i++) { + a.match(/bar/); + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-454981.js b/js/src/tests/js1_5/Regress/regress-454981.js new file mode 100644 index 000000000..2e87ba6bf --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-454981.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454981; +var summary = 'Do not assert with JIT: size_t(p - cx->fp->slots) < cx->fp->script->nslots'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function f1() { + function f0() { return arguments[0]; } + for (var i = 0; i < 4; i++) f0('a'); + } + f1(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-455605.js b/js/src/tests/js1_5/Regress/regress-455605.js new file mode 100644 index 000000000..73f4fe804 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-455605.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455605; +var summary = 'Do not assert with JIT: "need a way to EOT now, since this is trace end": 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) { switch(0/0) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-455748.js b/js/src/tests/js1_5/Regress/regress-455748.js new file mode 100644 index 000000000..f96270682 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-455748.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455748; +var summary = 'Do not assert with JIT: Should not move data from GPR to XMM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 5; ++j) { if([1][-0]) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-455758-01.js b/js/src/tests/js1_5/Regress/regress-455758-01.js new file mode 100644 index 000000000..619002ec5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-455758-01.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455758; +var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { var t = 3 % (-0); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-455758-02.js b/js/src/tests/js1_5/Regress/regress-455758-02.js new file mode 100644 index 000000000..213f5edd5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-455758-02.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455758; +var summary = 'Do not crash: divide by zero'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { 3 % (-0); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-455775.js b/js/src/tests/js1_5/Regress/regress-455775.js new file mode 100644 index 000000000..03e9f5d47 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-455775.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455775; +var summary = 'Do not assert: cx->fp->flags & JSFRAME_EVAL'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { var c; eval("new (c ? 1 : {});"); })(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456470.js b/js/src/tests/js1_5/Regress/regress-456470.js new file mode 100644 index 000000000..6d6d98b8b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456470.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456470; +var summary = 'TM: Make sure JSOP_DEFLOCALFUN pushes the right function object.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function x() { + function a() { + return true; + } + return a(); + } + + for (var i = 0; i < 10; ++i) + x(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456477-01.js b/js/src/tests/js1_5/Regress/regress-456477-01.js new file mode 100644 index 000000000..9e46cf444 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456477-01.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456477; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with (0/0)%(-1)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 5; ++j) { var t = (0 / 0) % (-1); } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456477-02.js b/js/src/tests/js1_5/Regress/regress-456477-02.js new file mode 100644 index 000000000..4e0139cc7 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456477-02.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456477; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with (0/0)%(-1)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { (0 / 0) % (-1); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456494.js b/js/src/tests/js1_5/Regress/regress-456494.js new file mode 100644 index 000000000..e3a8649c7 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456494.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456494; +var summary = 'Do not crash with apply and argc > nargs'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function k(s) + { + } + function f() + { + for (i = 0; i < 10; i++) + { + k.apply(this, arguments); + } + } + f(1); + + + if (typeof this.tracemonkey != 'undefined') + { + for (var p in this.tracemonkey) + { + print(p + ':' + this.tracemonkey[p]); + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456540-01.js b/js/src/tests/js1_5/Regress/regress-456540-01.js new file mode 100644 index 000000000..5c16774ef --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456540-01.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456540; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with ((-1) % ""'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 5; ++j) { var t = ((-1) % "" ); } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-456540-02.js b/js/src/tests/js1_5/Regress/regress-456540-02.js new file mode 100644 index 000000000..1731b3d03 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-456540-02.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456540; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with ((-1) % ""'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { for (var j = 0; j < 5; ++j) { ((-1) % "" ); } })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-457065-03.js b/js/src/tests/js1_5/Regress/regress-457065-03.js new file mode 100644 index 000000000..e00f23620 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-457065-03.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457065; +var summary = 'Do not assert: !fp->callee || fp->thisp == fp->argv[-1].toObjectOrNull()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + (function() { + new function (){ for (var x = 0; x < 3; ++x){} }; + })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-457456.js b/js/src/tests/js1_5/Regress/regress-457456.js new file mode 100644 index 000000000..2e3a52ece --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-457456.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457456; +var summary = 'Do not assert with JIT: cond->isCond()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) { if (undefined < false) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-457778.js b/js/src/tests/js1_5/Regress/regress-457778.js new file mode 100644 index 000000000..d9f1c4b22 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-457778.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457778; +var summary = 'Do not assert with JIT: cond->isCond()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) { if (undefined < false) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-458851.js b/js/src/tests/js1_5/Regress/regress-458851.js new file mode 100644 index 000000000..843bb4f2a --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-458851.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 458851; +var summary = 'TM: for-in loops should not skip every other value sometimes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function f() { + var a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; + var x = 0; + for (var i in a) { + i = parseInt(i); + x++; + } + print(actual = x); +} + +expect = 16; +f(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-459085.js b/js/src/tests/js1_5/Regress/regress-459085.js new file mode 100644 index 000000000..e00c7d736 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-459085.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459085; +var summary = 'Do not assert with JIT: Should not move data from GPR to XMM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var m = new Number(3); + function foo() { for (var i=0; i<20;i++) m.toString(); } + foo(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-459628.js b/js/src/tests/js1_5/Regress/regress-459628.js new file mode 100644 index 000000000..f0d4f6c38 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-459628.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459628; +var summary = 'Do not assert: STOBJ_GET_SLOT(obj, map->freeslot).isUndefined()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + +(function() { + for (var odjoff = 0; odjoff < 4; ++odjoff) { + new Date()[0] = 3; + } +})(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-459990.js b/js/src/tests/js1_5/Regress/regress-459990.js new file mode 100644 index 000000000..e06b88072 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-459990.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459990; +var summary = 'Do not crash with if (true && a && b) { }'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + if (true && a && b) { } + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-460024.js b/js/src/tests/js1_5/Regress/regress-460024.js new file mode 100644 index 000000000..4794b2799 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-460024.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460024; +var summary = 'Regression from bug 451154'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'PASS'; + actual = 'FAIL'; + + + var js = 'Function.prototype.inherits = function(a) {' + + ' actual = "PASS";' + + '};' + + 'function f() { }' + + 'f.inherits();'; + function doeval(callback) { callback(js) }; + doeval(eval); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-460117.js b/js/src/tests/js1_5/Regress/regress-460117.js new file mode 100644 index 000000000..6fed6b467 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-460117.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460117; +var summary = 'TM: hasOwnProperty with JIT'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function t(o, proplist) { + var props=proplist.split(/\s+/g); + for (var i=0, len=props.length; i<len; i++) { + if (o.hasOwnProperty(props[i])) { + // do something + } else { + actual += (props[i]+': '+o.hasOwnProperty(props[i])); + } + } + }; + + t({ bar: 123, baz: 123, quux: 123 }, 'bar baz quux'); + + reportCompare(expect, actual, summary + ' : nonjit'); + + + t({ bar: 123, baz: 123, quux: 123 }, 'bar baz quux'); + + + reportCompare(expect, actual, summary + ' : jit'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-460886-01.js b/js/src/tests/js1_5/Regress/regress-460886-01.js new file mode 100644 index 000000000..dd063d697 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-460886-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460886; +var summary = 'Do not asssert: end >= begin'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j = 0; j < 5; ++j) { "".substring(5); } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-460886-02.js b/js/src/tests/js1_5/Regress/regress-460886-02.js new file mode 100644 index 000000000..c23ba07b9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-460886-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460886; +var summary = 'Do not crash @ js_NewStringCopy'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j = 0; j < 5; ++j) { "".substring(-60000); } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-461307.js b/js/src/tests/js1_5/Regress/regress-461307.js new file mode 100644 index 000000000..28e6ed4fe --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-461307.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 461307; +var summary = 'Do not crash @ QuoteString'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + print(function() { for(/x/[''] in []) { } }); + + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-461723.js b/js/src/tests/js1_5/Regress/regress-461723.js new file mode 100644 index 000000000..c0916a474 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-461723.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 461723; +var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 30; ++j) { (0 + void 0) && 0; } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-462292.js b/js/src/tests/js1_5/Regress/regress-462292.js new file mode 100644 index 000000000..8867ea45c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-462292.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462292; +var summary = 'Do not assert: pn->pn_op == JSOP_CALL || pn->pn_op == JSOP_EVAL'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + [].apply() = 1; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-462879.js b/js/src/tests/js1_5/Regress/regress-462879.js new file mode 100644 index 000000000..d271945d1 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-462879.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462879; +var summary = 'Do not assert: UPVAR_FRAME_SKIP(uva->vector[i]) == 1'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function(c){eval("eval('c.x')")})(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-462989.js b/js/src/tests/js1_5/Regress/regress-462989.js new file mode 100644 index 000000000..881f6ee3e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-462989.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462989; +var summary = 'Do not assert: need a way to EOT now, since this is trace end'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function a() +{ + "".split(";"); + this.v = true; +} + +function b() +{ + var z = { t: function() { for (var i = 0; i < 5; i++) { a(); } } }; + z.t(); +} + +b(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-463259.js b/js/src/tests/js1_5/Regress/regress-463259.js new file mode 100644 index 000000000..f38995706 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-463259.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 463259; +var summary = 'Do not assert: VALUE_IS_FUNCTION(cx, fval)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +try +{ + (function(){ + eval("(function(){ for (var j=0;j<4;++j) if (j==3) undefined(); })();"); + })(); +} +catch(ex) +{ +} + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-463782.js b/js/src/tests/js1_5/Regress/regress-463782.js new file mode 100644 index 000000000..d2805a58b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-463782.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 463782; +var summary = 'Do not assert: "need a way to EOT now, since this is trace end": 0'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function dateCheck() { + return true; +} +function dateToString() +{ + if (!this.dtsReturnValue) + this.dtsReturnValue = "200811080616"; + return this.dtsReturnValue + } + +function placeAd2() { + var adClasses = { + "": { + templateCheck: function () { + var foo = ({ + allianz:{ + where:["intl/turningpoints"], + when:["200805010000/200901010000"], + what:["!234x60", "!bigbox_2", "!leaderboard_2", "!88x31"] + }, + trendMicro:{ + where:["techbiz/tech/threatmeter"], + when:["200806110000/200812310000"], + what:["leaderboard"] + }, + rolex_bb:{ + where:["politics/transitions"], + when:["200811050000/200901312359"], + what:["!bigbox"] + } + }); + + for (a in foo) { + if (dateCheck("", dateToString())) { + for (var c = 0; c < 1; c++) { + } + } + } + return true; + } + } + }; + + adClasses[""].templateCheck(); +} + +placeAd2(); + + +reportCompare(expect, actual, summary); + diff --git a/js/src/tests/js1_5/Regress/regress-464334.js b/js/src/tests/js1_5/Regress/regress-464334.js new file mode 100644 index 000000000..9991af06e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-464334.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 464334; +var summary = 'Do not assert: (size_t) (fp->regs->sp - fp->slots) <= fp->script->nslots'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function g() + { + gc(); + } + + var a = []; + for (var i = 0; i != 20; ++i) + a.push(i); + g.apply(this, a); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-464862.js b/js/src/tests/js1_5/Regress/regress-464862.js new file mode 100644 index 000000000..cf555c76f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-464862.js @@ -0,0 +1,123 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 464862; +var summary = 'Do not assert: ( int32_t(delta) == uint8_t(delta) )'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function ygTreeView(id) { + this.init(id); +} + +ygTreeView.prototype.init = function (id) {this.root = new ygRootNode(this);}; + +function ygNode() {} + +ygNode.prototype.nextSibling = null; + +ygNode.prototype.init = function (_32, _33, _34) { + this.children = []; + this.expanded = _34; + if (_33) { + this.tree = _33.tree; + this.depth = _33.depth + 1; + _33.appendChild(this); + } +}; + +ygNode.prototype.appendChild = function (_35) { + if (this.hasChildren()) { + var sib = this.children[this.children.length - 1]; + } + this.children[this.children.length] = _35; +}; + +ygNode.prototype.getElId = function () {}; + +ygNode.prototype.getNodeHtml = function () {}; + +ygNode.prototype.getToggleElId = function () {}; + +ygNode.prototype.getStyle = function () { + var loc = this.nextSibling ? "t" : "l"; + var _39 = "n"; + if (this.hasChildren(true)) {} +}; + +ygNode.prototype.hasChildren = function () {return this.children.length > 0;}; + +ygNode.prototype.getHtml = function () { + var sb = []; + sb[sb.length] = "<div class=\"ygtvitem\" id=\"" + this.getElId() + "\">"; + sb[sb.length] = this.getNodeHtml(); + sb[sb.length] = this.getChildrenHtml(); +}; + +ygNode.prototype.getChildrenHtml = function () { + var sb = []; + if (this.hasChildren(true) && this.expanded) { + sb[sb.length] = this.renderChildren(); + } +}; + +ygNode.prototype.renderChildren = function () {return this.completeRender();}; + +ygNode.prototype.completeRender = function () { + var sb = []; + for (var i = 0; i < this.children.length; ++i) { + sb[sb.length] = this.children[i].getHtml(); + } +}; + +ygRootNode.prototype = new ygNode; + +function ygRootNode(_48) { + this.init(null, null, true); +} + +ygTextNode.prototype = new ygNode; + +function ygTextNode(_49, _50, _51) { + this.init(_49, _50, _51); + this.setUpLabel(_49); +} + +ygTextNode.prototype.setUpLabel = function (_52) { + if (typeof _52 == "string") {} + if (_52.target) {} + this.labelElId = "ygtvlabelel" + this.index; +}; + +ygTextNode.prototype.getNodeHtml = function () { + var sb = new Array; + sb[sb.length] = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"; + sb[sb.length] = "<tr>"; + for (i = 0; i < this.depth; ++i) {} + sb[sb.length] = " id=\"" + this.getToggleElId() + "\""; + sb[sb.length] = " class=\"" + this.getStyle() + "\""; + if (this.hasChildren(true)) {} + sb[sb.length] = " id=\"" + this.labelElId + "\""; +}; + +function buildUserTree() { + userTree = new ygTreeView("userTree"); + addMenuNode(userTree, "N", "navheader"); + addMenuNode(userTree, "R", "navheader"); + addMenuNode(userTree, "S", "navheader"); +} + +function addMenuNode(tree, label, styleClass) { + new ygTextNode({}, tree.root, false); +} + +buildUserTree(); +userTree.root.getHtml(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-465013.js b/js/src/tests/js1_5/Regress/regress-465013.js new file mode 100644 index 000000000..ca9a1038c --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465013.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465013; +var summary = ''; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'bgcolor="dummy" quality="dummy" allowScriptAccess="dummy" '; + + + print((function(x) { + var ja = ""; + var ka = {bgcolor:"#FFFFFF", quality:"high", allowScriptAccess:"always"}; + for (var la in ka) { + ja +=[la] + "=\"" + x/*ka[la]*/ + "\" "; + } + return actual = ja; + })("dummy")); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465132.js b/js/src/tests/js1_5/Regress/regress-465132.js new file mode 100644 index 000000000..273fed73a --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465132.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465132; +var summary = 'TM: Mathematical constants should be constant'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var constants = ['E', 'LN10', 'LN2', 'LOG2E', 'LOG10E', 'PI', 'SQRT1_2', 'SQRT2']; + + for (var j = 0; j < constants.length; j++) + { + expect = Math[constants[j]]; + + for(i=0;i<9;++i) + ++Math[constants[j]]; + + for(i=0;i<9;++i) + eval('++Math.' + constants[j]); + + actual = Math[constants[j]]; + + reportCompare(expect, actual, summary + ' Math.' + constants[j]); + } + + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465133.js b/js/src/tests/js1_5/Regress/regress-465133.js new file mode 100644 index 000000000..0f21a5603 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465133.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465133; +var summary = '{} < {}'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'false,false,false,false,false,'; + actual = ''; + + + for (var i=0;i<5;++i) actual += ({} < {}) + ','; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465135.js b/js/src/tests/js1_5/Regress/regress-465135.js new file mode 100644 index 000000000..1b5e87abf --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465135.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465135; +var summary = 'true << true'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '2,2,2,2,2,'; + actual = ''; + + + for (var i=0;i<5;++i) actual += (true << true) + ','; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465136.js b/js/src/tests/js1_5/Regress/regress-465136.js new file mode 100644 index 000000000..5756f44fe --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465136.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465136; +var summary = 'false == ""'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'true,true,true,true,true,'; + actual = ''; + + + for (var i=0;i<5;++i) actual += (false == '') + ','; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465137.js b/js/src/tests/js1_5/Regress/regress-465137.js new file mode 100644 index 000000000..3789a00d0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465137.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465137; +var summary = '!NaN is not false'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'falsy,falsy,falsy,falsy,falsy,'; + actual = ''; + + + for (var i=0;i<5;++i) actual += (!(NaN) ? "falsy" : "truthy") + ','; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465262.js b/js/src/tests/js1_5/Regress/regress-465262.js new file mode 100644 index 000000000..0d016b192 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465262.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465262; +var summary = 'truthiness of (3 > null)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + expect = 'true,true,true,true,true,'; + + for(j=0;j<5;++j) print(actual += "" + (3 > null) + ',') + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465272.js b/js/src/tests/js1_5/Regress/regress-465272.js new file mode 100644 index 000000000..d544e4f1d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465272.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465272; +var summary = 'subtraction'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + expect = '3,3,3,3,3,'; + + for (j=0;j<5;++j) print(actual += "" + ((5) - 2) + ','); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465347.js b/js/src/tests/js1_5/Regress/regress-465347.js new file mode 100644 index 000000000..6a4d6081e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465347.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465347; +var summary = 'Test integer to id in js_Int32ToId'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var o; + + o = new Array(); + + expect = undefined; + o[0xffffffff] = 'end'; + actual = o[-1]; + reportCompare(expect, actual, summary + ': 1'); + + expect = 42; + o['42'] = 42; + actual = o[42]; + reportCompare(expect, actual, summary + ': 2'); + + // + + o = new Object(); + + expect = undefined; + o[0xffffffff] = 'end'; + actual = o[-1]; + reportCompare(expect, actual, summary + ': 3'); + + expect = 42; + o['42'] = 42; + actual = o[42]; + reportCompare(expect, actual, summary + ': 4'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-465366.js b/js/src/tests/js1_5/Regress/regress-465366.js new file mode 100644 index 000000000..5170e23c0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-465366.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465366; +var summary = 'TM: JIT: error with multiplicative loop'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function f() + { + var k = 1; + for (var n = 0; n < 2; n++) { + k = (k * 10); + } + return k; + } + f(); + print(f()); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-466262.js b/js/src/tests/js1_5/Regress/regress-466262.js new file mode 100644 index 000000000..9fe16b12b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-466262.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 466262; +var summary = 'Do not assert: f == f->root'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var e = 1; + for (var d = 0; d < 3; ++d) { + if (d == 2) { + e = ""; + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-466747.js b/js/src/tests/js1_5/Regress/regress-466747.js new file mode 100644 index 000000000..6fa133ac9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-466747.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 466747; +var summary = 'TM: Do not assert: fp->slots + fp->script->nfixed + ' + + 'js_ReconstructStackDepth(cx, fp->script, fp->regs->pc) == fp->regs->sp'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + expect = actual = 'Test skipped: browser only'; + reportCompare(expect, actual, summary); + } + else + { + gDelayTestDriverEnd = true; + + + function newScriptWithLoop(m) + { + var ns = document.createElement("script"); + var nt = document.createTextNode("for (var q = 0; q < " + m + "; ++q) { }"); + ns.appendChild(nt); + return ns; + } + + function boom() + { + var div = document.createElement("div"); + div.appendChild(newScriptWithLoop(7)); + div.appendChild(newScriptWithLoop(1)); + document.body.appendChild(div); + + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + } + + window.addEventListener('load', boom, false); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-469044.js b/js/src/tests/js1_5/Regress/regress-469044.js new file mode 100644 index 000000000..f41a07ecb --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-469044.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469044; +var summary = 'type unstable globals'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '---000---000'; + actual = ''; + + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + print(actual += "---"); + for (var a = 0; a < 3; ++a) { + c <<= c; + print(actual += "" + c); + } + } + reportCompare(expect, actual, summary + ': 1'); + + expect = '00000000'; + actual = ''; + + print(""); + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + for (var a = 0; a < 3; ++a) { + c <<= c; + print(actual += "" + c); + } + print(actual += c); + } + reportCompare(expect, actual, summary + ': 2'); + + actual = ''; + print(""); + + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + for (var a = 0; a < 3; ++a) { + c <<= c; + Math; + print(actual += "" + c); + } + print(actual += c); + } + reportCompare(expect, actual, summary + ': 3'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-470061.js b/js/src/tests/js1_5/Regress/regress-470061.js new file mode 100644 index 000000000..dedb7cbaa --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-470061.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470061; +var summary = 'TM: Do not assert: cx->fp->regs->pc == f->ip && f->root == f'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function x (w, z) { + var h = 0; + var q = 0; + while (q < 300) { + while (w) { + } + ++q; + if (q % 4 == 1) { + h = Math.ceil(z); + } + } + } + + x(false, 40); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-470187-01.js b/js/src/tests/js1_5/Regress/regress-470187-01.js new file mode 100644 index 000000000..4abaff88b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-470187-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470187; +var summary = 'Do not assert: entry->kpc == (jsbytecode*) atoms[index]'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<3;++j) ({valueOf: function(){return 2}}) - /x/; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-470187-02.js b/js/src/tests/js1_5/Regress/regress-470187-02.js new file mode 100644 index 000000000..c474c7690 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-470187-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470187; +var summary = 'Do not assert: ATOM_IS_STRING(atom)'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<3;++j) ({valueOf: function(){return 2}}) - []; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-470758-01.js b/js/src/tests/js1_5/Regress/regress-470758-01.js new file mode 100644 index 000000000..06e06ce29 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-470758-01.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Do not crash with eval upvars'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { var k; eval("for (var k in {});") })() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-470758-02.js b/js/src/tests/js1_5/Regress/regress-470758-02.js new file mode 100644 index 000000000..86eb4b440 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-470758-02.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Promote evald initializer into upvar'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 5; + + (function(){var x;eval("for (x = 0; x < 5; x++);");print(actual = x);})(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-472533.js b/js/src/tests/js1_5/Regress/regress-472533.js new file mode 100644 index 000000000..a772f0c35 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-472533.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 472533; +var summary = 'Do not crash with loop, replace, regexp'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j = 0; j < 4; ++j) ''.replace('', /x/); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-475645-01.js b/js/src/tests/js1_5/Regress/regress-475645-01.js new file mode 100644 index 000000000..6a5ad9fc5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-475645-01.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 475645; +var summary = 'Do not crash @ nanojit::LIns::isop'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + linkarr = new Array(); + picarr = new Array(); + textarr = new Array(); + var f=161; + var t=27; + var pics = ""; + var links = ""; + var texts = ""; + var s = f+t; + var d = "1"; + picarr[2] = "2"; + for(i=1;i<picarr.length;i++) + { + if(pics=="") pics = picarr[i]; + else{ + if(picarr[i].indexOf("jpg")==-1 && picarr[i].indexOf("JPG")==-1) picarr[i] = d; + } + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-475645-02.js b/js/src/tests/js1_5/Regress/regress-475645-02.js new file mode 100644 index 000000000..6085e6a54 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-475645-02.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 475645; +var summary = 'Do not crash @ nanojit::LIns::isop'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + if (typeof window != 'undefined') + { + var q = (function () { }); + window.addEventListener("load", q, false); + window.onerror = q; + arr = new Array(); + pic = r = new Array; + h = t = 7; + var pics = ""; + pic[2] = ""; + for (i=1; i < pic.length; i++) + { + try + { + if(pics=="") + pics=pic[i]; + else + (pic[i]-1 & pic[i].i("") == 1); + } + catch(ex) + { + } + arr[i]=''; + } + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-476049.js b/js/src/tests/js1_5/Regress/regress-476049.js new file mode 100644 index 000000000..e3a4d1020 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-476049.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 476049; +var summary = 'JSOP_DEFVAR enables gvar optimization for non-permanent properties'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// This test requires either two input files in the shell or two +// script blocks in the browser. + +if (typeof window == 'undefined') +{ + print(expect = actual = 'Test skipped'); +} +else +{ + document.write( + '<script type="text/javascript">' + + 'for (var i = 0; i != 1000; ++i)' + + ' this["a"+i] = 0;' + + 'eval("var x");' + + 'for (var i = 0; i != 1000; ++i)' + + ' delete this["a"+i];' + + '<\/script>' + ); + + document.write( + '<script type="text/javascript">' + + 'var x;' + + 'eval("delete x;");' + + 'x={};' + + '<\/script>' + ); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-476192.js b/js/src/tests/js1_5/Regress/regress-476192.js new file mode 100644 index 000000000..4e2020560 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-476192.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 476192; +var summary = 'TM: Do not assert: JSVAL_TAG(v) == JSVAL_STRING'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var global; + + (function(){ + var ad = {present: ""}; + var params = ['present', 'a', 'present', 'a', 'present', 'a', 'present']; + for (var j = 0; j < params.length; j++) { + global = ad[params[j]]; + } + })(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-477733.js b/js/src/tests/js1_5/Regress/regress-477733.js new file mode 100644 index 000000000..fe97c62a6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-477733.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 477733; +var summary = 'TM: Do not assert: !(fp->flags & JSFRAME_POP_BLOCKS)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function g() { + []; + } + + try { + d.d.d; + } catch(e) { + void (function(){}); + } + + for (var o in [1, 2, 3]) { + g(); + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-477758.js b/js/src/tests/js1_5/Regress/regress-477758.js new file mode 100644 index 000000000..67f6547d0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-477758.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 477758; +var summary = 'TM: RegExp source'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function map(array, func) { + var result = []; + for(var i=0;i<array.length;i++) { + result.push(func(array[i])); + } + return result; + } + + function run() { + var patterns = [/foo/, /bar/]; + function getSource(r) { return r.source; } + var patternStrings = map(patterns, getSource); + print(actual += [patterns[0].source, patternStrings[0]] + ''); + } + + expect = 'foo,foo'; + + for (var i = 0; i < 4; i++) + { + actual = ''; + run(); + reportCompare(expect, actual, summary + ': ' + i); + } + + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-478314.js b/js/src/tests/js1_5/Regress/regress-478314.js new file mode 100644 index 000000000..3d17892da --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-478314.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 478314; +var summary = 'Do not assert: "need a way to EOT now, since this is trace end": 0'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var z = 0; z < 2; ++z) { switch(false & 1e-81) {} } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-479353.js b/js/src/tests/js1_5/Regress/regress-479353.js new file mode 100644 index 000000000..6448df0ea --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-479353.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 479353; +var summary = 'Do not assert: (uint32_t)(index_) < atoms_->length'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (new Function("({}), arguments;"))(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-480147.js b/js/src/tests/js1_5/Regress/regress-480147.js new file mode 100644 index 000000000..a954c2c5d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-480147.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 480147; +var summary = 'TM: Do not assert: cx->bailExit'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var w = [/a/, /b/, /c/, {}]; + for (var i = 0; i < w.length; ++i) + "".replace(w[i], ""); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-480244.js b/js/src/tests/js1_5/Regress/regress-480244.js new file mode 100644 index 000000000..59625b885 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-480244.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 480244; +var summary = 'Do not assert: isInt32(*p)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function outer() { + var v = 10.234; + for (var i = 0; i < 0xff; ++i) { + inner(v); + } + } + + var g = 0; + var h = 0; + + function inner() { + var v = 10; + for (var k = 0; k < 0xff; ++k) { + g++; + if (g & 0xff == 0xff) + h++; + } + return h; + } + + outer(); + print("g=" + g + " h=" + h); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-481436.js b/js/src/tests/js1_5/Regress/regress-481436.js new file mode 100644 index 000000000..8520e2ffa --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-481436.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 481436; +var summary = 'TM: Do not crash @ FlushNativeStackFrame/JS_XDRNewMem'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function search(m, n) { + if (m.name == n) + return m; + for (var i = 0; i < m.items.length; i++) + if (m.items[i].type == 'M') + search(m.items[i], n); +} + +function crash() { + for (var i = 0; i < 2; i++) { + var root = {name: 'root', type: 'M', items: [{}]}; + search(root, 'x'); + root.items.push({name: 'tim', type: 'M', items: []}); + search(root, 'x'); + search(root, 'x'); + } +} + +crash(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-482421.js b/js/src/tests/js1_5/Regress/regress-482421.js new file mode 100644 index 000000000..740ba6538 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-482421.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 482421; +var summary = 'TM: Do not assert: vp >= StackBase(fp)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function f() +{ + var x; + var foo = "for (var z = 0; z < 2; ++z) { new Object(new String(this), x)}"; + foo.replace(/\n/g, " "); + eval(foo); +} +f(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-482783.js b/js/src/tests/js1_5/Regress/regress-482783.js new file mode 100644 index 000000000..d1da5bfe9 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-482783.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 482783; +var summary = 'TM: Do not crash @ js_ConcatStrings'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + [].concat(); + for (var x = 0; x < 3; ++x) { (null + [,,]); } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/Regress/regress-483103.js b/js/src/tests/js1_5/Regress/regress-483103.js new file mode 100644 index 000000000..00f9866aa --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-483103.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 483103; +var summary = 'TM: Do not assert: p->isQuad()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var t = new String(""); + for (var j = 0; j < 3; ++j) { + var e = t["-1"]; + } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-501124.js b/js/src/tests/js1_5/Regress/regress-501124.js new file mode 100644 index 000000000..6f961c66e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-501124.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 501124; +var summary = 'Crypotographic login routines'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var hexVal = "00000000000000000000000000000000DEADBABE"; + var nblk = (((hexVal.length/2) + 8) >> 6) + 1; + + var blks = new Array(nblk * 16); + + for(var i = 0; i < nblk * 16; i++) + blks[i] = 0; + + for(i = 0; i < hexVal.length; i++) { + blks[i >> 3] |= ("0x"+hexVal.charAt(i)) << (28 - (i % 8) * 4); + } + + expect = '0,0,0,0,-559039810,0,0,0,0,0,0,0,0,0,0,0'; + actual = blks + ''; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-503860.js b/js/src/tests/js1_5/Regress/regress-503860.js new file mode 100644 index 000000000..d29bcfddd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-503860.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 503860; +var summary = "Don't shadow a readonly or setter proto-property"; +var expect = "PASS"; +var actual = "FAIL"; +var a = {y: 1}; + +function B(){} +B.prototype.__defineSetter__('x', function setx(val) { actual = expect; }); +var b = new B; +b.y = 1; + +var arr = [a, b]; // same shape prior to bug 497789 fix +for (var obj of arr) + obj.x = 2; // should call b's setter but doesn't + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/regress-504078.js b/js/src/tests/js1_5/Regress/regress-504078.js new file mode 100644 index 000000000..10b3457f5 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-504078.js @@ -0,0 +1,51 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 504078; +var summary = 'Iterations over global object'; +var actual = ''; +var expect = ''; + +var g = (typeof window == 'undefined' ? this : window); + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function keys(obj) { + for (var prop in obj) { + } + } + + var data = { a : 1, b : 2 }; + var data2 = { a : 1, b : 2 }; + + function boot() { + keys(data); + keys(g); + keys(data2); // this call dies with "var prop is not a function" + print('no error'); + } + + try + { + boot(); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-506567.js b/js/src/tests/js1_5/Regress/regress-506567.js new file mode 100644 index 000000000..e78dfe1db --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-506567.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 506567; +var summary = 'Do not crash with watched variables'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof clearInterval == 'undefined') + { + clearInterval = (function () {}); + } + + var obj = new Object(); + obj.test = null; + obj.watch("test", (function(prop, oldval, newval) + { + if(false) + { + var test = newval % oldval; + var func = (function(){clearInterval(myInterval);}); + } + })); + + obj.test = 'null'; + print(obj.test); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-511859.js b/js/src/tests/js1_5/Regress/regress-511859.js new file mode 100644 index 000000000..dc8af3a61 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-511859.js @@ -0,0 +1,150 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 22 Aug 2009 + * SUMMARY: Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem + * See http://bugzilla.mozilla.org/show_bug.cgi?id=511859 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 511859; +var summary = 'Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect = ''; +var expectedvalues = []; +var arg; +/* + * The patch for http://bugzilla.mozilla.org/show_bug.cgi?id=511859 + * defined this value to be the result of an overlong UTF-8 sequence - + */ + +var EX="(Exception thrown)"; + +function getActual(s) +{ + try { + return decodeURI(s); + } catch (e) { + return EX; + } +} + +//Phase1: overlong sequences +expect = EX; +arg = "%C1%BF"; +status = "Overlong 2byte U+7f :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%E0%9F%BF"; +status = "Overlong 3byte U+7ff :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%F0%88%80%80"; +status = "Overlong 4byte U+8000 :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%F0%8F%BF%BF"; +status = "Overlong 4byte U+ffff :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%F0%80%C0%80%80"; +status = "Overlong 5byte U+20000 :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%F8%84%8F%BF%BF"; +status = "Overlong 5byte U+10FFFF :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%FC%80%84%8F%BF%BF"; +status = "Overlong 6byte U+10FFFF :" + arg; +actual = getActual(arg); +addThis(); + +//Phase 2:Out of Unicode range +arg = "%F4%90%80%80%80"; +status = "4byte 0x110000 :" + arg; +actual = getActual(arg); +addThis(); +arg = "%F8%84%90%80%80"; +status = "5byte 0x110000 :" + arg; +actual = getActual(arg); +addThis(); + +arg = "%FC%80%84%90%80%80"; +status = "6byte 0x110000 :" + arg; +actual = getActual(arg); +addThis(); + +//Phase 3:Valid sequences must be decoded correctly +arg = "%7F"; +status = "valid sequence U+7F :" + arg; +actual = getActual("%7F"); +expect = "\x7f"; +addThis(); + +arg = "%C2%80"; +status = "valid sequence U+80 :" + arg; +actual = getActual(arg); +expect = "\x80"; +addThis(); + +arg = "%E0%A0%80"; +status = "valid sequence U+800 :" + arg; +actual = getActual("%E0%A0%80"); +expect = "\u0800"; +addThis(); + +arg = "%F0%90%80%80" +status = "valid sequence U+10000 :" + arg; +actual = getActual(arg); +expect = "\uD800\uDC00"; +addThis(); + +arg = "%F4%8F%BF%BF"; +status = "valid sequence U+10FFFF :" + arg; +actual = getActual(arg); +expect = "\uDBFF\uDFFF"; +addThis(); + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-57043.js b/js/src/tests/js1_5/Regress/regress-57043.js new file mode 100644 index 000000000..ad1a3cd61 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-57043.js @@ -0,0 +1,79 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 03 December 2000 + * + * + * SUMMARY: This test arose from Bugzilla bug 57043: + * "Negative integers as object properties: strange behavior!" + * + * We check that object properties may be indexed by signed + * numeric literals, as in assignments like obj[-1] = 'Hello' + * + * NOTE: it should not matter whether we provide the literal with + * quotes around it or not; e.g. these should be equivalent: + * + * obj[-1] = 'Hello' + * obj['-1'] = 'Hello' + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 57043; +var summary = 'Indexing object properties by signed numerical literals -' + var statprefix = 'Adding a property to test object with an index of '; +var statsuffix = ', testing it now -'; +var propprefix = 'This is property '; +var obj = new Object(); +var status = ''; var actual = ''; var expect = ''; var value = ''; + + +// various indices to try - +var index = + [-1073741825, -1073741824, -1073741823, -5000, -507, -3, -2, -1, -0, 0, 1, 2, 3, 1073741823, 1073741824, 1073741825]; + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j in index) {testProperty(index[j]);} + + exitFunc ('test'); +} + + +function testProperty(i) +{ + status = getStatus(i); + + // try to assign a property using the given index - + obj[i] = value = (propprefix + i); + + // try to read the property back via the index (as number) - + expect = value; + actual = obj[i]; + reportCompare(expect, actual, status); + + // try to read the property back via the index as string - + expect = value; + actual = obj[String(i)]; + reportCompare(expect, actual, status); +} + +function positive(n) { return 1 / n > 0; } + +function getStatus(i) +{ + return statprefix + + (positive(i) ? i : "-" + -i) + + statsuffix; +} diff --git a/js/src/tests/js1_5/Regress/regress-58116.js b/js/src/tests/js1_5/Regress/regress-58116.js new file mode 100644 index 000000000..39a934cbd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-58116.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 58116; +var summary = 'Compute Daylight savings time correctly regardless of year'; +var actual = ''; +var expect = ''; +var status; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = (new Date(2005, 7, 1).getTimezoneOffset()); + +status = summary + ' ' + inSection(1) + ' 1970-07-1 '; +actual = (new Date(1970, 7, 1).getTimezoneOffset()); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' 1965-07-1 '; +actual = (new Date(1965, 7, 1).getTimezoneOffset()); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' 0000-07-1 '; +actual = (new Date(0, 7, 1).getTimezoneOffset()); +reportCompare(expect, actual, status); diff --git a/js/src/tests/js1_5/Regress/regress-68498-001.js b/js/src/tests/js1_5/Regress/regress-68498-001.js new file mode 100644 index 000000000..abc579373 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-68498-001.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 15 Feb 2001 + * + * SUMMARY: var self = global JS object, outside any eval, is DontDelete + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=68498 + * See http://bugzilla.mozilla.org/showattachment.cgi?attach_id=25251 + * + * Brendan: + * + * "Demonstrate that variable statement outside any eval creates a + * DontDelete property of the global object" + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 68498; +var summary ='Testing that variable statement outside any eval creates' + + ' a DontDelete property of the global object'; + + +// To be pedantic, use a variable named 'self' to capture the global object - +// conflicts with window.self in browsers +var _self = this; +var actual = (delete _self); +var expect =false; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + reportCompare(expect, actual, summary); + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-68498-002.js b/js/src/tests/js1_5/Regress/regress-68498-002.js new file mode 100644 index 000000000..2ea387a67 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-68498-002.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 15 Feb 2001 + * + * SUMMARY: create a Deletable local variable using eval + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=68498 + * See http://bugzilla.mozilla.org/showattachment.cgi?attach_id=25251 + * + * Brendan: + * + * "Demonstrate the creation of a Deletable local variable using eval" + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 68498; +var summary = 'Creating a Deletable local variable using eval'; +var statprefix = '; currently at expect['; +var statsuffix = '] within test -'; +var actual = [ ]; +var expect = [ ]; + + +// Capture a reference to the global object - +var self = this; + +// This function is the heart of the test - +function f(s) {eval(s); actual[0]=y; return delete y;} + + +// Set the actual-results array. The next line will set actual[0] and actual[1] in one shot +actual[1] = f('var y = 42'); +actual[2] = 'y' in self && y; + +// Set the expected-results array - +expect[0] = 42; +expect[1] = true; +expect[2] = false; + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i in expect) + { + reportCompare(expect[i], actual[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return (summary + statprefix + i + statsuffix); +} diff --git a/js/src/tests/js1_5/Regress/regress-68498-003.js b/js/src/tests/js1_5/Regress/regress-68498-003.js new file mode 100644 index 000000000..5fb18fe3b --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-68498-003.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 15 Feb 2001 + * + * SUMMARY: calling obj.eval(str) + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=68498 + * See http://bugzilla.mozilla.org/showattachment.cgi?attach_id=25251 + * + * Brendan: + * + * "Backward compatibility: support calling obj.eval(str), which evaluates + * str using obj as the scope chain and variable object." + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 68498; +var summary = 'Testing calling obj.eval(str)'; +var statprefix = '; currently at expect['; +var statsuffix = '] within test -'; +var actual = [ ]; +var expect = [ ]; + + +// Capture a reference to the global object - +var self = this; + +// This function is the heart of the test - +function f(s) {self.eval(s); return y;} + + +// Set the actual-results array - +actual[0] = f('var y = 43'); +actual[1] = 'y' in self && y; +actual[2] = delete y; +actual[3] = 'y' in self; + +// Set the expected-results array - +expect[0] = 43; +expect[1] = 43; +expect[2] = true; +expect[3] = false; + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i in expect) + { + reportCompare(expect[i], actual[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return (summary + statprefix + i + statsuffix); +} diff --git a/js/src/tests/js1_5/Regress/regress-68498-004.js b/js/src/tests/js1_5/Regress/regress-68498-004.js new file mode 100644 index 000000000..e4ae75d6d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-68498-004.js @@ -0,0 +1,99 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 15 Feb 2001 + * + * SUMMARY: self.eval(str) inside a function + * NOTE: 'self' is just a variable used to capture the global JS object. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=68498 + * See http://bugzilla.mozilla.org/showattachment.cgi?attach_id=25251 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=69441 (!!!) + * + * Brendan: + * + * "ECMA-262 Edition 3, 10.1.3 requires a FunctionDeclaration parsed as part + * of a Program by eval to create a property of eval's caller's variable object. + * This test evals in the body of a with statement, whose scope chain *is* + * relevant to the effect of parsing the FunctionDeclaration." + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 68498; +var summary = 'Testing self.eval(str) inside a function'; +var statprefix = '; currently at expect['; +var statsuffix = '] within test -'; +var sToEval=''; +var actual=[ ]; +var expect=[ ]; + + +// Capture a reference to the global object - +var self = this; + +// You shouldn't see this global variable's value in any printout - +var x = 'outer'; + +// This function is the heart of the test - +function f(o,s,x) {with(o) eval(s); return z;}; + +// Run-time statements to pass to the eval inside f +sToEval += 'actual[0] = typeof g;' +sToEval += 'function g(){actual[1]=(typeof w == "undefined" || w); return x};' +sToEval += 'actual[2] = w;' +sToEval += 'actual[3] = typeof g;' +sToEval += 'var z=g();' + +// Set the actual-results array. The next line will set actual[0] - actual[4] in one shot +actual[4] = f({w:44}, sToEval, 'inner'); +actual[5] = 'z' in self && z; + + +/* Set the expected-results array. + * + * Sample issue: why do we set expect[4] = 'inner'? Look at actual[4]... + * 1. The return value of f equals z, which is not defined at compile-time + * 2. At run-time (via with(o) eval(s) inside f), z is defined as the return value of g + * 3. At run-time (via with(o) eval(s) inside f), g is defined to return x + * 4. In the scope of with(o), x is undefined + * 5. Farther up the scope chain, x can be located as an argument of f + * 6. The value of this argument at run-time is 'inner' + * 7. Even farther up the scope chain, the name x can be found as a global variable + * 8. The value of this global variable is 'outer', but we should NOT have gone + * this far up the scope chain to find x...therefore we expect 'inner' + */ +expect[0] = 'function'; +expect[1] = 44; +expect[2] = 44; +expect[3] = 'function'; +expect[4] = 'inner'; +expect[5] = false; + + + +//------------------------------------------------------------------------------------------------ +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i in expect) + { + reportCompare(expect[i], actual[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return (summary + statprefix + i + statsuffix); +} diff --git a/js/src/tests/js1_5/Regress/regress-69607.js b/js/src/tests/js1_5/Regress/regress-69607.js new file mode 100644 index 000000000..5cb3d2f2f --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-69607.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 21 Feb 2001 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=69607 + * + * SUMMARY: testing that we don't crash on trivial JavaScript + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 69607; +var summary = "Testing that we don't crash on trivial JavaScript"; +var var1; +var var2; +var var3; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* + * The crash this bug reported was caused by precisely these lines + * placed in top-level code (i.e. not wrapped inside a function) - + */ +if(false) +{ + var1 = 0; +} +else +{ + var2 = 0; +} + +if(false) +{ + var3 = 0; +} + +reportCompare('No Crash', 'No Crash', ''); + diff --git a/js/src/tests/js1_5/Regress/regress-71107.js b/js/src/tests/js1_5/Regress/regress-71107.js new file mode 100644 index 000000000..9018da02e --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-71107.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 06 Mar 2001 + * + * SUMMARY: Propagate heavyweightness back up the function-nesting + * chain. See http://bugzilla.mozilla.org/show_bug.cgi?id=71107 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 71107; +var summary = 'Propagate heavyweightness back up the function-nesting chain.'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var actual = outer()()(); //call the return of calling the return of outer() + var expect = 5; + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + + +function outer () { + var outer_var = 5; + + function inner() { + function way_inner() { + return outer_var; + } + return way_inner; + } + return inner; +} diff --git a/js/src/tests/js1_5/Regress/regress-76054.js b/js/src/tests/js1_5/Regress/regress-76054.js new file mode 100644 index 000000000..99e9c4b12 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-76054.js @@ -0,0 +1,126 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 16 May 2001 + * + * SUMMARY: Regression test for bug 76054 + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=76054 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=78706 + * All String HTML methods should be LOWER case - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 76054; +var summary = 'Testing that String HTML methods produce all lower-case'; +var statprefix = 'Currently testing String.'; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var s = 'xyz'; + +status = 'anchor()'; +actual = s.anchor(); +expect = actual.toLowerCase(); +addThis(); + +status = 'big()'; +actual = s.big(); +expect = actual.toLowerCase(); +addThis(); + +status = 'blink()'; +actual = s.blink(); +expect = actual.toLowerCase(); +addThis(); + +status = 'bold()'; +actual = s.bold(); +expect = actual.toLowerCase(); +addThis(); + +status = 'italics()'; +actual = s.italics(); +expect = actual.toLowerCase(); +addThis(); + +status = 'fixed()'; +actual = s.fixed(); +expect = actual.toLowerCase(); +addThis(); + +status = 'fontcolor()'; +actual = s.fontcolor(); +expect = actual.toLowerCase(); +addThis(); + +status = 'fontsize()'; +actual = s.fontsize(); +expect = actual.toLowerCase(); +addThis(); + +status = 'link()'; +actual = s.link(); +expect = actual.toLowerCase(); +addThis(); + +status = 'small()'; +actual = s.small(); +expect = actual.toLowerCase(); +addThis(); + +status = 'strike()'; +actual = s.strike(); +expect = actual.toLowerCase(); +addThis(); + +status = 'sub()'; +actual = s.sub(); +expect = actual.toLowerCase(); +addThis(); + +status = 'sup()'; +actual = s.sup(); +expect = actual.toLowerCase(); +addThis(); + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusitems[i]; +} diff --git a/js/src/tests/js1_5/Regress/regress-80981.js b/js/src/tests/js1_5/Regress/regress-80981.js new file mode 100644 index 000000000..51b6ae844 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-80981.js @@ -0,0 +1,3111 @@ +// |reftest| slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 Nov 2001 + * SUMMARY: Regression test for bug 80981. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=80981 + * "Need extended jump bytecode to avoid "script too large" errors, etc." + * + * Before this bug was fixed, the script below caused a run-time error because + * its switch statement was too big. After the fix, SpiderMonkey should compile + * this script just fine. The same fix has not been made in Rhino, however, + * so it will continue to error there... + * + * If you ever run this test against an old SpiderMonkey shell to see the bug, + * you should run it interactively: i.e. launch the JS shell manually, and load + * the test manually. Do not run it via the test driver jsDriverl.pl. Why? - + * before the fix for bug 97646, the JS shell would error on this script, but + * would NOT give non-0 exit code. As a result, the test driver couldn't detect + * the error (it looks for non-0 exit codes). + * + */ +//----------------------------------------------------------------------------- +var i2 = 3011; +var n = new Array (i2); +var err_num = 0; +var i = 0; +var j = 0; +var k = 0; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + b (); + b4 (); + print('Number of errors = ' + err_num); +} + + +function b() +{ + b4 (); + b_after (); + + for (i=0; i<i2; i++) {n[i] = 0;} + i = 0; + + while (k++ <= i2) + { + switch (j = (k*73)%i2) + { + case 0: if (n[0]++ > 0) check ('a string 0'); break; + case 1: if (n[1]++ > 0) check ('a string 1'); break; + case 2: if (n[2]++ > 0) check ('a string 2'); break; + case 3: if (n[3]++ > 0) check ('a string 3'); break; + case 4: if (n[4]++ > 0) check ('a string 4'); break; + case 5: if (n[5]++ > 0) check ('a string 5'); break; + case 6: if (n[6]++ > 0) check ('a string 6'); break; + case 7: if (n[7]++ > 0) check ('a string 7'); break; + case 8: if (n[8]++ > 0) check ('a string 8'); break; + case 9: if (n[9]++ > 0) check ('a string 9'); break; + case 10: if (n[10]++ > 0) check ('a string 10'); break; + case 11: if (n[11]++ > 0) check ('a string 11'); break; + case 12: if (n[12]++ > 0) check ('a string 12'); break; + case 13: if (n[13]++ > 0) check ('a string 13'); break; + case 14: if (n[14]++ > 0) check ('a string 14'); break; + case 15: if (n[15]++ > 0) check ('a string 15'); break; + case 16: if (n[16]++ > 0) check ('a string 16'); break; + case 17: if (n[17]++ > 0) check ('a string 17'); break; + case 18: if (n[18]++ > 0) check ('a string 18'); break; + case 19: if (n[19]++ > 0) check ('a string 19'); break; + case 20: if (n[20]++ > 0) check ('a string 20'); break; + case 21: if (n[21]++ > 0) check ('a string 21'); break; + case 22: if (n[22]++ > 0) check ('a string 22'); break; + case 23: if (n[23]++ > 0) check ('a string 23'); break; + case 24: if (n[24]++ > 0) check ('a string 24'); break; + case 25: if (n[25]++ > 0) check ('a string 25'); break; + case 26: if (n[26]++ > 0) check ('a string 26'); break; + case 27: if (n[27]++ > 0) check ('a string 27'); break; + case 28: if (n[28]++ > 0) check ('a string 28'); break; + case 29: if (n[29]++ > 0) check ('a string 29'); break; + case 30: if (n[30]++ > 0) check ('a string 30'); break; + case 31: if (n[31]++ > 0) check ('a string 31'); break; + case 32: if (n[32]++ > 0) check ('a string 32'); break; + case 33: if (n[33]++ > 0) check ('a string 33'); break; + case 34: if (n[34]++ > 0) check ('a string 34'); break; + case 35: if (n[35]++ > 0) check ('a string 35'); break; + case 36: if (n[36]++ > 0) check ('a string 36'); break; + case 37: if (n[37]++ > 0) check ('a string 37'); break; + case 38: if (n[38]++ > 0) check ('a string 38'); break; + case 39: if (n[39]++ > 0) check ('a string 39'); break; + case 40: if (n[40]++ > 0) check ('a string 40'); break; + case 41: if (n[41]++ > 0) check ('a string 41'); break; + case 42: if (n[42]++ > 0) check ('a string 42'); break; + case 43: if (n[43]++ > 0) check ('a string 43'); break; + case 44: if (n[44]++ > 0) check ('a string 44'); break; + case 45: if (n[45]++ > 0) check ('a string 45'); break; + case 46: if (n[46]++ > 0) check ('a string 46'); break; + case 47: if (n[47]++ > 0) check ('a string 47'); break; + case 48: if (n[48]++ > 0) check ('a string 48'); break; + case 49: if (n[49]++ > 0) check ('a string 49'); break; + case 50: if (n[50]++ > 0) check ('a string 50'); break; + case 51: if (n[51]++ > 0) check ('a string 51'); break; + case 52: if (n[52]++ > 0) check ('a string 52'); break; + case 53: if (n[53]++ > 0) check ('a string 53'); break; + case 54: if (n[54]++ > 0) check ('a string 54'); break; + case 55: if (n[55]++ > 0) check ('a string 55'); break; + case 56: if (n[56]++ > 0) check ('a string 56'); break; + case 57: if (n[57]++ > 0) check ('a string 57'); break; + case 58: if (n[58]++ > 0) check ('a string 58'); break; + case 59: if (n[59]++ > 0) check ('a string 59'); break; + case 60: if (n[60]++ > 0) check ('a string 60'); break; + case 61: if (n[61]++ > 0) check ('a string 61'); break; + case 62: if (n[62]++ > 0) check ('a string 62'); break; + case 63: if (n[63]++ > 0) check ('a string 63'); break; + case 64: if (n[64]++ > 0) check ('a string 64'); break; + case 65: if (n[65]++ > 0) check ('a string 65'); break; + case 66: if (n[66]++ > 0) check ('a string 66'); break; + case 67: if (n[67]++ > 0) check ('a string 67'); break; + case 68: if (n[68]++ > 0) check ('a string 68'); break; + case 69: if (n[69]++ > 0) check ('a string 69'); break; + case 70: if (n[70]++ > 0) check ('a string 70'); break; + case 71: if (n[71]++ > 0) check ('a string 71'); break; + case 72: if (n[72]++ > 0) check ('a string 72'); break; + case 73: if (n[73]++ > 0) check ('a string 73'); break; + case 74: if (n[74]++ > 0) check ('a string 74'); break; + case 75: if (n[75]++ > 0) check ('a string 75'); break; + case 76: if (n[76]++ > 0) check ('a string 76'); break; + case 77: if (n[77]++ > 0) check ('a string 77'); break; + case 78: if (n[78]++ > 0) check ('a string 78'); break; + case 79: if (n[79]++ > 0) check ('a string 79'); break; + case 80: if (n[80]++ > 0) check ('a string 80'); break; + case 81: if (n[81]++ > 0) check ('a string 81'); break; + case 82: if (n[82]++ > 0) check ('a string 82'); break; + case 83: if (n[83]++ > 0) check ('a string 83'); break; + case 84: if (n[84]++ > 0) check ('a string 84'); break; + case 85: if (n[85]++ > 0) check ('a string 85'); break; + case 86: if (n[86]++ > 0) check ('a string 86'); break; + case 87: if (n[87]++ > 0) check ('a string 87'); break; + case 88: if (n[88]++ > 0) check ('a string 88'); break; + case 89: if (n[89]++ > 0) check ('a string 89'); break; + case 90: if (n[90]++ > 0) check ('a string 90'); break; + case 91: if (n[91]++ > 0) check ('a string 91'); break; + case 92: if (n[92]++ > 0) check ('a string 92'); break; + case 93: if (n[93]++ > 0) check ('a string 93'); break; + case 94: if (n[94]++ > 0) check ('a string 94'); break; + case 95: if (n[95]++ > 0) check ('a string 95'); break; + case 96: if (n[96]++ > 0) check ('a string 96'); break; + case 97: if (n[97]++ > 0) check ('a string 97'); break; + case 98: if (n[98]++ > 0) check ('a string 98'); break; + case 99: if (n[99]++ > 0) check ('a string 99'); break; + case 100: if (n[100]++ > 0) check ('a string 100'); break; + case 101: if (n[101]++ > 0) check ('a string 101'); break; + case 102: if (n[102]++ > 0) check ('a string 102'); break; + case 103: if (n[103]++ > 0) check ('a string 103'); break; + case 104: if (n[104]++ > 0) check ('a string 104'); break; + case 105: if (n[105]++ > 0) check ('a string 105'); break; + case 106: if (n[106]++ > 0) check ('a string 106'); break; + case 107: if (n[107]++ > 0) check ('a string 107'); break; + case 108: if (n[108]++ > 0) check ('a string 108'); break; + case 109: if (n[109]++ > 0) check ('a string 109'); break; + case 110: if (n[110]++ > 0) check ('a string 110'); break; + case 111: if (n[111]++ > 0) check ('a string 111'); break; + case 112: if (n[112]++ > 0) check ('a string 112'); break; + case 113: if (n[113]++ > 0) check ('a string 113'); break; + case 114: if (n[114]++ > 0) check ('a string 114'); break; + case 115: if (n[115]++ > 0) check ('a string 115'); break; + case 116: if (n[116]++ > 0) check ('a string 116'); break; + case 117: if (n[117]++ > 0) check ('a string 117'); break; + case 118: if (n[118]++ > 0) check ('a string 118'); break; + case 119: if (n[119]++ > 0) check ('a string 119'); break; + case 120: if (n[120]++ > 0) check ('a string 120'); break; + case 121: if (n[121]++ > 0) check ('a string 121'); break; + case 122: if (n[122]++ > 0) check ('a string 122'); break; + case 123: if (n[123]++ > 0) check ('a string 123'); break; + case 124: if (n[124]++ > 0) check ('a string 124'); break; + case 125: if (n[125]++ > 0) check ('a string 125'); break; + case 126: if (n[126]++ > 0) check ('a string 126'); break; + case 127: if (n[127]++ > 0) check ('a string 127'); break; + case 128: if (n[128]++ > 0) check ('a string 128'); break; + case 129: if (n[129]++ > 0) check ('a string 129'); break; + case 130: if (n[130]++ > 0) check ('a string 130'); break; + case 131: if (n[131]++ > 0) check ('a string 131'); break; + case 132: if (n[132]++ > 0) check ('a string 132'); break; + case 133: if (n[133]++ > 0) check ('a string 133'); break; + case 134: if (n[134]++ > 0) check ('a string 134'); break; + case 135: if (n[135]++ > 0) check ('a string 135'); break; + case 136: if (n[136]++ > 0) check ('a string 136'); break; + case 137: if (n[137]++ > 0) check ('a string 137'); break; + case 138: if (n[138]++ > 0) check ('a string 138'); break; + case 139: if (n[139]++ > 0) check ('a string 139'); break; + case 140: if (n[140]++ > 0) check ('a string 140'); break; + case 141: if (n[141]++ > 0) check ('a string 141'); break; + case 142: if (n[142]++ > 0) check ('a string 142'); break; + case 143: if (n[143]++ > 0) check ('a string 143'); break; + case 144: if (n[144]++ > 0) check ('a string 144'); break; + case 145: if (n[145]++ > 0) check ('a string 145'); break; + case 146: if (n[146]++ > 0) check ('a string 146'); break; + case 147: if (n[147]++ > 0) check ('a string 147'); break; + case 148: if (n[148]++ > 0) check ('a string 148'); break; + case 149: if (n[149]++ > 0) check ('a string 149'); break; + case 150: if (n[150]++ > 0) check ('a string 150'); break; + case 151: if (n[151]++ > 0) check ('a string 151'); break; + case 152: if (n[152]++ > 0) check ('a string 152'); break; + case 153: if (n[153]++ > 0) check ('a string 153'); break; + case 154: if (n[154]++ > 0) check ('a string 154'); break; + case 155: if (n[155]++ > 0) check ('a string 155'); break; + case 156: if (n[156]++ > 0) check ('a string 156'); break; + case 157: if (n[157]++ > 0) check ('a string 157'); break; + case 158: if (n[158]++ > 0) check ('a string 158'); break; + case 159: if (n[159]++ > 0) check ('a string 159'); break; + case 160: if (n[160]++ > 0) check ('a string 160'); break; + case 161: if (n[161]++ > 0) check ('a string 161'); break; + case 162: if (n[162]++ > 0) check ('a string 162'); break; + case 163: if (n[163]++ > 0) check ('a string 163'); break; + case 164: if (n[164]++ > 0) check ('a string 164'); break; + case 165: if (n[165]++ > 0) check ('a string 165'); break; + case 166: if (n[166]++ > 0) check ('a string 166'); break; + case 167: if (n[167]++ > 0) check ('a string 167'); break; + case 168: if (n[168]++ > 0) check ('a string 168'); break; + case 169: if (n[169]++ > 0) check ('a string 169'); break; + case 170: if (n[170]++ > 0) check ('a string 170'); break; + case 171: if (n[171]++ > 0) check ('a string 171'); break; + case 172: if (n[172]++ > 0) check ('a string 172'); break; + case 173: if (n[173]++ > 0) check ('a string 173'); break; + case 174: if (n[174]++ > 0) check ('a string 174'); break; + case 175: if (n[175]++ > 0) check ('a string 175'); break; + case 176: if (n[176]++ > 0) check ('a string 176'); break; + case 177: if (n[177]++ > 0) check ('a string 177'); break; + case 178: if (n[178]++ > 0) check ('a string 178'); break; + case 179: if (n[179]++ > 0) check ('a string 179'); break; + case 180: if (n[180]++ > 0) check ('a string 180'); break; + case 181: if (n[181]++ > 0) check ('a string 181'); break; + case 182: if (n[182]++ > 0) check ('a string 182'); break; + case 183: if (n[183]++ > 0) check ('a string 183'); break; + case 184: if (n[184]++ > 0) check ('a string 184'); break; + case 185: if (n[185]++ > 0) check ('a string 185'); break; + case 186: if (n[186]++ > 0) check ('a string 186'); break; + case 187: if (n[187]++ > 0) check ('a string 187'); break; + case 188: if (n[188]++ > 0) check ('a string 188'); break; + case 189: if (n[189]++ > 0) check ('a string 189'); break; + case 190: if (n[190]++ > 0) check ('a string 190'); break; + case 191: if (n[191]++ > 0) check ('a string 191'); break; + case 192: if (n[192]++ > 0) check ('a string 192'); break; + case 193: if (n[193]++ > 0) check ('a string 193'); break; + case 194: if (n[194]++ > 0) check ('a string 194'); break; + case 195: if (n[195]++ > 0) check ('a string 195'); break; + case 196: if (n[196]++ > 0) check ('a string 196'); break; + case 197: if (n[197]++ > 0) check ('a string 197'); break; + case 198: if (n[198]++ > 0) check ('a string 198'); break; + case 199: if (n[199]++ > 0) check ('a string 199'); break; + case 200: if (n[200]++ > 0) check ('a string 200'); break; + case 201: if (n[201]++ > 0) check ('a string 201'); break; + case 202: if (n[202]++ > 0) check ('a string 202'); break; + case 203: if (n[203]++ > 0) check ('a string 203'); break; + case 204: if (n[204]++ > 0) check ('a string 204'); break; + case 205: if (n[205]++ > 0) check ('a string 205'); break; + case 206: if (n[206]++ > 0) check ('a string 206'); break; + case 207: if (n[207]++ > 0) check ('a string 207'); break; + case 208: if (n[208]++ > 0) check ('a string 208'); break; + case 209: if (n[209]++ > 0) check ('a string 209'); break; + case 210: if (n[210]++ > 0) check ('a string 210'); break; + case 211: if (n[211]++ > 0) check ('a string 211'); break; + case 212: if (n[212]++ > 0) check ('a string 212'); break; + case 213: if (n[213]++ > 0) check ('a string 213'); break; + case 214: if (n[214]++ > 0) check ('a string 214'); break; + case 215: if (n[215]++ > 0) check ('a string 215'); break; + case 216: if (n[216]++ > 0) check ('a string 216'); break; + case 217: if (n[217]++ > 0) check ('a string 217'); break; + case 218: if (n[218]++ > 0) check ('a string 218'); break; + case 219: if (n[219]++ > 0) check ('a string 219'); break; + case 220: if (n[220]++ > 0) check ('a string 220'); break; + case 221: if (n[221]++ > 0) check ('a string 221'); break; + case 222: if (n[222]++ > 0) check ('a string 222'); break; + case 223: if (n[223]++ > 0) check ('a string 223'); break; + case 224: if (n[224]++ > 0) check ('a string 224'); break; + case 225: if (n[225]++ > 0) check ('a string 225'); break; + case 226: if (n[226]++ > 0) check ('a string 226'); break; + case 227: if (n[227]++ > 0) check ('a string 227'); break; + case 228: if (n[228]++ > 0) check ('a string 228'); break; + case 229: if (n[229]++ > 0) check ('a string 229'); break; + case 230: if (n[230]++ > 0) check ('a string 230'); break; + case 231: if (n[231]++ > 0) check ('a string 231'); break; + case 232: if (n[232]++ > 0) check ('a string 232'); break; + case 233: if (n[233]++ > 0) check ('a string 233'); break; + case 234: if (n[234]++ > 0) check ('a string 234'); break; + case 235: if (n[235]++ > 0) check ('a string 235'); break; + case 236: if (n[236]++ > 0) check ('a string 236'); break; + case 237: if (n[237]++ > 0) check ('a string 237'); break; + case 238: if (n[238]++ > 0) check ('a string 238'); break; + case 239: if (n[239]++ > 0) check ('a string 239'); break; + case 240: if (n[240]++ > 0) check ('a string 240'); break; + case 241: if (n[241]++ > 0) check ('a string 241'); break; + case 242: if (n[242]++ > 0) check ('a string 242'); break; + case 243: if (n[243]++ > 0) check ('a string 243'); break; + case 244: if (n[244]++ > 0) check ('a string 244'); break; + case 245: if (n[245]++ > 0) check ('a string 245'); break; + case 246: if (n[246]++ > 0) check ('a string 246'); break; + case 247: if (n[247]++ > 0) check ('a string 247'); break; + case 248: if (n[248]++ > 0) check ('a string 248'); break; + case 249: if (n[249]++ > 0) check ('a string 249'); break; + case 250: if (n[250]++ > 0) check ('a string 250'); break; + case 251: if (n[251]++ > 0) check ('a string 251'); break; + case 252: if (n[252]++ > 0) check ('a string 252'); break; + case 253: if (n[253]++ > 0) check ('a string 253'); break; + case 254: if (n[254]++ > 0) check ('a string 254'); break; + case 255: if (n[255]++ > 0) check ('a string 255'); break; + case 256: if (n[256]++ > 0) check ('a string 256'); break; + case 257: if (n[257]++ > 0) check ('a string 257'); break; + case 258: if (n[258]++ > 0) check ('a string 258'); break; + case 259: if (n[259]++ > 0) check ('a string 259'); break; + case 260: if (n[260]++ > 0) check ('a string 260'); break; + case 261: if (n[261]++ > 0) check ('a string 261'); break; + case 262: if (n[262]++ > 0) check ('a string 262'); break; + case 263: if (n[263]++ > 0) check ('a string 263'); break; + case 264: if (n[264]++ > 0) check ('a string 264'); break; + case 265: if (n[265]++ > 0) check ('a string 265'); break; + case 266: if (n[266]++ > 0) check ('a string 266'); break; + case 267: if (n[267]++ > 0) check ('a string 267'); break; + case 268: if (n[268]++ > 0) check ('a string 268'); break; + case 269: if (n[269]++ > 0) check ('a string 269'); break; + case 270: if (n[270]++ > 0) check ('a string 270'); break; + case 271: if (n[271]++ > 0) check ('a string 271'); break; + case 272: if (n[272]++ > 0) check ('a string 272'); break; + case 273: if (n[273]++ > 0) check ('a string 273'); break; + case 274: if (n[274]++ > 0) check ('a string 274'); break; + case 275: if (n[275]++ > 0) check ('a string 275'); break; + case 276: if (n[276]++ > 0) check ('a string 276'); break; + case 277: if (n[277]++ > 0) check ('a string 277'); break; + case 278: if (n[278]++ > 0) check ('a string 278'); break; + case 279: if (n[279]++ > 0) check ('a string 279'); break; + case 280: if (n[280]++ > 0) check ('a string 280'); break; + case 281: if (n[281]++ > 0) check ('a string 281'); break; + case 282: if (n[282]++ > 0) check ('a string 282'); break; + case 283: if (n[283]++ > 0) check ('a string 283'); break; + case 284: if (n[284]++ > 0) check ('a string 284'); break; + case 285: if (n[285]++ > 0) check ('a string 285'); break; + case 286: if (n[286]++ > 0) check ('a string 286'); break; + case 287: if (n[287]++ > 0) check ('a string 287'); break; + case 288: if (n[288]++ > 0) check ('a string 288'); break; + case 289: if (n[289]++ > 0) check ('a string 289'); break; + case 290: if (n[290]++ > 0) check ('a string 290'); break; + case 291: if (n[291]++ > 0) check ('a string 291'); break; + case 292: if (n[292]++ > 0) check ('a string 292'); break; + case 293: if (n[293]++ > 0) check ('a string 293'); break; + case 294: if (n[294]++ > 0) check ('a string 294'); break; + case 295: if (n[295]++ > 0) check ('a string 295'); break; + case 296: if (n[296]++ > 0) check ('a string 296'); break; + case 297: if (n[297]++ > 0) check ('a string 297'); break; + case 298: if (n[298]++ > 0) check ('a string 298'); break; + case 299: if (n[299]++ > 0) check ('a string 299'); break; + case 300: if (n[300]++ > 0) check ('a string 300'); break; + case 301: if (n[301]++ > 0) check ('a string 301'); break; + case 302: if (n[302]++ > 0) check ('a string 302'); break; + case 303: if (n[303]++ > 0) check ('a string 303'); break; + case 304: if (n[304]++ > 0) check ('a string 304'); break; + case 305: if (n[305]++ > 0) check ('a string 305'); break; + case 306: if (n[306]++ > 0) check ('a string 306'); break; + case 307: if (n[307]++ > 0) check ('a string 307'); break; + case 308: if (n[308]++ > 0) check ('a string 308'); break; + case 309: if (n[309]++ > 0) check ('a string 309'); break; + case 310: if (n[310]++ > 0) check ('a string 310'); break; + case 311: if (n[311]++ > 0) check ('a string 311'); break; + case 312: if (n[312]++ > 0) check ('a string 312'); break; + case 313: if (n[313]++ > 0) check ('a string 313'); break; + case 314: if (n[314]++ > 0) check ('a string 314'); break; + case 315: if (n[315]++ > 0) check ('a string 315'); break; + case 316: if (n[316]++ > 0) check ('a string 316'); break; + case 317: if (n[317]++ > 0) check ('a string 317'); break; + case 318: if (n[318]++ > 0) check ('a string 318'); break; + case 319: if (n[319]++ > 0) check ('a string 319'); break; + case 320: if (n[320]++ > 0) check ('a string 320'); break; + case 321: if (n[321]++ > 0) check ('a string 321'); break; + case 322: if (n[322]++ > 0) check ('a string 322'); break; + case 323: if (n[323]++ > 0) check ('a string 323'); break; + case 324: if (n[324]++ > 0) check ('a string 324'); break; + case 325: if (n[325]++ > 0) check ('a string 325'); break; + case 326: if (n[326]++ > 0) check ('a string 326'); break; + case 327: if (n[327]++ > 0) check ('a string 327'); break; + case 328: if (n[328]++ > 0) check ('a string 328'); break; + case 329: if (n[329]++ > 0) check ('a string 329'); break; + case 330: if (n[330]++ > 0) check ('a string 330'); break; + case 331: if (n[331]++ > 0) check ('a string 331'); break; + case 332: if (n[332]++ > 0) check ('a string 332'); break; + case 333: if (n[333]++ > 0) check ('a string 333'); break; + case 334: if (n[334]++ > 0) check ('a string 334'); break; + case 335: if (n[335]++ > 0) check ('a string 335'); break; + case 336: if (n[336]++ > 0) check ('a string 336'); break; + case 337: if (n[337]++ > 0) check ('a string 337'); break; + case 338: if (n[338]++ > 0) check ('a string 338'); break; + case 339: if (n[339]++ > 0) check ('a string 339'); break; + case 340: if (n[340]++ > 0) check ('a string 340'); break; + case 341: if (n[341]++ > 0) check ('a string 341'); break; + case 342: if (n[342]++ > 0) check ('a string 342'); break; + case 343: if (n[343]++ > 0) check ('a string 343'); break; + case 344: if (n[344]++ > 0) check ('a string 344'); break; + case 345: if (n[345]++ > 0) check ('a string 345'); break; + case 346: if (n[346]++ > 0) check ('a string 346'); break; + case 347: if (n[347]++ > 0) check ('a string 347'); break; + case 348: if (n[348]++ > 0) check ('a string 348'); break; + case 349: if (n[349]++ > 0) check ('a string 349'); break; + case 350: if (n[350]++ > 0) check ('a string 350'); break; + case 351: if (n[351]++ > 0) check ('a string 351'); break; + case 352: if (n[352]++ > 0) check ('a string 352'); break; + case 353: if (n[353]++ > 0) check ('a string 353'); break; + case 354: if (n[354]++ > 0) check ('a string 354'); break; + case 355: if (n[355]++ > 0) check ('a string 355'); break; + case 356: if (n[356]++ > 0) check ('a string 356'); break; + case 357: if (n[357]++ > 0) check ('a string 357'); break; + case 358: if (n[358]++ > 0) check ('a string 358'); break; + case 359: if (n[359]++ > 0) check ('a string 359'); break; + case 360: if (n[360]++ > 0) check ('a string 360'); break; + case 361: if (n[361]++ > 0) check ('a string 361'); break; + case 362: if (n[362]++ > 0) check ('a string 362'); break; + case 363: if (n[363]++ > 0) check ('a string 363'); break; + case 364: if (n[364]++ > 0) check ('a string 364'); break; + case 365: if (n[365]++ > 0) check ('a string 365'); break; + case 366: if (n[366]++ > 0) check ('a string 366'); break; + case 367: if (n[367]++ > 0) check ('a string 367'); break; + case 368: if (n[368]++ > 0) check ('a string 368'); break; + case 369: if (n[369]++ > 0) check ('a string 369'); break; + case 370: if (n[370]++ > 0) check ('a string 370'); break; + case 371: if (n[371]++ > 0) check ('a string 371'); break; + case 372: if (n[372]++ > 0) check ('a string 372'); break; + case 373: if (n[373]++ > 0) check ('a string 373'); break; + case 374: if (n[374]++ > 0) check ('a string 374'); break; + case 375: if (n[375]++ > 0) check ('a string 375'); break; + case 376: if (n[376]++ > 0) check ('a string 376'); break; + case 377: if (n[377]++ > 0) check ('a string 377'); break; + case 378: if (n[378]++ > 0) check ('a string 378'); break; + case 379: if (n[379]++ > 0) check ('a string 379'); break; + case 380: if (n[380]++ > 0) check ('a string 380'); break; + case 381: if (n[381]++ > 0) check ('a string 381'); break; + case 382: if (n[382]++ > 0) check ('a string 382'); break; + case 383: if (n[383]++ > 0) check ('a string 383'); break; + case 384: if (n[384]++ > 0) check ('a string 384'); break; + case 385: if (n[385]++ > 0) check ('a string 385'); break; + case 386: if (n[386]++ > 0) check ('a string 386'); break; + case 387: if (n[387]++ > 0) check ('a string 387'); break; + case 388: if (n[388]++ > 0) check ('a string 388'); break; + case 389: if (n[389]++ > 0) check ('a string 389'); break; + case 390: if (n[390]++ > 0) check ('a string 390'); break; + case 391: if (n[391]++ > 0) check ('a string 391'); break; + case 392: if (n[392]++ > 0) check ('a string 392'); break; + case 393: if (n[393]++ > 0) check ('a string 393'); break; + case 394: if (n[394]++ > 0) check ('a string 394'); break; + case 395: if (n[395]++ > 0) check ('a string 395'); break; + case 396: if (n[396]++ > 0) check ('a string 396'); break; + case 397: if (n[397]++ > 0) check ('a string 397'); break; + case 398: if (n[398]++ > 0) check ('a string 398'); break; + case 399: if (n[399]++ > 0) check ('a string 399'); break; + case 400: if (n[400]++ > 0) check ('a string 400'); break; + case 401: if (n[401]++ > 0) check ('a string 401'); break; + case 402: if (n[402]++ > 0) check ('a string 402'); break; + case 403: if (n[403]++ > 0) check ('a string 403'); break; + case 404: if (n[404]++ > 0) check ('a string 404'); break; + case 405: if (n[405]++ > 0) check ('a string 405'); break; + case 406: if (n[406]++ > 0) check ('a string 406'); break; + case 407: if (n[407]++ > 0) check ('a string 407'); break; + case 408: if (n[408]++ > 0) check ('a string 408'); break; + case 409: if (n[409]++ > 0) check ('a string 409'); break; + case 410: if (n[410]++ > 0) check ('a string 410'); break; + case 411: if (n[411]++ > 0) check ('a string 411'); break; + case 412: if (n[412]++ > 0) check ('a string 412'); break; + case 413: if (n[413]++ > 0) check ('a string 413'); break; + case 414: if (n[414]++ > 0) check ('a string 414'); break; + case 415: if (n[415]++ > 0) check ('a string 415'); break; + case 416: if (n[416]++ > 0) check ('a string 416'); break; + case 417: if (n[417]++ > 0) check ('a string 417'); break; + case 418: if (n[418]++ > 0) check ('a string 418'); break; + case 419: if (n[419]++ > 0) check ('a string 419'); break; + case 420: if (n[420]++ > 0) check ('a string 420'); break; + case 421: if (n[421]++ > 0) check ('a string 421'); break; + case 422: if (n[422]++ > 0) check ('a string 422'); break; + case 423: if (n[423]++ > 0) check ('a string 423'); break; + case 424: if (n[424]++ > 0) check ('a string 424'); break; + case 425: if (n[425]++ > 0) check ('a string 425'); break; + case 426: if (n[426]++ > 0) check ('a string 426'); break; + case 427: if (n[427]++ > 0) check ('a string 427'); break; + case 428: if (n[428]++ > 0) check ('a string 428'); break; + case 429: if (n[429]++ > 0) check ('a string 429'); break; + case 430: if (n[430]++ > 0) check ('a string 430'); break; + case 431: if (n[431]++ > 0) check ('a string 431'); break; + case 432: if (n[432]++ > 0) check ('a string 432'); break; + case 433: if (n[433]++ > 0) check ('a string 433'); break; + case 434: if (n[434]++ > 0) check ('a string 434'); break; + case 435: if (n[435]++ > 0) check ('a string 435'); break; + case 436: if (n[436]++ > 0) check ('a string 436'); break; + case 437: if (n[437]++ > 0) check ('a string 437'); break; + case 438: if (n[438]++ > 0) check ('a string 438'); break; + case 439: if (n[439]++ > 0) check ('a string 439'); break; + case 440: if (n[440]++ > 0) check ('a string 440'); break; + case 441: if (n[441]++ > 0) check ('a string 441'); break; + case 442: if (n[442]++ > 0) check ('a string 442'); break; + case 443: if (n[443]++ > 0) check ('a string 443'); break; + case 444: if (n[444]++ > 0) check ('a string 444'); break; + case 445: if (n[445]++ > 0) check ('a string 445'); break; + case 446: if (n[446]++ > 0) check ('a string 446'); break; + case 447: if (n[447]++ > 0) check ('a string 447'); break; + case 448: if (n[448]++ > 0) check ('a string 448'); break; + case 449: if (n[449]++ > 0) check ('a string 449'); break; + case 450: if (n[450]++ > 0) check ('a string 450'); break; + case 451: if (n[451]++ > 0) check ('a string 451'); break; + case 452: if (n[452]++ > 0) check ('a string 452'); break; + case 453: if (n[453]++ > 0) check ('a string 453'); break; + case 454: if (n[454]++ > 0) check ('a string 454'); break; + case 455: if (n[455]++ > 0) check ('a string 455'); break; + case 456: if (n[456]++ > 0) check ('a string 456'); break; + case 457: if (n[457]++ > 0) check ('a string 457'); break; + case 458: if (n[458]++ > 0) check ('a string 458'); break; + case 459: if (n[459]++ > 0) check ('a string 459'); break; + case 460: if (n[460]++ > 0) check ('a string 460'); break; + case 461: if (n[461]++ > 0) check ('a string 461'); break; + case 462: if (n[462]++ > 0) check ('a string 462'); break; + case 463: if (n[463]++ > 0) check ('a string 463'); break; + case 464: if (n[464]++ > 0) check ('a string 464'); break; + case 465: if (n[465]++ > 0) check ('a string 465'); break; + case 466: if (n[466]++ > 0) check ('a string 466'); break; + case 467: if (n[467]++ > 0) check ('a string 467'); break; + case 468: if (n[468]++ > 0) check ('a string 468'); break; + case 469: if (n[469]++ > 0) check ('a string 469'); break; + case 470: if (n[470]++ > 0) check ('a string 470'); break; + case 471: if (n[471]++ > 0) check ('a string 471'); break; + case 472: if (n[472]++ > 0) check ('a string 472'); break; + case 473: if (n[473]++ > 0) check ('a string 473'); break; + case 474: if (n[474]++ > 0) check ('a string 474'); break; + case 475: if (n[475]++ > 0) check ('a string 475'); break; + case 476: if (n[476]++ > 0) check ('a string 476'); break; + case 477: if (n[477]++ > 0) check ('a string 477'); break; + case 478: if (n[478]++ > 0) check ('a string 478'); break; + case 479: if (n[479]++ > 0) check ('a string 479'); break; + case 480: if (n[480]++ > 0) check ('a string 480'); break; + case 481: if (n[481]++ > 0) check ('a string 481'); break; + case 482: if (n[482]++ > 0) check ('a string 482'); break; + case 483: if (n[483]++ > 0) check ('a string 483'); break; + case 484: if (n[484]++ > 0) check ('a string 484'); break; + case 485: if (n[485]++ > 0) check ('a string 485'); break; + case 486: if (n[486]++ > 0) check ('a string 486'); break; + case 487: if (n[487]++ > 0) check ('a string 487'); break; + case 488: if (n[488]++ > 0) check ('a string 488'); break; + case 489: if (n[489]++ > 0) check ('a string 489'); break; + case 490: if (n[490]++ > 0) check ('a string 490'); break; + case 491: if (n[491]++ > 0) check ('a string 491'); break; + case 492: if (n[492]++ > 0) check ('a string 492'); break; + case 493: if (n[493]++ > 0) check ('a string 493'); break; + case 494: if (n[494]++ > 0) check ('a string 494'); break; + case 495: if (n[495]++ > 0) check ('a string 495'); break; + case 496: if (n[496]++ > 0) check ('a string 496'); break; + case 497: if (n[497]++ > 0) check ('a string 497'); break; + case 498: if (n[498]++ > 0) check ('a string 498'); break; + case 499: if (n[499]++ > 0) check ('a string 499'); break; + case 500: if (n[500]++ > 0) check ('a string 500'); break; + case 501: if (n[501]++ > 0) check ('a string 501'); break; + case 502: if (n[502]++ > 0) check ('a string 502'); break; + case 503: if (n[503]++ > 0) check ('a string 503'); break; + case 504: if (n[504]++ > 0) check ('a string 504'); break; + case 505: if (n[505]++ > 0) check ('a string 505'); break; + case 506: if (n[506]++ > 0) check ('a string 506'); break; + case 507: if (n[507]++ > 0) check ('a string 507'); break; + case 508: if (n[508]++ > 0) check ('a string 508'); break; + case 509: if (n[509]++ > 0) check ('a string 509'); break; + case 510: if (n[510]++ > 0) check ('a string 510'); break; + case 511: if (n[511]++ > 0) check ('a string 511'); break; + case 512: if (n[512]++ > 0) check ('a string 512'); break; + case 513: if (n[513]++ > 0) check ('a string 513'); break; + case 514: if (n[514]++ > 0) check ('a string 514'); break; + case 515: if (n[515]++ > 0) check ('a string 515'); break; + case 516: if (n[516]++ > 0) check ('a string 516'); break; + case 517: if (n[517]++ > 0) check ('a string 517'); break; + case 518: if (n[518]++ > 0) check ('a string 518'); break; + case 519: if (n[519]++ > 0) check ('a string 519'); break; + case 520: if (n[520]++ > 0) check ('a string 520'); break; + case 521: if (n[521]++ > 0) check ('a string 521'); break; + case 522: if (n[522]++ > 0) check ('a string 522'); break; + case 523: if (n[523]++ > 0) check ('a string 523'); break; + case 524: if (n[524]++ > 0) check ('a string 524'); break; + case 525: if (n[525]++ > 0) check ('a string 525'); break; + case 526: if (n[526]++ > 0) check ('a string 526'); break; + case 527: if (n[527]++ > 0) check ('a string 527'); break; + case 528: if (n[528]++ > 0) check ('a string 528'); break; + case 529: if (n[529]++ > 0) check ('a string 529'); break; + case 530: if (n[530]++ > 0) check ('a string 530'); break; + case 531: if (n[531]++ > 0) check ('a string 531'); break; + case 532: if (n[532]++ > 0) check ('a string 532'); break; + case 533: if (n[533]++ > 0) check ('a string 533'); break; + case 534: if (n[534]++ > 0) check ('a string 534'); break; + case 535: if (n[535]++ > 0) check ('a string 535'); break; + case 536: if (n[536]++ > 0) check ('a string 536'); break; + case 537: if (n[537]++ > 0) check ('a string 537'); break; + case 538: if (n[538]++ > 0) check ('a string 538'); break; + case 539: if (n[539]++ > 0) check ('a string 539'); break; + case 540: if (n[540]++ > 0) check ('a string 540'); break; + case 541: if (n[541]++ > 0) check ('a string 541'); break; + case 542: if (n[542]++ > 0) check ('a string 542'); break; + case 543: if (n[543]++ > 0) check ('a string 543'); break; + case 544: if (n[544]++ > 0) check ('a string 544'); break; + case 545: if (n[545]++ > 0) check ('a string 545'); break; + case 546: if (n[546]++ > 0) check ('a string 546'); break; + case 547: if (n[547]++ > 0) check ('a string 547'); break; + case 548: if (n[548]++ > 0) check ('a string 548'); break; + case 549: if (n[549]++ > 0) check ('a string 549'); break; + case 550: if (n[550]++ > 0) check ('a string 550'); break; + case 551: if (n[551]++ > 0) check ('a string 551'); break; + case 552: if (n[552]++ > 0) check ('a string 552'); break; + case 553: if (n[553]++ > 0) check ('a string 553'); break; + case 554: if (n[554]++ > 0) check ('a string 554'); break; + case 555: if (n[555]++ > 0) check ('a string 555'); break; + case 556: if (n[556]++ > 0) check ('a string 556'); break; + case 557: if (n[557]++ > 0) check ('a string 557'); break; + case 558: if (n[558]++ > 0) check ('a string 558'); break; + case 559: if (n[559]++ > 0) check ('a string 559'); break; + case 560: if (n[560]++ > 0) check ('a string 560'); break; + case 561: if (n[561]++ > 0) check ('a string 561'); break; + case 562: if (n[562]++ > 0) check ('a string 562'); break; + case 563: if (n[563]++ > 0) check ('a string 563'); break; + case 564: if (n[564]++ > 0) check ('a string 564'); break; + case 565: if (n[565]++ > 0) check ('a string 565'); break; + case 566: if (n[566]++ > 0) check ('a string 566'); break; + case 567: if (n[567]++ > 0) check ('a string 567'); break; + case 568: if (n[568]++ > 0) check ('a string 568'); break; + case 569: if (n[569]++ > 0) check ('a string 569'); break; + case 570: if (n[570]++ > 0) check ('a string 570'); break; + case 571: if (n[571]++ > 0) check ('a string 571'); break; + case 572: if (n[572]++ > 0) check ('a string 572'); break; + case 573: if (n[573]++ > 0) check ('a string 573'); break; + case 574: if (n[574]++ > 0) check ('a string 574'); break; + case 575: if (n[575]++ > 0) check ('a string 575'); break; + case 576: if (n[576]++ > 0) check ('a string 576'); break; + case 577: if (n[577]++ > 0) check ('a string 577'); break; + case 578: if (n[578]++ > 0) check ('a string 578'); break; + case 579: if (n[579]++ > 0) check ('a string 579'); break; + case 580: if (n[580]++ > 0) check ('a string 580'); break; + case 581: if (n[581]++ > 0) check ('a string 581'); break; + case 582: if (n[582]++ > 0) check ('a string 582'); break; + case 583: if (n[583]++ > 0) check ('a string 583'); break; + case 584: if (n[584]++ > 0) check ('a string 584'); break; + case 585: if (n[585]++ > 0) check ('a string 585'); break; + case 586: if (n[586]++ > 0) check ('a string 586'); break; + case 587: if (n[587]++ > 0) check ('a string 587'); break; + case 588: if (n[588]++ > 0) check ('a string 588'); break; + case 589: if (n[589]++ > 0) check ('a string 589'); break; + case 590: if (n[590]++ > 0) check ('a string 590'); break; + case 591: if (n[591]++ > 0) check ('a string 591'); break; + case 592: if (n[592]++ > 0) check ('a string 592'); break; + case 593: if (n[593]++ > 0) check ('a string 593'); break; + case 594: if (n[594]++ > 0) check ('a string 594'); break; + case 595: if (n[595]++ > 0) check ('a string 595'); break; + case 596: if (n[596]++ > 0) check ('a string 596'); break; + case 597: if (n[597]++ > 0) check ('a string 597'); break; + case 598: if (n[598]++ > 0) check ('a string 598'); break; + case 599: if (n[599]++ > 0) check ('a string 599'); break; + case 600: if (n[600]++ > 0) check ('a string 600'); break; + case 601: if (n[601]++ > 0) check ('a string 601'); break; + case 602: if (n[602]++ > 0) check ('a string 602'); break; + case 603: if (n[603]++ > 0) check ('a string 603'); break; + case 604: if (n[604]++ > 0) check ('a string 604'); break; + case 605: if (n[605]++ > 0) check ('a string 605'); break; + case 606: if (n[606]++ > 0) check ('a string 606'); break; + case 607: if (n[607]++ > 0) check ('a string 607'); break; + case 608: if (n[608]++ > 0) check ('a string 608'); break; + case 609: if (n[609]++ > 0) check ('a string 609'); break; + case 610: if (n[610]++ > 0) check ('a string 610'); break; + case 611: if (n[611]++ > 0) check ('a string 611'); break; + case 612: if (n[612]++ > 0) check ('a string 612'); break; + case 613: if (n[613]++ > 0) check ('a string 613'); break; + case 614: if (n[614]++ > 0) check ('a string 614'); break; + case 615: if (n[615]++ > 0) check ('a string 615'); break; + case 616: if (n[616]++ > 0) check ('a string 616'); break; + case 617: if (n[617]++ > 0) check ('a string 617'); break; + case 618: if (n[618]++ > 0) check ('a string 618'); break; + case 619: if (n[619]++ > 0) check ('a string 619'); break; + case 620: if (n[620]++ > 0) check ('a string 620'); break; + case 621: if (n[621]++ > 0) check ('a string 621'); break; + case 622: if (n[622]++ > 0) check ('a string 622'); break; + case 623: if (n[623]++ > 0) check ('a string 623'); break; + case 624: if (n[624]++ > 0) check ('a string 624'); break; + case 625: if (n[625]++ > 0) check ('a string 625'); break; + case 626: if (n[626]++ > 0) check ('a string 626'); break; + case 627: if (n[627]++ > 0) check ('a string 627'); break; + case 628: if (n[628]++ > 0) check ('a string 628'); break; + case 629: if (n[629]++ > 0) check ('a string 629'); break; + case 630: if (n[630]++ > 0) check ('a string 630'); break; + case 631: if (n[631]++ > 0) check ('a string 631'); break; + case 632: if (n[632]++ > 0) check ('a string 632'); break; + case 633: if (n[633]++ > 0) check ('a string 633'); break; + case 634: if (n[634]++ > 0) check ('a string 634'); break; + case 635: if (n[635]++ > 0) check ('a string 635'); break; + case 636: if (n[636]++ > 0) check ('a string 636'); break; + case 637: if (n[637]++ > 0) check ('a string 637'); break; + case 638: if (n[638]++ > 0) check ('a string 638'); break; + case 639: if (n[639]++ > 0) check ('a string 639'); break; + case 640: if (n[640]++ > 0) check ('a string 640'); break; + case 641: if (n[641]++ > 0) check ('a string 641'); break; + case 642: if (n[642]++ > 0) check ('a string 642'); break; + case 643: if (n[643]++ > 0) check ('a string 643'); break; + case 644: if (n[644]++ > 0) check ('a string 644'); break; + case 645: if (n[645]++ > 0) check ('a string 645'); break; + case 646: if (n[646]++ > 0) check ('a string 646'); break; + case 647: if (n[647]++ > 0) check ('a string 647'); break; + case 648: if (n[648]++ > 0) check ('a string 648'); break; + case 649: if (n[649]++ > 0) check ('a string 649'); break; + case 650: if (n[650]++ > 0) check ('a string 650'); break; + case 651: if (n[651]++ > 0) check ('a string 651'); break; + case 652: if (n[652]++ > 0) check ('a string 652'); break; + case 653: if (n[653]++ > 0) check ('a string 653'); break; + case 654: if (n[654]++ > 0) check ('a string 654'); break; + case 655: if (n[655]++ > 0) check ('a string 655'); break; + case 656: if (n[656]++ > 0) check ('a string 656'); break; + case 657: if (n[657]++ > 0) check ('a string 657'); break; + case 658: if (n[658]++ > 0) check ('a string 658'); break; + case 659: if (n[659]++ > 0) check ('a string 659'); break; + case 660: if (n[660]++ > 0) check ('a string 660'); break; + case 661: if (n[661]++ > 0) check ('a string 661'); break; + case 662: if (n[662]++ > 0) check ('a string 662'); break; + case 663: if (n[663]++ > 0) check ('a string 663'); break; + case 664: if (n[664]++ > 0) check ('a string 664'); break; + case 665: if (n[665]++ > 0) check ('a string 665'); break; + case 666: if (n[666]++ > 0) check ('a string 666'); break; + case 667: if (n[667]++ > 0) check ('a string 667'); break; + case 668: if (n[668]++ > 0) check ('a string 668'); break; + case 669: if (n[669]++ > 0) check ('a string 669'); break; + case 670: if (n[670]++ > 0) check ('a string 670'); break; + case 671: if (n[671]++ > 0) check ('a string 671'); break; + case 672: if (n[672]++ > 0) check ('a string 672'); break; + case 673: if (n[673]++ > 0) check ('a string 673'); break; + case 674: if (n[674]++ > 0) check ('a string 674'); break; + case 675: if (n[675]++ > 0) check ('a string 675'); break; + case 676: if (n[676]++ > 0) check ('a string 676'); break; + case 677: if (n[677]++ > 0) check ('a string 677'); break; + case 678: if (n[678]++ > 0) check ('a string 678'); break; + case 679: if (n[679]++ > 0) check ('a string 679'); break; + case 680: if (n[680]++ > 0) check ('a string 680'); break; + case 681: if (n[681]++ > 0) check ('a string 681'); break; + case 682: if (n[682]++ > 0) check ('a string 682'); break; + case 683: if (n[683]++ > 0) check ('a string 683'); break; + case 684: if (n[684]++ > 0) check ('a string 684'); break; + case 685: if (n[685]++ > 0) check ('a string 685'); break; + case 686: if (n[686]++ > 0) check ('a string 686'); break; + case 687: if (n[687]++ > 0) check ('a string 687'); break; + case 688: if (n[688]++ > 0) check ('a string 688'); break; + case 689: if (n[689]++ > 0) check ('a string 689'); break; + case 690: if (n[690]++ > 0) check ('a string 690'); break; + case 691: if (n[691]++ > 0) check ('a string 691'); break; + case 692: if (n[692]++ > 0) check ('a string 692'); break; + case 693: if (n[693]++ > 0) check ('a string 693'); break; + case 694: if (n[694]++ > 0) check ('a string 694'); break; + case 695: if (n[695]++ > 0) check ('a string 695'); break; + case 696: if (n[696]++ > 0) check ('a string 696'); break; + case 697: if (n[697]++ > 0) check ('a string 697'); break; + case 698: if (n[698]++ > 0) check ('a string 698'); break; + case 699: if (n[699]++ > 0) check ('a string 699'); break; + case 700: if (n[700]++ > 0) check ('a string 700'); break; + case 701: if (n[701]++ > 0) check ('a string 701'); break; + case 702: if (n[702]++ > 0) check ('a string 702'); break; + case 703: if (n[703]++ > 0) check ('a string 703'); break; + case 704: if (n[704]++ > 0) check ('a string 704'); break; + case 705: if (n[705]++ > 0) check ('a string 705'); break; + case 706: if (n[706]++ > 0) check ('a string 706'); break; + case 707: if (n[707]++ > 0) check ('a string 707'); break; + case 708: if (n[708]++ > 0) check ('a string 708'); break; + case 709: if (n[709]++ > 0) check ('a string 709'); break; + case 710: if (n[710]++ > 0) check ('a string 710'); break; + case 711: if (n[711]++ > 0) check ('a string 711'); break; + case 712: if (n[712]++ > 0) check ('a string 712'); break; + case 713: if (n[713]++ > 0) check ('a string 713'); break; + case 714: if (n[714]++ > 0) check ('a string 714'); break; + case 715: if (n[715]++ > 0) check ('a string 715'); break; + case 716: if (n[716]++ > 0) check ('a string 716'); break; + case 717: if (n[717]++ > 0) check ('a string 717'); break; + case 718: if (n[718]++ > 0) check ('a string 718'); break; + case 719: if (n[719]++ > 0) check ('a string 719'); break; + case 720: if (n[720]++ > 0) check ('a string 720'); break; + case 721: if (n[721]++ > 0) check ('a string 721'); break; + case 722: if (n[722]++ > 0) check ('a string 722'); break; + case 723: if (n[723]++ > 0) check ('a string 723'); break; + case 724: if (n[724]++ > 0) check ('a string 724'); break; + case 725: if (n[725]++ > 0) check ('a string 725'); break; + case 726: if (n[726]++ > 0) check ('a string 726'); break; + case 727: if (n[727]++ > 0) check ('a string 727'); break; + case 728: if (n[728]++ > 0) check ('a string 728'); break; + case 729: if (n[729]++ > 0) check ('a string 729'); break; + case 730: if (n[730]++ > 0) check ('a string 730'); break; + case 731: if (n[731]++ > 0) check ('a string 731'); break; + case 732: if (n[732]++ > 0) check ('a string 732'); break; + case 733: if (n[733]++ > 0) check ('a string 733'); break; + case 734: if (n[734]++ > 0) check ('a string 734'); break; + case 735: if (n[735]++ > 0) check ('a string 735'); break; + case 736: if (n[736]++ > 0) check ('a string 736'); break; + case 737: if (n[737]++ > 0) check ('a string 737'); break; + case 738: if (n[738]++ > 0) check ('a string 738'); break; + case 739: if (n[739]++ > 0) check ('a string 739'); break; + case 740: if (n[740]++ > 0) check ('a string 740'); break; + case 741: if (n[741]++ > 0) check ('a string 741'); break; + case 742: if (n[742]++ > 0) check ('a string 742'); break; + case 743: if (n[743]++ > 0) check ('a string 743'); break; + case 744: if (n[744]++ > 0) check ('a string 744'); break; + case 745: if (n[745]++ > 0) check ('a string 745'); break; + case 746: if (n[746]++ > 0) check ('a string 746'); break; + case 747: if (n[747]++ > 0) check ('a string 747'); break; + case 748: if (n[748]++ > 0) check ('a string 748'); break; + case 749: if (n[749]++ > 0) check ('a string 749'); break; + case 750: if (n[750]++ > 0) check ('a string 750'); break; + case 751: if (n[751]++ > 0) check ('a string 751'); break; + case 752: if (n[752]++ > 0) check ('a string 752'); break; + case 753: if (n[753]++ > 0) check ('a string 753'); break; + case 754: if (n[754]++ > 0) check ('a string 754'); break; + case 755: if (n[755]++ > 0) check ('a string 755'); break; + case 756: if (n[756]++ > 0) check ('a string 756'); break; + case 757: if (n[757]++ > 0) check ('a string 757'); break; + case 758: if (n[758]++ > 0) check ('a string 758'); break; + case 759: if (n[759]++ > 0) check ('a string 759'); break; + case 760: if (n[760]++ > 0) check ('a string 760'); break; + case 761: if (n[761]++ > 0) check ('a string 761'); break; + case 762: if (n[762]++ > 0) check ('a string 762'); break; + case 763: if (n[763]++ > 0) check ('a string 763'); break; + case 764: if (n[764]++ > 0) check ('a string 764'); break; + case 765: if (n[765]++ > 0) check ('a string 765'); break; + case 766: if (n[766]++ > 0) check ('a string 766'); break; + case 767: if (n[767]++ > 0) check ('a string 767'); break; + case 768: if (n[768]++ > 0) check ('a string 768'); break; + case 769: if (n[769]++ > 0) check ('a string 769'); break; + case 770: if (n[770]++ > 0) check ('a string 770'); break; + case 771: if (n[771]++ > 0) check ('a string 771'); break; + case 772: if (n[772]++ > 0) check ('a string 772'); break; + case 773: if (n[773]++ > 0) check ('a string 773'); break; + case 774: if (n[774]++ > 0) check ('a string 774'); break; + case 775: if (n[775]++ > 0) check ('a string 775'); break; + case 776: if (n[776]++ > 0) check ('a string 776'); break; + case 777: if (n[777]++ > 0) check ('a string 777'); break; + case 778: if (n[778]++ > 0) check ('a string 778'); break; + case 779: if (n[779]++ > 0) check ('a string 779'); break; + case 780: if (n[780]++ > 0) check ('a string 780'); break; + case 781: if (n[781]++ > 0) check ('a string 781'); break; + case 782: if (n[782]++ > 0) check ('a string 782'); break; + case 783: if (n[783]++ > 0) check ('a string 783'); break; + case 784: if (n[784]++ > 0) check ('a string 784'); break; + case 785: if (n[785]++ > 0) check ('a string 785'); break; + case 786: if (n[786]++ > 0) check ('a string 786'); break; + case 787: if (n[787]++ > 0) check ('a string 787'); break; + case 788: if (n[788]++ > 0) check ('a string 788'); break; + case 789: if (n[789]++ > 0) check ('a string 789'); break; + case 790: if (n[790]++ > 0) check ('a string 790'); break; + case 791: if (n[791]++ > 0) check ('a string 791'); break; + case 792: if (n[792]++ > 0) check ('a string 792'); break; + case 793: if (n[793]++ > 0) check ('a string 793'); break; + case 794: if (n[794]++ > 0) check ('a string 794'); break; + case 795: if (n[795]++ > 0) check ('a string 795'); break; + case 796: if (n[796]++ > 0) check ('a string 796'); break; + case 797: if (n[797]++ > 0) check ('a string 797'); break; + case 798: if (n[798]++ > 0) check ('a string 798'); break; + case 799: if (n[799]++ > 0) check ('a string 799'); break; + case 800: if (n[800]++ > 0) check ('a string 800'); break; + case 801: if (n[801]++ > 0) check ('a string 801'); break; + case 802: if (n[802]++ > 0) check ('a string 802'); break; + case 803: if (n[803]++ > 0) check ('a string 803'); break; + case 804: if (n[804]++ > 0) check ('a string 804'); break; + case 805: if (n[805]++ > 0) check ('a string 805'); break; + case 806: if (n[806]++ > 0) check ('a string 806'); break; + case 807: if (n[807]++ > 0) check ('a string 807'); break; + case 808: if (n[808]++ > 0) check ('a string 808'); break; + case 809: if (n[809]++ > 0) check ('a string 809'); break; + case 810: if (n[810]++ > 0) check ('a string 810'); break; + case 811: if (n[811]++ > 0) check ('a string 811'); break; + case 812: if (n[812]++ > 0) check ('a string 812'); break; + case 813: if (n[813]++ > 0) check ('a string 813'); break; + case 814: if (n[814]++ > 0) check ('a string 814'); break; + case 815: if (n[815]++ > 0) check ('a string 815'); break; + case 816: if (n[816]++ > 0) check ('a string 816'); break; + case 817: if (n[817]++ > 0) check ('a string 817'); break; + case 818: if (n[818]++ > 0) check ('a string 818'); break; + case 819: if (n[819]++ > 0) check ('a string 819'); break; + case 820: if (n[820]++ > 0) check ('a string 820'); break; + case 821: if (n[821]++ > 0) check ('a string 821'); break; + case 822: if (n[822]++ > 0) check ('a string 822'); break; + case 823: if (n[823]++ > 0) check ('a string 823'); break; + case 824: if (n[824]++ > 0) check ('a string 824'); break; + case 825: if (n[825]++ > 0) check ('a string 825'); break; + case 826: if (n[826]++ > 0) check ('a string 826'); break; + case 827: if (n[827]++ > 0) check ('a string 827'); break; + case 828: if (n[828]++ > 0) check ('a string 828'); break; + case 829: if (n[829]++ > 0) check ('a string 829'); break; + case 830: if (n[830]++ > 0) check ('a string 830'); break; + case 831: if (n[831]++ > 0) check ('a string 831'); break; + case 832: if (n[832]++ > 0) check ('a string 832'); break; + case 833: if (n[833]++ > 0) check ('a string 833'); break; + case 834: if (n[834]++ > 0) check ('a string 834'); break; + case 835: if (n[835]++ > 0) check ('a string 835'); break; + case 836: if (n[836]++ > 0) check ('a string 836'); break; + case 837: if (n[837]++ > 0) check ('a string 837'); break; + case 838: if (n[838]++ > 0) check ('a string 838'); break; + case 839: if (n[839]++ > 0) check ('a string 839'); break; + case 840: if (n[840]++ > 0) check ('a string 840'); break; + case 841: if (n[841]++ > 0) check ('a string 841'); break; + case 842: if (n[842]++ > 0) check ('a string 842'); break; + case 843: if (n[843]++ > 0) check ('a string 843'); break; + case 844: if (n[844]++ > 0) check ('a string 844'); break; + case 845: if (n[845]++ > 0) check ('a string 845'); break; + case 846: if (n[846]++ > 0) check ('a string 846'); break; + case 847: if (n[847]++ > 0) check ('a string 847'); break; + case 848: if (n[848]++ > 0) check ('a string 848'); break; + case 849: if (n[849]++ > 0) check ('a string 849'); break; + case 850: if (n[850]++ > 0) check ('a string 850'); break; + case 851: if (n[851]++ > 0) check ('a string 851'); break; + case 852: if (n[852]++ > 0) check ('a string 852'); break; + case 853: if (n[853]++ > 0) check ('a string 853'); break; + case 854: if (n[854]++ > 0) check ('a string 854'); break; + case 855: if (n[855]++ > 0) check ('a string 855'); break; + case 856: if (n[856]++ > 0) check ('a string 856'); break; + case 857: if (n[857]++ > 0) check ('a string 857'); break; + case 858: if (n[858]++ > 0) check ('a string 858'); break; + case 859: if (n[859]++ > 0) check ('a string 859'); break; + case 860: if (n[860]++ > 0) check ('a string 860'); break; + case 861: if (n[861]++ > 0) check ('a string 861'); break; + case 862: if (n[862]++ > 0) check ('a string 862'); break; + case 863: if (n[863]++ > 0) check ('a string 863'); break; + case 864: if (n[864]++ > 0) check ('a string 864'); break; + case 865: if (n[865]++ > 0) check ('a string 865'); break; + case 866: if (n[866]++ > 0) check ('a string 866'); break; + case 867: if (n[867]++ > 0) check ('a string 867'); break; + case 868: if (n[868]++ > 0) check ('a string 868'); break; + case 869: if (n[869]++ > 0) check ('a string 869'); break; + case 870: if (n[870]++ > 0) check ('a string 870'); break; + case 871: if (n[871]++ > 0) check ('a string 871'); break; + case 872: if (n[872]++ > 0) check ('a string 872'); break; + case 873: if (n[873]++ > 0) check ('a string 873'); break; + case 874: if (n[874]++ > 0) check ('a string 874'); break; + case 875: if (n[875]++ > 0) check ('a string 875'); break; + case 876: if (n[876]++ > 0) check ('a string 876'); break; + case 877: if (n[877]++ > 0) check ('a string 877'); break; + case 878: if (n[878]++ > 0) check ('a string 878'); break; + case 879: if (n[879]++ > 0) check ('a string 879'); break; + case 880: if (n[880]++ > 0) check ('a string 880'); break; + case 881: if (n[881]++ > 0) check ('a string 881'); break; + case 882: if (n[882]++ > 0) check ('a string 882'); break; + case 883: if (n[883]++ > 0) check ('a string 883'); break; + case 884: if (n[884]++ > 0) check ('a string 884'); break; + case 885: if (n[885]++ > 0) check ('a string 885'); break; + case 886: if (n[886]++ > 0) check ('a string 886'); break; + case 887: if (n[887]++ > 0) check ('a string 887'); break; + case 888: if (n[888]++ > 0) check ('a string 888'); break; + case 889: if (n[889]++ > 0) check ('a string 889'); break; + case 890: if (n[890]++ > 0) check ('a string 890'); break; + case 891: if (n[891]++ > 0) check ('a string 891'); break; + case 892: if (n[892]++ > 0) check ('a string 892'); break; + case 893: if (n[893]++ > 0) check ('a string 893'); break; + case 894: if (n[894]++ > 0) check ('a string 894'); break; + case 895: if (n[895]++ > 0) check ('a string 895'); break; + case 896: if (n[896]++ > 0) check ('a string 896'); break; + case 897: if (n[897]++ > 0) check ('a string 897'); break; + case 898: if (n[898]++ > 0) check ('a string 898'); break; + case 899: if (n[899]++ > 0) check ('a string 899'); break; + case 900: if (n[900]++ > 0) check ('a string 900'); break; + case 901: if (n[901]++ > 0) check ('a string 901'); break; + case 902: if (n[902]++ > 0) check ('a string 902'); break; + case 903: if (n[903]++ > 0) check ('a string 903'); break; + case 904: if (n[904]++ > 0) check ('a string 904'); break; + case 905: if (n[905]++ > 0) check ('a string 905'); break; + case 906: if (n[906]++ > 0) check ('a string 906'); break; + case 907: if (n[907]++ > 0) check ('a string 907'); break; + case 908: if (n[908]++ > 0) check ('a string 908'); break; + case 909: if (n[909]++ > 0) check ('a string 909'); break; + case 910: if (n[910]++ > 0) check ('a string 910'); break; + case 911: if (n[911]++ > 0) check ('a string 911'); break; + case 912: if (n[912]++ > 0) check ('a string 912'); break; + case 913: if (n[913]++ > 0) check ('a string 913'); break; + case 914: if (n[914]++ > 0) check ('a string 914'); break; + case 915: if (n[915]++ > 0) check ('a string 915'); break; + case 916: if (n[916]++ > 0) check ('a string 916'); break; + case 917: if (n[917]++ > 0) check ('a string 917'); break; + case 918: if (n[918]++ > 0) check ('a string 918'); break; + case 919: if (n[919]++ > 0) check ('a string 919'); break; + case 920: if (n[920]++ > 0) check ('a string 920'); break; + case 921: if (n[921]++ > 0) check ('a string 921'); break; + case 922: if (n[922]++ > 0) check ('a string 922'); break; + case 923: if (n[923]++ > 0) check ('a string 923'); break; + case 924: if (n[924]++ > 0) check ('a string 924'); break; + case 925: if (n[925]++ > 0) check ('a string 925'); break; + case 926: if (n[926]++ > 0) check ('a string 926'); break; + case 927: if (n[927]++ > 0) check ('a string 927'); break; + case 928: if (n[928]++ > 0) check ('a string 928'); break; + case 929: if (n[929]++ > 0) check ('a string 929'); break; + case 930: if (n[930]++ > 0) check ('a string 930'); break; + case 931: if (n[931]++ > 0) check ('a string 931'); break; + case 932: if (n[932]++ > 0) check ('a string 932'); break; + case 933: if (n[933]++ > 0) check ('a string 933'); break; + case 934: if (n[934]++ > 0) check ('a string 934'); break; + case 935: if (n[935]++ > 0) check ('a string 935'); break; + case 936: if (n[936]++ > 0) check ('a string 936'); break; + case 937: if (n[937]++ > 0) check ('a string 937'); break; + case 938: if (n[938]++ > 0) check ('a string 938'); break; + case 939: if (n[939]++ > 0) check ('a string 939'); break; + case 940: if (n[940]++ > 0) check ('a string 940'); break; + case 941: if (n[941]++ > 0) check ('a string 941'); break; + case 942: if (n[942]++ > 0) check ('a string 942'); break; + case 943: if (n[943]++ > 0) check ('a string 943'); break; + case 944: if (n[944]++ > 0) check ('a string 944'); break; + case 945: if (n[945]++ > 0) check ('a string 945'); break; + case 946: if (n[946]++ > 0) check ('a string 946'); break; + case 947: if (n[947]++ > 0) check ('a string 947'); break; + case 948: if (n[948]++ > 0) check ('a string 948'); break; + case 949: if (n[949]++ > 0) check ('a string 949'); break; + case 950: if (n[950]++ > 0) check ('a string 950'); break; + case 951: if (n[951]++ > 0) check ('a string 951'); break; + case 952: if (n[952]++ > 0) check ('a string 952'); break; + case 953: if (n[953]++ > 0) check ('a string 953'); break; + case 954: if (n[954]++ > 0) check ('a string 954'); break; + case 955: if (n[955]++ > 0) check ('a string 955'); break; + case 956: if (n[956]++ > 0) check ('a string 956'); break; + case 957: if (n[957]++ > 0) check ('a string 957'); break; + case 958: if (n[958]++ > 0) check ('a string 958'); break; + case 959: if (n[959]++ > 0) check ('a string 959'); break; + case 960: if (n[960]++ > 0) check ('a string 960'); break; + case 961: if (n[961]++ > 0) check ('a string 961'); break; + case 962: if (n[962]++ > 0) check ('a string 962'); break; + case 963: if (n[963]++ > 0) check ('a string 963'); break; + case 964: if (n[964]++ > 0) check ('a string 964'); break; + case 965: if (n[965]++ > 0) check ('a string 965'); break; + case 966: if (n[966]++ > 0) check ('a string 966'); break; + case 967: if (n[967]++ > 0) check ('a string 967'); break; + case 968: if (n[968]++ > 0) check ('a string 968'); break; + case 969: if (n[969]++ > 0) check ('a string 969'); break; + case 970: if (n[970]++ > 0) check ('a string 970'); break; + case 971: if (n[971]++ > 0) check ('a string 971'); break; + case 972: if (n[972]++ > 0) check ('a string 972'); break; + case 973: if (n[973]++ > 0) check ('a string 973'); break; + case 974: if (n[974]++ > 0) check ('a string 974'); break; + case 975: if (n[975]++ > 0) check ('a string 975'); break; + case 976: if (n[976]++ > 0) check ('a string 976'); break; + case 977: if (n[977]++ > 0) check ('a string 977'); break; + case 978: if (n[978]++ > 0) check ('a string 978'); break; + case 979: if (n[979]++ > 0) check ('a string 979'); break; + case 980: if (n[980]++ > 0) check ('a string 980'); break; + case 981: if (n[981]++ > 0) check ('a string 981'); break; + case 982: if (n[982]++ > 0) check ('a string 982'); break; + case 983: if (n[983]++ > 0) check ('a string 983'); break; + case 984: if (n[984]++ > 0) check ('a string 984'); break; + case 985: if (n[985]++ > 0) check ('a string 985'); break; + case 986: if (n[986]++ > 0) check ('a string 986'); break; + case 987: if (n[987]++ > 0) check ('a string 987'); break; + case 988: if (n[988]++ > 0) check ('a string 988'); break; + case 989: if (n[989]++ > 0) check ('a string 989'); break; + case 990: if (n[990]++ > 0) check ('a string 990'); break; + case 991: if (n[991]++ > 0) check ('a string 991'); break; + case 992: if (n[992]++ > 0) check ('a string 992'); break; + case 993: if (n[993]++ > 0) check ('a string 993'); break; + case 994: if (n[994]++ > 0) check ('a string 994'); break; + case 995: if (n[995]++ > 0) check ('a string 995'); break; + case 996: if (n[996]++ > 0) check ('a string 996'); break; + case 997: if (n[997]++ > 0) check ('a string 997'); break; + case 998: if (n[998]++ > 0) check ('a string 998'); break; + case 999: if (n[999]++ > 0) check ('a string 999'); break; + case 1000: if (n[1000]++ > 0) check ('a string 1000'); break; + case 1001: if (n[1001]++ > 0) check ('a string 1001'); break; + case 1002: if (n[1002]++ > 0) check ('a string 1002'); break; + case 1003: if (n[1003]++ > 0) check ('a string 1003'); break; + case 1004: if (n[1004]++ > 0) check ('a string 1004'); break; + case 1005: if (n[1005]++ > 0) check ('a string 1005'); break; + case 1006: if (n[1006]++ > 0) check ('a string 1006'); break; + case 1007: if (n[1007]++ > 0) check ('a string 1007'); break; + case 1008: if (n[1008]++ > 0) check ('a string 1008'); break; + case 1009: if (n[1009]++ > 0) check ('a string 1009'); break; + case 1010: if (n[1010]++ > 0) check ('a string 1010'); break; + case 1011: if (n[1011]++ > 0) check ('a string 1011'); break; + case 1012: if (n[1012]++ > 0) check ('a string 1012'); break; + case 1013: if (n[1013]++ > 0) check ('a string 1013'); break; + case 1014: if (n[1014]++ > 0) check ('a string 1014'); break; + case 1015: if (n[1015]++ > 0) check ('a string 1015'); break; + case 1016: if (n[1016]++ > 0) check ('a string 1016'); break; + case 1017: if (n[1017]++ > 0) check ('a string 1017'); break; + case 1018: if (n[1018]++ > 0) check ('a string 1018'); break; + case 1019: if (n[1019]++ > 0) check ('a string 1019'); break; + case 1020: if (n[1020]++ > 0) check ('a string 1020'); break; + case 1021: if (n[1021]++ > 0) check ('a string 1021'); break; + case 1022: if (n[1022]++ > 0) check ('a string 1022'); break; + case 1023: if (n[1023]++ > 0) check ('a string 1023'); break; + case 1024: if (n[1024]++ > 0) check ('a string 1024'); break; + case 1025: if (n[1025]++ > 0) check ('a string 1025'); break; + case 1026: if (n[1026]++ > 0) check ('a string 1026'); break; + case 1027: if (n[1027]++ > 0) check ('a string 1027'); break; + case 1028: if (n[1028]++ > 0) check ('a string 1028'); break; + case 1029: if (n[1029]++ > 0) check ('a string 1029'); break; + case 1030: if (n[1030]++ > 0) check ('a string 1030'); break; + case 1031: if (n[1031]++ > 0) check ('a string 1031'); break; + case 1032: if (n[1032]++ > 0) check ('a string 1032'); break; + case 1033: if (n[1033]++ > 0) check ('a string 1033'); break; + case 1034: if (n[1034]++ > 0) check ('a string 1034'); break; + case 1035: if (n[1035]++ > 0) check ('a string 1035'); break; + case 1036: if (n[1036]++ > 0) check ('a string 1036'); break; + case 1037: if (n[1037]++ > 0) check ('a string 1037'); break; + case 1038: if (n[1038]++ > 0) check ('a string 1038'); break; + case 1039: if (n[1039]++ > 0) check ('a string 1039'); break; + case 1040: if (n[1040]++ > 0) check ('a string 1040'); break; + case 1041: if (n[1041]++ > 0) check ('a string 1041'); break; + case 1042: if (n[1042]++ > 0) check ('a string 1042'); break; + case 1043: if (n[1043]++ > 0) check ('a string 1043'); break; + case 1044: if (n[1044]++ > 0) check ('a string 1044'); break; + case 1045: if (n[1045]++ > 0) check ('a string 1045'); break; + case 1046: if (n[1046]++ > 0) check ('a string 1046'); break; + case 1047: if (n[1047]++ > 0) check ('a string 1047'); break; + case 1048: if (n[1048]++ > 0) check ('a string 1048'); break; + case 1049: if (n[1049]++ > 0) check ('a string 1049'); break; + case 1050: if (n[1050]++ > 0) check ('a string 1050'); break; + case 1051: if (n[1051]++ > 0) check ('a string 1051'); break; + case 1052: if (n[1052]++ > 0) check ('a string 1052'); break; + case 1053: if (n[1053]++ > 0) check ('a string 1053'); break; + case 1054: if (n[1054]++ > 0) check ('a string 1054'); break; + case 1055: if (n[1055]++ > 0) check ('a string 1055'); break; + case 1056: if (n[1056]++ > 0) check ('a string 1056'); break; + case 1057: if (n[1057]++ > 0) check ('a string 1057'); break; + case 1058: if (n[1058]++ > 0) check ('a string 1058'); break; + case 1059: if (n[1059]++ > 0) check ('a string 1059'); break; + case 1060: if (n[1060]++ > 0) check ('a string 1060'); break; + case 1061: if (n[1061]++ > 0) check ('a string 1061'); break; + case 1062: if (n[1062]++ > 0) check ('a string 1062'); break; + case 1063: if (n[1063]++ > 0) check ('a string 1063'); break; + case 1064: if (n[1064]++ > 0) check ('a string 1064'); break; + case 1065: if (n[1065]++ > 0) check ('a string 1065'); break; + case 1066: if (n[1066]++ > 0) check ('a string 1066'); break; + case 1067: if (n[1067]++ > 0) check ('a string 1067'); break; + case 1068: if (n[1068]++ > 0) check ('a string 1068'); break; + case 1069: if (n[1069]++ > 0) check ('a string 1069'); break; + case 1070: if (n[1070]++ > 0) check ('a string 1070'); break; + case 1071: if (n[1071]++ > 0) check ('a string 1071'); break; + case 1072: if (n[1072]++ > 0) check ('a string 1072'); break; + case 1073: if (n[1073]++ > 0) check ('a string 1073'); break; + case 1074: if (n[1074]++ > 0) check ('a string 1074'); break; + case 1075: if (n[1075]++ > 0) check ('a string 1075'); break; + case 1076: if (n[1076]++ > 0) check ('a string 1076'); break; + case 1077: if (n[1077]++ > 0) check ('a string 1077'); break; + case 1078: if (n[1078]++ > 0) check ('a string 1078'); break; + case 1079: if (n[1079]++ > 0) check ('a string 1079'); break; + case 1080: if (n[1080]++ > 0) check ('a string 1080'); break; + case 1081: if (n[1081]++ > 0) check ('a string 1081'); break; + case 1082: if (n[1082]++ > 0) check ('a string 1082'); break; + case 1083: if (n[1083]++ > 0) check ('a string 1083'); break; + case 1084: if (n[1084]++ > 0) check ('a string 1084'); break; + case 1085: if (n[1085]++ > 0) check ('a string 1085'); break; + case 1086: if (n[1086]++ > 0) check ('a string 1086'); break; + case 1087: if (n[1087]++ > 0) check ('a string 1087'); break; + case 1088: if (n[1088]++ > 0) check ('a string 1088'); break; + case 1089: if (n[1089]++ > 0) check ('a string 1089'); break; + case 1090: if (n[1090]++ > 0) check ('a string 1090'); break; + case 1091: if (n[1091]++ > 0) check ('a string 1091'); break; + case 1092: if (n[1092]++ > 0) check ('a string 1092'); break; + case 1093: if (n[1093]++ > 0) check ('a string 1093'); break; + case 1094: if (n[1094]++ > 0) check ('a string 1094'); break; + case 1095: if (n[1095]++ > 0) check ('a string 1095'); break; + case 1096: if (n[1096]++ > 0) check ('a string 1096'); break; + case 1097: if (n[1097]++ > 0) check ('a string 1097'); break; + case 1098: if (n[1098]++ > 0) check ('a string 1098'); break; + case 1099: if (n[1099]++ > 0) check ('a string 1099'); break; + case 1100: if (n[1100]++ > 0) check ('a string 1100'); break; + case 1101: if (n[1101]++ > 0) check ('a string 1101'); break; + case 1102: if (n[1102]++ > 0) check ('a string 1102'); break; + case 1103: if (n[1103]++ > 0) check ('a string 1103'); break; + case 1104: if (n[1104]++ > 0) check ('a string 1104'); break; + case 1105: if (n[1105]++ > 0) check ('a string 1105'); break; + case 1106: if (n[1106]++ > 0) check ('a string 1106'); break; + case 1107: if (n[1107]++ > 0) check ('a string 1107'); break; + case 1108: if (n[1108]++ > 0) check ('a string 1108'); break; + case 1109: if (n[1109]++ > 0) check ('a string 1109'); break; + case 1110: if (n[1110]++ > 0) check ('a string 1110'); break; + case 1111: if (n[1111]++ > 0) check ('a string 1111'); break; + case 1112: if (n[1112]++ > 0) check ('a string 1112'); break; + case 1113: if (n[1113]++ > 0) check ('a string 1113'); break; + case 1114: if (n[1114]++ > 0) check ('a string 1114'); break; + case 1115: if (n[1115]++ > 0) check ('a string 1115'); break; + case 1116: if (n[1116]++ > 0) check ('a string 1116'); break; + case 1117: if (n[1117]++ > 0) check ('a string 1117'); break; + case 1118: if (n[1118]++ > 0) check ('a string 1118'); break; + case 1119: if (n[1119]++ > 0) check ('a string 1119'); break; + case 1120: if (n[1120]++ > 0) check ('a string 1120'); break; + case 1121: if (n[1121]++ > 0) check ('a string 1121'); break; + case 1122: if (n[1122]++ > 0) check ('a string 1122'); break; + case 1123: if (n[1123]++ > 0) check ('a string 1123'); break; + case 1124: if (n[1124]++ > 0) check ('a string 1124'); break; + case 1125: if (n[1125]++ > 0) check ('a string 1125'); break; + case 1126: if (n[1126]++ > 0) check ('a string 1126'); break; + case 1127: if (n[1127]++ > 0) check ('a string 1127'); break; + case 1128: if (n[1128]++ > 0) check ('a string 1128'); break; + case 1129: if (n[1129]++ > 0) check ('a string 1129'); break; + case 1130: if (n[1130]++ > 0) check ('a string 1130'); break; + case 1131: if (n[1131]++ > 0) check ('a string 1131'); break; + case 1132: if (n[1132]++ > 0) check ('a string 1132'); break; + case 1133: if (n[1133]++ > 0) check ('a string 1133'); break; + case 1134: if (n[1134]++ > 0) check ('a string 1134'); break; + case 1135: if (n[1135]++ > 0) check ('a string 1135'); break; + case 1136: if (n[1136]++ > 0) check ('a string 1136'); break; + case 1137: if (n[1137]++ > 0) check ('a string 1137'); break; + case 1138: if (n[1138]++ > 0) check ('a string 1138'); break; + case 1139: if (n[1139]++ > 0) check ('a string 1139'); break; + case 1140: if (n[1140]++ > 0) check ('a string 1140'); break; + case 1141: if (n[1141]++ > 0) check ('a string 1141'); break; + case 1142: if (n[1142]++ > 0) check ('a string 1142'); break; + case 1143: if (n[1143]++ > 0) check ('a string 1143'); break; + case 1144: if (n[1144]++ > 0) check ('a string 1144'); break; + case 1145: if (n[1145]++ > 0) check ('a string 1145'); break; + case 1146: if (n[1146]++ > 0) check ('a string 1146'); break; + case 1147: if (n[1147]++ > 0) check ('a string 1147'); break; + case 1148: if (n[1148]++ > 0) check ('a string 1148'); break; + case 1149: if (n[1149]++ > 0) check ('a string 1149'); break; + case 1150: if (n[1150]++ > 0) check ('a string 1150'); break; + case 1151: if (n[1151]++ > 0) check ('a string 1151'); break; + case 1152: if (n[1152]++ > 0) check ('a string 1152'); break; + case 1153: if (n[1153]++ > 0) check ('a string 1153'); break; + case 1154: if (n[1154]++ > 0) check ('a string 1154'); break; + case 1155: if (n[1155]++ > 0) check ('a string 1155'); break; + case 1156: if (n[1156]++ > 0) check ('a string 1156'); break; + case 1157: if (n[1157]++ > 0) check ('a string 1157'); break; + case 1158: if (n[1158]++ > 0) check ('a string 1158'); break; + case 1159: if (n[1159]++ > 0) check ('a string 1159'); break; + case 1160: if (n[1160]++ > 0) check ('a string 1160'); break; + case 1161: if (n[1161]++ > 0) check ('a string 1161'); break; + case 1162: if (n[1162]++ > 0) check ('a string 1162'); break; + case 1163: if (n[1163]++ > 0) check ('a string 1163'); break; + case 1164: if (n[1164]++ > 0) check ('a string 1164'); break; + case 1165: if (n[1165]++ > 0) check ('a string 1165'); break; + case 1166: if (n[1166]++ > 0) check ('a string 1166'); break; + case 1167: if (n[1167]++ > 0) check ('a string 1167'); break; + case 1168: if (n[1168]++ > 0) check ('a string 1168'); break; + case 1169: if (n[1169]++ > 0) check ('a string 1169'); break; + case 1170: if (n[1170]++ > 0) check ('a string 1170'); break; + case 1171: if (n[1171]++ > 0) check ('a string 1171'); break; + case 1172: if (n[1172]++ > 0) check ('a string 1172'); break; + case 1173: if (n[1173]++ > 0) check ('a string 1173'); break; + case 1174: if (n[1174]++ > 0) check ('a string 1174'); break; + case 1175: if (n[1175]++ > 0) check ('a string 1175'); break; + case 1176: if (n[1176]++ > 0) check ('a string 1176'); break; + case 1177: if (n[1177]++ > 0) check ('a string 1177'); break; + case 1178: if (n[1178]++ > 0) check ('a string 1178'); break; + case 1179: if (n[1179]++ > 0) check ('a string 1179'); break; + case 1180: if (n[1180]++ > 0) check ('a string 1180'); break; + case 1181: if (n[1181]++ > 0) check ('a string 1181'); break; + case 1182: if (n[1182]++ > 0) check ('a string 1182'); break; + case 1183: if (n[1183]++ > 0) check ('a string 1183'); break; + case 1184: if (n[1184]++ > 0) check ('a string 1184'); break; + case 1185: if (n[1185]++ > 0) check ('a string 1185'); break; + case 1186: if (n[1186]++ > 0) check ('a string 1186'); break; + case 1187: if (n[1187]++ > 0) check ('a string 1187'); break; + case 1188: if (n[1188]++ > 0) check ('a string 1188'); break; + case 1189: if (n[1189]++ > 0) check ('a string 1189'); break; + case 1190: if (n[1190]++ > 0) check ('a string 1190'); break; + case 1191: if (n[1191]++ > 0) check ('a string 1191'); break; + case 1192: if (n[1192]++ > 0) check ('a string 1192'); break; + case 1193: if (n[1193]++ > 0) check ('a string 1193'); break; + case 1194: if (n[1194]++ > 0) check ('a string 1194'); break; + case 1195: if (n[1195]++ > 0) check ('a string 1195'); break; + case 1196: if (n[1196]++ > 0) check ('a string 1196'); break; + case 1197: if (n[1197]++ > 0) check ('a string 1197'); break; + case 1198: if (n[1198]++ > 0) check ('a string 1198'); break; + case 1199: if (n[1199]++ > 0) check ('a string 1199'); break; + case 1200: if (n[1200]++ > 0) check ('a string 1200'); break; + case 1201: if (n[1201]++ > 0) check ('a string 1201'); break; + case 1202: if (n[1202]++ > 0) check ('a string 1202'); break; + case 1203: if (n[1203]++ > 0) check ('a string 1203'); break; + case 1204: if (n[1204]++ > 0) check ('a string 1204'); break; + case 1205: if (n[1205]++ > 0) check ('a string 1205'); break; + case 1206: if (n[1206]++ > 0) check ('a string 1206'); break; + case 1207: if (n[1207]++ > 0) check ('a string 1207'); break; + case 1208: if (n[1208]++ > 0) check ('a string 1208'); break; + case 1209: if (n[1209]++ > 0) check ('a string 1209'); break; + case 1210: if (n[1210]++ > 0) check ('a string 1210'); break; + case 1211: if (n[1211]++ > 0) check ('a string 1211'); break; + case 1212: if (n[1212]++ > 0) check ('a string 1212'); break; + case 1213: if (n[1213]++ > 0) check ('a string 1213'); break; + case 1214: if (n[1214]++ > 0) check ('a string 1214'); break; + case 1215: if (n[1215]++ > 0) check ('a string 1215'); break; + case 1216: if (n[1216]++ > 0) check ('a string 1216'); break; + case 1217: if (n[1217]++ > 0) check ('a string 1217'); break; + case 1218: if (n[1218]++ > 0) check ('a string 1218'); break; + case 1219: if (n[1219]++ > 0) check ('a string 1219'); break; + case 1220: if (n[1220]++ > 0) check ('a string 1220'); break; + case 1221: if (n[1221]++ > 0) check ('a string 1221'); break; + case 1222: if (n[1222]++ > 0) check ('a string 1222'); break; + case 1223: if (n[1223]++ > 0) check ('a string 1223'); break; + case 1224: if (n[1224]++ > 0) check ('a string 1224'); break; + case 1225: if (n[1225]++ > 0) check ('a string 1225'); break; + case 1226: if (n[1226]++ > 0) check ('a string 1226'); break; + case 1227: if (n[1227]++ > 0) check ('a string 1227'); break; + case 1228: if (n[1228]++ > 0) check ('a string 1228'); break; + case 1229: if (n[1229]++ > 0) check ('a string 1229'); break; + case 1230: if (n[1230]++ > 0) check ('a string 1230'); break; + case 1231: if (n[1231]++ > 0) check ('a string 1231'); break; + case 1232: if (n[1232]++ > 0) check ('a string 1232'); break; + case 1233: if (n[1233]++ > 0) check ('a string 1233'); break; + case 1234: if (n[1234]++ > 0) check ('a string 1234'); break; + case 1235: if (n[1235]++ > 0) check ('a string 1235'); break; + case 1236: if (n[1236]++ > 0) check ('a string 1236'); break; + case 1237: if (n[1237]++ > 0) check ('a string 1237'); break; + case 1238: if (n[1238]++ > 0) check ('a string 1238'); break; + case 1239: if (n[1239]++ > 0) check ('a string 1239'); break; + case 1240: if (n[1240]++ > 0) check ('a string 1240'); break; + case 1241: if (n[1241]++ > 0) check ('a string 1241'); break; + case 1242: if (n[1242]++ > 0) check ('a string 1242'); break; + case 1243: if (n[1243]++ > 0) check ('a string 1243'); break; + case 1244: if (n[1244]++ > 0) check ('a string 1244'); break; + case 1245: if (n[1245]++ > 0) check ('a string 1245'); break; + case 1246: if (n[1246]++ > 0) check ('a string 1246'); break; + case 1247: if (n[1247]++ > 0) check ('a string 1247'); break; + case 1248: if (n[1248]++ > 0) check ('a string 1248'); break; + case 1249: if (n[1249]++ > 0) check ('a string 1249'); break; + case 1250: if (n[1250]++ > 0) check ('a string 1250'); break; + case 1251: if (n[1251]++ > 0) check ('a string 1251'); break; + case 1252: if (n[1252]++ > 0) check ('a string 1252'); break; + case 1253: if (n[1253]++ > 0) check ('a string 1253'); break; + case 1254: if (n[1254]++ > 0) check ('a string 1254'); break; + case 1255: if (n[1255]++ > 0) check ('a string 1255'); break; + case 1256: if (n[1256]++ > 0) check ('a string 1256'); break; + case 1257: if (n[1257]++ > 0) check ('a string 1257'); break; + case 1258: if (n[1258]++ > 0) check ('a string 1258'); break; + case 1259: if (n[1259]++ > 0) check ('a string 1259'); break; + case 1260: if (n[1260]++ > 0) check ('a string 1260'); break; + case 1261: if (n[1261]++ > 0) check ('a string 1261'); break; + case 1262: if (n[1262]++ > 0) check ('a string 1262'); break; + case 1263: if (n[1263]++ > 0) check ('a string 1263'); break; + case 1264: if (n[1264]++ > 0) check ('a string 1264'); break; + case 1265: if (n[1265]++ > 0) check ('a string 1265'); break; + case 1266: if (n[1266]++ > 0) check ('a string 1266'); break; + case 1267: if (n[1267]++ > 0) check ('a string 1267'); break; + case 1268: if (n[1268]++ > 0) check ('a string 1268'); break; + case 1269: if (n[1269]++ > 0) check ('a string 1269'); break; + case 1270: if (n[1270]++ > 0) check ('a string 1270'); break; + case 1271: if (n[1271]++ > 0) check ('a string 1271'); break; + case 1272: if (n[1272]++ > 0) check ('a string 1272'); break; + case 1273: if (n[1273]++ > 0) check ('a string 1273'); break; + case 1274: if (n[1274]++ > 0) check ('a string 1274'); break; + case 1275: if (n[1275]++ > 0) check ('a string 1275'); break; + case 1276: if (n[1276]++ > 0) check ('a string 1276'); break; + case 1277: if (n[1277]++ > 0) check ('a string 1277'); break; + case 1278: if (n[1278]++ > 0) check ('a string 1278'); break; + case 1279: if (n[1279]++ > 0) check ('a string 1279'); break; + case 1280: if (n[1280]++ > 0) check ('a string 1280'); break; + case 1281: if (n[1281]++ > 0) check ('a string 1281'); break; + case 1282: if (n[1282]++ > 0) check ('a string 1282'); break; + case 1283: if (n[1283]++ > 0) check ('a string 1283'); break; + case 1284: if (n[1284]++ > 0) check ('a string 1284'); break; + case 1285: if (n[1285]++ > 0) check ('a string 1285'); break; + case 1286: if (n[1286]++ > 0) check ('a string 1286'); break; + case 1287: if (n[1287]++ > 0) check ('a string 1287'); break; + case 1288: if (n[1288]++ > 0) check ('a string 1288'); break; + case 1289: if (n[1289]++ > 0) check ('a string 1289'); break; + case 1290: if (n[1290]++ > 0) check ('a string 1290'); break; + case 1291: if (n[1291]++ > 0) check ('a string 1291'); break; + case 1292: if (n[1292]++ > 0) check ('a string 1292'); break; + case 1293: if (n[1293]++ > 0) check ('a string 1293'); break; + case 1294: if (n[1294]++ > 0) check ('a string 1294'); break; + case 1295: if (n[1295]++ > 0) check ('a string 1295'); break; + case 1296: if (n[1296]++ > 0) check ('a string 1296'); break; + case 1297: if (n[1297]++ > 0) check ('a string 1297'); break; + case 1298: if (n[1298]++ > 0) check ('a string 1298'); break; + case 1299: if (n[1299]++ > 0) check ('a string 1299'); break; + case 1300: if (n[1300]++ > 0) check ('a string 1300'); break; + case 1301: if (n[1301]++ > 0) check ('a string 1301'); break; + case 1302: if (n[1302]++ > 0) check ('a string 1302'); break; + case 1303: if (n[1303]++ > 0) check ('a string 1303'); break; + case 1304: if (n[1304]++ > 0) check ('a string 1304'); break; + case 1305: if (n[1305]++ > 0) check ('a string 1305'); break; + case 1306: if (n[1306]++ > 0) check ('a string 1306'); break; + case 1307: if (n[1307]++ > 0) check ('a string 1307'); break; + case 1308: if (n[1308]++ > 0) check ('a string 1308'); break; + case 1309: if (n[1309]++ > 0) check ('a string 1309'); break; + case 1310: if (n[1310]++ > 0) check ('a string 1310'); break; + case 1311: if (n[1311]++ > 0) check ('a string 1311'); break; + case 1312: if (n[1312]++ > 0) check ('a string 1312'); break; + case 1313: if (n[1313]++ > 0) check ('a string 1313'); break; + case 1314: if (n[1314]++ > 0) check ('a string 1314'); break; + case 1315: if (n[1315]++ > 0) check ('a string 1315'); break; + case 1316: if (n[1316]++ > 0) check ('a string 1316'); break; + case 1317: if (n[1317]++ > 0) check ('a string 1317'); break; + case 1318: if (n[1318]++ > 0) check ('a string 1318'); break; + case 1319: if (n[1319]++ > 0) check ('a string 1319'); break; + case 1320: if (n[1320]++ > 0) check ('a string 1320'); break; + case 1321: if (n[1321]++ > 0) check ('a string 1321'); break; + case 1322: if (n[1322]++ > 0) check ('a string 1322'); break; + case 1323: if (n[1323]++ > 0) check ('a string 1323'); break; + case 1324: if (n[1324]++ > 0) check ('a string 1324'); break; + case 1325: if (n[1325]++ > 0) check ('a string 1325'); break; + case 1326: if (n[1326]++ > 0) check ('a string 1326'); break; + case 1327: if (n[1327]++ > 0) check ('a string 1327'); break; + case 1328: if (n[1328]++ > 0) check ('a string 1328'); break; + case 1329: if (n[1329]++ > 0) check ('a string 1329'); break; + case 1330: if (n[1330]++ > 0) check ('a string 1330'); break; + case 1331: if (n[1331]++ > 0) check ('a string 1331'); break; + case 1332: if (n[1332]++ > 0) check ('a string 1332'); break; + case 1333: if (n[1333]++ > 0) check ('a string 1333'); break; + case 1334: if (n[1334]++ > 0) check ('a string 1334'); break; + case 1335: if (n[1335]++ > 0) check ('a string 1335'); break; + case 1336: if (n[1336]++ > 0) check ('a string 1336'); break; + case 1337: if (n[1337]++ > 0) check ('a string 1337'); break; + case 1338: if (n[1338]++ > 0) check ('a string 1338'); break; + case 1339: if (n[1339]++ > 0) check ('a string 1339'); break; + case 1340: if (n[1340]++ > 0) check ('a string 1340'); break; + case 1341: if (n[1341]++ > 0) check ('a string 1341'); break; + case 1342: if (n[1342]++ > 0) check ('a string 1342'); break; + case 1343: if (n[1343]++ > 0) check ('a string 1343'); break; + case 1344: if (n[1344]++ > 0) check ('a string 1344'); break; + case 1345: if (n[1345]++ > 0) check ('a string 1345'); break; + case 1346: if (n[1346]++ > 0) check ('a string 1346'); break; + case 1347: if (n[1347]++ > 0) check ('a string 1347'); break; + case 1348: if (n[1348]++ > 0) check ('a string 1348'); break; + case 1349: if (n[1349]++ > 0) check ('a string 1349'); break; + case 1350: if (n[1350]++ > 0) check ('a string 1350'); break; + case 1351: if (n[1351]++ > 0) check ('a string 1351'); break; + case 1352: if (n[1352]++ > 0) check ('a string 1352'); break; + case 1353: if (n[1353]++ > 0) check ('a string 1353'); break; + case 1354: if (n[1354]++ > 0) check ('a string 1354'); break; + case 1355: if (n[1355]++ > 0) check ('a string 1355'); break; + case 1356: if (n[1356]++ > 0) check ('a string 1356'); break; + case 1357: if (n[1357]++ > 0) check ('a string 1357'); break; + case 1358: if (n[1358]++ > 0) check ('a string 1358'); break; + case 1359: if (n[1359]++ > 0) check ('a string 1359'); break; + case 1360: if (n[1360]++ > 0) check ('a string 1360'); break; + case 1361: if (n[1361]++ > 0) check ('a string 1361'); break; + case 1362: if (n[1362]++ > 0) check ('a string 1362'); break; + case 1363: if (n[1363]++ > 0) check ('a string 1363'); break; + case 1364: if (n[1364]++ > 0) check ('a string 1364'); break; + case 1365: if (n[1365]++ > 0) check ('a string 1365'); break; + case 1366: if (n[1366]++ > 0) check ('a string 1366'); break; + case 1367: if (n[1367]++ > 0) check ('a string 1367'); break; + case 1368: if (n[1368]++ > 0) check ('a string 1368'); break; + case 1369: if (n[1369]++ > 0) check ('a string 1369'); break; + case 1370: if (n[1370]++ > 0) check ('a string 1370'); break; + case 1371: if (n[1371]++ > 0) check ('a string 1371'); break; + case 1372: if (n[1372]++ > 0) check ('a string 1372'); break; + case 1373: if (n[1373]++ > 0) check ('a string 1373'); break; + case 1374: if (n[1374]++ > 0) check ('a string 1374'); break; + case 1375: if (n[1375]++ > 0) check ('a string 1375'); break; + case 1376: if (n[1376]++ > 0) check ('a string 1376'); break; + case 1377: if (n[1377]++ > 0) check ('a string 1377'); break; + case 1378: if (n[1378]++ > 0) check ('a string 1378'); break; + case 1379: if (n[1379]++ > 0) check ('a string 1379'); break; + case 1380: if (n[1380]++ > 0) check ('a string 1380'); break; + case 1381: if (n[1381]++ > 0) check ('a string 1381'); break; + case 1382: if (n[1382]++ > 0) check ('a string 1382'); break; + case 1383: if (n[1383]++ > 0) check ('a string 1383'); break; + case 1384: if (n[1384]++ > 0) check ('a string 1384'); break; + case 1385: if (n[1385]++ > 0) check ('a string 1385'); break; + case 1386: if (n[1386]++ > 0) check ('a string 1386'); break; + case 1387: if (n[1387]++ > 0) check ('a string 1387'); break; + case 1388: if (n[1388]++ > 0) check ('a string 1388'); break; + case 1389: if (n[1389]++ > 0) check ('a string 1389'); break; + case 1390: if (n[1390]++ > 0) check ('a string 1390'); break; + case 1391: if (n[1391]++ > 0) check ('a string 1391'); break; + case 1392: if (n[1392]++ > 0) check ('a string 1392'); break; + case 1393: if (n[1393]++ > 0) check ('a string 1393'); break; + case 1394: if (n[1394]++ > 0) check ('a string 1394'); break; + case 1395: if (n[1395]++ > 0) check ('a string 1395'); break; + case 1396: if (n[1396]++ > 0) check ('a string 1396'); break; + case 1397: if (n[1397]++ > 0) check ('a string 1397'); break; + case 1398: if (n[1398]++ > 0) check ('a string 1398'); break; + case 1399: if (n[1399]++ > 0) check ('a string 1399'); break; + case 1400: if (n[1400]++ > 0) check ('a string 1400'); break; + case 1401: if (n[1401]++ > 0) check ('a string 1401'); break; + case 1402: if (n[1402]++ > 0) check ('a string 1402'); break; + case 1403: if (n[1403]++ > 0) check ('a string 1403'); break; + case 1404: if (n[1404]++ > 0) check ('a string 1404'); break; + case 1405: if (n[1405]++ > 0) check ('a string 1405'); break; + case 1406: if (n[1406]++ > 0) check ('a string 1406'); break; + case 1407: if (n[1407]++ > 0) check ('a string 1407'); break; + case 1408: if (n[1408]++ > 0) check ('a string 1408'); break; + case 1409: if (n[1409]++ > 0) check ('a string 1409'); break; + case 1410: if (n[1410]++ > 0) check ('a string 1410'); break; + case 1411: if (n[1411]++ > 0) check ('a string 1411'); break; + case 1412: if (n[1412]++ > 0) check ('a string 1412'); break; + case 1413: if (n[1413]++ > 0) check ('a string 1413'); break; + case 1414: if (n[1414]++ > 0) check ('a string 1414'); break; + case 1415: if (n[1415]++ > 0) check ('a string 1415'); break; + case 1416: if (n[1416]++ > 0) check ('a string 1416'); break; + case 1417: if (n[1417]++ > 0) check ('a string 1417'); break; + case 1418: if (n[1418]++ > 0) check ('a string 1418'); break; + case 1419: if (n[1419]++ > 0) check ('a string 1419'); break; + case 1420: if (n[1420]++ > 0) check ('a string 1420'); break; + case 1421: if (n[1421]++ > 0) check ('a string 1421'); break; + case 1422: if (n[1422]++ > 0) check ('a string 1422'); break; + case 1423: if (n[1423]++ > 0) check ('a string 1423'); break; + case 1424: if (n[1424]++ > 0) check ('a string 1424'); break; + case 1425: if (n[1425]++ > 0) check ('a string 1425'); break; + case 1426: if (n[1426]++ > 0) check ('a string 1426'); break; + case 1427: if (n[1427]++ > 0) check ('a string 1427'); break; + case 1428: if (n[1428]++ > 0) check ('a string 1428'); break; + case 1429: if (n[1429]++ > 0) check ('a string 1429'); break; + case 1430: if (n[1430]++ > 0) check ('a string 1430'); break; + case 1431: if (n[1431]++ > 0) check ('a string 1431'); break; + case 1432: if (n[1432]++ > 0) check ('a string 1432'); break; + case 1433: if (n[1433]++ > 0) check ('a string 1433'); break; + case 1434: if (n[1434]++ > 0) check ('a string 1434'); break; + case 1435: if (n[1435]++ > 0) check ('a string 1435'); break; + case 1436: if (n[1436]++ > 0) check ('a string 1436'); break; + case 1437: if (n[1437]++ > 0) check ('a string 1437'); break; + case 1438: if (n[1438]++ > 0) check ('a string 1438'); break; + case 1439: if (n[1439]++ > 0) check ('a string 1439'); break; + case 1440: if (n[1440]++ > 0) check ('a string 1440'); break; + case 1441: if (n[1441]++ > 0) check ('a string 1441'); break; + case 1442: if (n[1442]++ > 0) check ('a string 1442'); break; + case 1443: if (n[1443]++ > 0) check ('a string 1443'); break; + case 1444: if (n[1444]++ > 0) check ('a string 1444'); break; + case 1445: if (n[1445]++ > 0) check ('a string 1445'); break; + case 1446: if (n[1446]++ > 0) check ('a string 1446'); break; + case 1447: if (n[1447]++ > 0) check ('a string 1447'); break; + case 1448: if (n[1448]++ > 0) check ('a string 1448'); break; + case 1449: if (n[1449]++ > 0) check ('a string 1449'); break; + case 1450: if (n[1450]++ > 0) check ('a string 1450'); break; + case 1451: if (n[1451]++ > 0) check ('a string 1451'); break; + case 1452: if (n[1452]++ > 0) check ('a string 1452'); break; + case 1453: if (n[1453]++ > 0) check ('a string 1453'); break; + case 1454: if (n[1454]++ > 0) check ('a string 1454'); break; + case 1455: if (n[1455]++ > 0) check ('a string 1455'); break; + case 1456: if (n[1456]++ > 0) check ('a string 1456'); break; + case 1457: if (n[1457]++ > 0) check ('a string 1457'); break; + case 1458: if (n[1458]++ > 0) check ('a string 1458'); break; + case 1459: if (n[1459]++ > 0) check ('a string 1459'); break; + case 1460: if (n[1460]++ > 0) check ('a string 1460'); break; + case 1461: if (n[1461]++ > 0) check ('a string 1461'); break; + case 1462: if (n[1462]++ > 0) check ('a string 1462'); break; + case 1463: if (n[1463]++ > 0) check ('a string 1463'); break; + case 1464: if (n[1464]++ > 0) check ('a string 1464'); break; + case 1465: if (n[1465]++ > 0) check ('a string 1465'); break; + case 1466: if (n[1466]++ > 0) check ('a string 1466'); break; + case 1467: if (n[1467]++ > 0) check ('a string 1467'); break; + case 1468: if (n[1468]++ > 0) check ('a string 1468'); break; + case 1469: if (n[1469]++ > 0) check ('a string 1469'); break; + case 1470: if (n[1470]++ > 0) check ('a string 1470'); break; + case 1471: if (n[1471]++ > 0) check ('a string 1471'); break; + case 1472: if (n[1472]++ > 0) check ('a string 1472'); break; + case 1473: if (n[1473]++ > 0) check ('a string 1473'); break; + case 1474: if (n[1474]++ > 0) check ('a string 1474'); break; + case 1475: if (n[1475]++ > 0) check ('a string 1475'); break; + case 1476: if (n[1476]++ > 0) check ('a string 1476'); break; + case 1477: if (n[1477]++ > 0) check ('a string 1477'); break; + case 1478: if (n[1478]++ > 0) check ('a string 1478'); break; + case 1479: if (n[1479]++ > 0) check ('a string 1479'); break; + case 1480: if (n[1480]++ > 0) check ('a string 1480'); break; + case 1481: if (n[1481]++ > 0) check ('a string 1481'); break; + case 1482: if (n[1482]++ > 0) check ('a string 1482'); break; + case 1483: if (n[1483]++ > 0) check ('a string 1483'); break; + case 1484: if (n[1484]++ > 0) check ('a string 1484'); break; + case 1485: if (n[1485]++ > 0) check ('a string 1485'); break; + case 1486: if (n[1486]++ > 0) check ('a string 1486'); break; + case 1487: if (n[1487]++ > 0) check ('a string 1487'); break; + case 1488: if (n[1488]++ > 0) check ('a string 1488'); break; + case 1489: if (n[1489]++ > 0) check ('a string 1489'); break; + case 1490: if (n[1490]++ > 0) check ('a string 1490'); break; + case 1491: if (n[1491]++ > 0) check ('a string 1491'); break; + case 1492: if (n[1492]++ > 0) check ('a string 1492'); break; + case 1493: if (n[1493]++ > 0) check ('a string 1493'); break; + case 1494: if (n[1494]++ > 0) check ('a string 1494'); break; + case 1495: if (n[1495]++ > 0) check ('a string 1495'); break; + case 1496: if (n[1496]++ > 0) check ('a string 1496'); break; + case 1497: if (n[1497]++ > 0) check ('a string 1497'); break; + case 1498: if (n[1498]++ > 0) check ('a string 1498'); break; + case 1499: if (n[1499]++ > 0) check ('a string 1499'); break; + case 1500: if (n[1500]++ > 0) check ('a string 1500'); break; + case 1501: if (n[1501]++ > 0) check ('a string 1501'); break; + case 1502: if (n[1502]++ > 0) check ('a string 1502'); break; + case 1503: if (n[1503]++ > 0) check ('a string 1503'); break; + case 1504: if (n[1504]++ > 0) check ('a string 1504'); break; + case 1505: if (n[1505]++ > 0) check ('a string 1505'); break; + case 1506: if (n[1506]++ > 0) check ('a string 1506'); break; + case 1507: if (n[1507]++ > 0) check ('a string 1507'); break; + case 1508: if (n[1508]++ > 0) check ('a string 1508'); break; + case 1509: if (n[1509]++ > 0) check ('a string 1509'); break; + case 1510: if (n[1510]++ > 0) check ('a string 1510'); break; + case 1511: if (n[1511]++ > 0) check ('a string 1511'); break; + case 1512: if (n[1512]++ > 0) check ('a string 1512'); break; + case 1513: if (n[1513]++ > 0) check ('a string 1513'); break; + case 1514: if (n[1514]++ > 0) check ('a string 1514'); break; + case 1515: if (n[1515]++ > 0) check ('a string 1515'); break; + case 1516: if (n[1516]++ > 0) check ('a string 1516'); break; + case 1517: if (n[1517]++ > 0) check ('a string 1517'); break; + case 1518: if (n[1518]++ > 0) check ('a string 1518'); break; + case 1519: if (n[1519]++ > 0) check ('a string 1519'); break; + case 1520: if (n[1520]++ > 0) check ('a string 1520'); break; + case 1521: if (n[1521]++ > 0) check ('a string 1521'); break; + case 1522: if (n[1522]++ > 0) check ('a string 1522'); break; + case 1523: if (n[1523]++ > 0) check ('a string 1523'); break; + case 1524: if (n[1524]++ > 0) check ('a string 1524'); break; + case 1525: if (n[1525]++ > 0) check ('a string 1525'); break; + case 1526: if (n[1526]++ > 0) check ('a string 1526'); break; + case 1527: if (n[1527]++ > 0) check ('a string 1527'); break; + case 1528: if (n[1528]++ > 0) check ('a string 1528'); break; + case 1529: if (n[1529]++ > 0) check ('a string 1529'); break; + case 1530: if (n[1530]++ > 0) check ('a string 1530'); break; + case 1531: if (n[1531]++ > 0) check ('a string 1531'); break; + case 1532: if (n[1532]++ > 0) check ('a string 1532'); break; + case 1533: if (n[1533]++ > 0) check ('a string 1533'); break; + case 1534: if (n[1534]++ > 0) check ('a string 1534'); break; + case 1535: if (n[1535]++ > 0) check ('a string 1535'); break; + case 1536: if (n[1536]++ > 0) check ('a string 1536'); break; + case 1537: if (n[1537]++ > 0) check ('a string 1537'); break; + case 1538: if (n[1538]++ > 0) check ('a string 1538'); break; + case 1539: if (n[1539]++ > 0) check ('a string 1539'); break; + case 1540: if (n[1540]++ > 0) check ('a string 1540'); break; + case 1541: if (n[1541]++ > 0) check ('a string 1541'); break; + case 1542: if (n[1542]++ > 0) check ('a string 1542'); break; + case 1543: if (n[1543]++ > 0) check ('a string 1543'); break; + case 1544: if (n[1544]++ > 0) check ('a string 1544'); break; + case 1545: if (n[1545]++ > 0) check ('a string 1545'); break; + case 1546: if (n[1546]++ > 0) check ('a string 1546'); break; + case 1547: if (n[1547]++ > 0) check ('a string 1547'); break; + case 1548: if (n[1548]++ > 0) check ('a string 1548'); break; + case 1549: if (n[1549]++ > 0) check ('a string 1549'); break; + case 1550: if (n[1550]++ > 0) check ('a string 1550'); break; + case 1551: if (n[1551]++ > 0) check ('a string 1551'); break; + case 1552: if (n[1552]++ > 0) check ('a string 1552'); break; + case 1553: if (n[1553]++ > 0) check ('a string 1553'); break; + case 1554: if (n[1554]++ > 0) check ('a string 1554'); break; + case 1555: if (n[1555]++ > 0) check ('a string 1555'); break; + case 1556: if (n[1556]++ > 0) check ('a string 1556'); break; + case 1557: if (n[1557]++ > 0) check ('a string 1557'); break; + case 1558: if (n[1558]++ > 0) check ('a string 1558'); break; + case 1559: if (n[1559]++ > 0) check ('a string 1559'); break; + case 1560: if (n[1560]++ > 0) check ('a string 1560'); break; + case 1561: if (n[1561]++ > 0) check ('a string 1561'); break; + case 1562: if (n[1562]++ > 0) check ('a string 1562'); break; + case 1563: if (n[1563]++ > 0) check ('a string 1563'); break; + case 1564: if (n[1564]++ > 0) check ('a string 1564'); break; + case 1565: if (n[1565]++ > 0) check ('a string 1565'); break; + case 1566: if (n[1566]++ > 0) check ('a string 1566'); break; + case 1567: if (n[1567]++ > 0) check ('a string 1567'); break; + case 1568: if (n[1568]++ > 0) check ('a string 1568'); break; + case 1569: if (n[1569]++ > 0) check ('a string 1569'); break; + case 1570: if (n[1570]++ > 0) check ('a string 1570'); break; + case 1571: if (n[1571]++ > 0) check ('a string 1571'); break; + case 1572: if (n[1572]++ > 0) check ('a string 1572'); break; + case 1573: if (n[1573]++ > 0) check ('a string 1573'); break; + case 1574: if (n[1574]++ > 0) check ('a string 1574'); break; + case 1575: if (n[1575]++ > 0) check ('a string 1575'); break; + case 1576: if (n[1576]++ > 0) check ('a string 1576'); break; + case 1577: if (n[1577]++ > 0) check ('a string 1577'); break; + case 1578: if (n[1578]++ > 0) check ('a string 1578'); break; + case 1579: if (n[1579]++ > 0) check ('a string 1579'); break; + case 1580: if (n[1580]++ > 0) check ('a string 1580'); break; + case 1581: if (n[1581]++ > 0) check ('a string 1581'); break; + case 1582: if (n[1582]++ > 0) check ('a string 1582'); break; + case 1583: if (n[1583]++ > 0) check ('a string 1583'); break; + case 1584: if (n[1584]++ > 0) check ('a string 1584'); break; + case 1585: if (n[1585]++ > 0) check ('a string 1585'); break; + case 1586: if (n[1586]++ > 0) check ('a string 1586'); break; + case 1587: if (n[1587]++ > 0) check ('a string 1587'); break; + case 1588: if (n[1588]++ > 0) check ('a string 1588'); break; + case 1589: if (n[1589]++ > 0) check ('a string 1589'); break; + case 1590: if (n[1590]++ > 0) check ('a string 1590'); break; + case 1591: if (n[1591]++ > 0) check ('a string 1591'); break; + case 1592: if (n[1592]++ > 0) check ('a string 1592'); break; + case 1593: if (n[1593]++ > 0) check ('a string 1593'); break; + case 1594: if (n[1594]++ > 0) check ('a string 1594'); break; + case 1595: if (n[1595]++ > 0) check ('a string 1595'); break; + case 1596: if (n[1596]++ > 0) check ('a string 1596'); break; + case 1597: if (n[1597]++ > 0) check ('a string 1597'); break; + case 1598: if (n[1598]++ > 0) check ('a string 1598'); break; + case 1599: if (n[1599]++ > 0) check ('a string 1599'); break; + case 1600: if (n[1600]++ > 0) check ('a string 1600'); break; + case 1601: if (n[1601]++ > 0) check ('a string 1601'); break; + case 1602: if (n[1602]++ > 0) check ('a string 1602'); break; + case 1603: if (n[1603]++ > 0) check ('a string 1603'); break; + case 1604: if (n[1604]++ > 0) check ('a string 1604'); break; + case 1605: if (n[1605]++ > 0) check ('a string 1605'); break; + case 1606: if (n[1606]++ > 0) check ('a string 1606'); break; + case 1607: if (n[1607]++ > 0) check ('a string 1607'); break; + case 1608: if (n[1608]++ > 0) check ('a string 1608'); break; + case 1609: if (n[1609]++ > 0) check ('a string 1609'); break; + case 1610: if (n[1610]++ > 0) check ('a string 1610'); break; + case 1611: if (n[1611]++ > 0) check ('a string 1611'); break; + case 1612: if (n[1612]++ > 0) check ('a string 1612'); break; + case 1613: if (n[1613]++ > 0) check ('a string 1613'); break; + case 1614: if (n[1614]++ > 0) check ('a string 1614'); break; + case 1615: if (n[1615]++ > 0) check ('a string 1615'); break; + case 1616: if (n[1616]++ > 0) check ('a string 1616'); break; + case 1617: if (n[1617]++ > 0) check ('a string 1617'); break; + case 1618: if (n[1618]++ > 0) check ('a string 1618'); break; + case 1619: if (n[1619]++ > 0) check ('a string 1619'); break; + case 1620: if (n[1620]++ > 0) check ('a string 1620'); break; + case 1621: if (n[1621]++ > 0) check ('a string 1621'); break; + case 1622: if (n[1622]++ > 0) check ('a string 1622'); break; + case 1623: if (n[1623]++ > 0) check ('a string 1623'); break; + case 1624: if (n[1624]++ > 0) check ('a string 1624'); break; + case 1625: if (n[1625]++ > 0) check ('a string 1625'); break; + case 1626: if (n[1626]++ > 0) check ('a string 1626'); break; + case 1627: if (n[1627]++ > 0) check ('a string 1627'); break; + case 1628: if (n[1628]++ > 0) check ('a string 1628'); break; + case 1629: if (n[1629]++ > 0) check ('a string 1629'); break; + case 1630: if (n[1630]++ > 0) check ('a string 1630'); break; + case 1631: if (n[1631]++ > 0) check ('a string 1631'); break; + case 1632: if (n[1632]++ > 0) check ('a string 1632'); break; + case 1633: if (n[1633]++ > 0) check ('a string 1633'); break; + case 1634: if (n[1634]++ > 0) check ('a string 1634'); break; + case 1635: if (n[1635]++ > 0) check ('a string 1635'); break; + case 1636: if (n[1636]++ > 0) check ('a string 1636'); break; + case 1637: if (n[1637]++ > 0) check ('a string 1637'); break; + case 1638: if (n[1638]++ > 0) check ('a string 1638'); break; + case 1639: if (n[1639]++ > 0) check ('a string 1639'); break; + case 1640: if (n[1640]++ > 0) check ('a string 1640'); break; + case 1641: if (n[1641]++ > 0) check ('a string 1641'); break; + case 1642: if (n[1642]++ > 0) check ('a string 1642'); break; + case 1643: if (n[1643]++ > 0) check ('a string 1643'); break; + case 1644: if (n[1644]++ > 0) check ('a string 1644'); break; + case 1645: if (n[1645]++ > 0) check ('a string 1645'); break; + case 1646: if (n[1646]++ > 0) check ('a string 1646'); break; + case 1647: if (n[1647]++ > 0) check ('a string 1647'); break; + case 1648: if (n[1648]++ > 0) check ('a string 1648'); break; + case 1649: if (n[1649]++ > 0) check ('a string 1649'); break; + case 1650: if (n[1650]++ > 0) check ('a string 1650'); break; + case 1651: if (n[1651]++ > 0) check ('a string 1651'); break; + case 1652: if (n[1652]++ > 0) check ('a string 1652'); break; + case 1653: if (n[1653]++ > 0) check ('a string 1653'); break; + case 1654: if (n[1654]++ > 0) check ('a string 1654'); break; + case 1655: if (n[1655]++ > 0) check ('a string 1655'); break; + case 1656: if (n[1656]++ > 0) check ('a string 1656'); break; + case 1657: if (n[1657]++ > 0) check ('a string 1657'); break; + case 1658: if (n[1658]++ > 0) check ('a string 1658'); break; + case 1659: if (n[1659]++ > 0) check ('a string 1659'); break; + case 1660: if (n[1660]++ > 0) check ('a string 1660'); break; + case 1661: if (n[1661]++ > 0) check ('a string 1661'); break; + case 1662: if (n[1662]++ > 0) check ('a string 1662'); break; + case 1663: if (n[1663]++ > 0) check ('a string 1663'); break; + case 1664: if (n[1664]++ > 0) check ('a string 1664'); break; + case 1665: if (n[1665]++ > 0) check ('a string 1665'); break; + case 1666: if (n[1666]++ > 0) check ('a string 1666'); break; + case 1667: if (n[1667]++ > 0) check ('a string 1667'); break; + case 1668: if (n[1668]++ > 0) check ('a string 1668'); break; + case 1669: if (n[1669]++ > 0) check ('a string 1669'); break; + case 1670: if (n[1670]++ > 0) check ('a string 1670'); break; + case 1671: if (n[1671]++ > 0) check ('a string 1671'); break; + case 1672: if (n[1672]++ > 0) check ('a string 1672'); break; + case 1673: if (n[1673]++ > 0) check ('a string 1673'); break; + case 1674: if (n[1674]++ > 0) check ('a string 1674'); break; + case 1675: if (n[1675]++ > 0) check ('a string 1675'); break; + case 1676: if (n[1676]++ > 0) check ('a string 1676'); break; + case 1677: if (n[1677]++ > 0) check ('a string 1677'); break; + case 1678: if (n[1678]++ > 0) check ('a string 1678'); break; + case 1679: if (n[1679]++ > 0) check ('a string 1679'); break; + case 1680: if (n[1680]++ > 0) check ('a string 1680'); break; + case 1681: if (n[1681]++ > 0) check ('a string 1681'); break; + case 1682: if (n[1682]++ > 0) check ('a string 1682'); break; + case 1683: if (n[1683]++ > 0) check ('a string 1683'); break; + case 1684: if (n[1684]++ > 0) check ('a string 1684'); break; + case 1685: if (n[1685]++ > 0) check ('a string 1685'); break; + case 1686: if (n[1686]++ > 0) check ('a string 1686'); break; + case 1687: if (n[1687]++ > 0) check ('a string 1687'); break; + case 1688: if (n[1688]++ > 0) check ('a string 1688'); break; + case 1689: if (n[1689]++ > 0) check ('a string 1689'); break; + case 1690: if (n[1690]++ > 0) check ('a string 1690'); break; + case 1691: if (n[1691]++ > 0) check ('a string 1691'); break; + case 1692: if (n[1692]++ > 0) check ('a string 1692'); break; + case 1693: if (n[1693]++ > 0) check ('a string 1693'); break; + case 1694: if (n[1694]++ > 0) check ('a string 1694'); break; + case 1695: if (n[1695]++ > 0) check ('a string 1695'); break; + case 1696: if (n[1696]++ > 0) check ('a string 1696'); break; + case 1697: if (n[1697]++ > 0) check ('a string 1697'); break; + case 1698: if (n[1698]++ > 0) check ('a string 1698'); break; + case 1699: if (n[1699]++ > 0) check ('a string 1699'); break; + case 1700: if (n[1700]++ > 0) check ('a string 1700'); break; + case 1701: if (n[1701]++ > 0) check ('a string 1701'); break; + case 1702: if (n[1702]++ > 0) check ('a string 1702'); break; + case 1703: if (n[1703]++ > 0) check ('a string 1703'); break; + case 1704: if (n[1704]++ > 0) check ('a string 1704'); break; + case 1705: if (n[1705]++ > 0) check ('a string 1705'); break; + case 1706: if (n[1706]++ > 0) check ('a string 1706'); break; + case 1707: if (n[1707]++ > 0) check ('a string 1707'); break; + case 1708: if (n[1708]++ > 0) check ('a string 1708'); break; + case 1709: if (n[1709]++ > 0) check ('a string 1709'); break; + case 1710: if (n[1710]++ > 0) check ('a string 1710'); break; + case 1711: if (n[1711]++ > 0) check ('a string 1711'); break; + case 1712: if (n[1712]++ > 0) check ('a string 1712'); break; + case 1713: if (n[1713]++ > 0) check ('a string 1713'); break; + case 1714: if (n[1714]++ > 0) check ('a string 1714'); break; + case 1715: if (n[1715]++ > 0) check ('a string 1715'); break; + case 1716: if (n[1716]++ > 0) check ('a string 1716'); break; + case 1717: if (n[1717]++ > 0) check ('a string 1717'); break; + case 1718: if (n[1718]++ > 0) check ('a string 1718'); break; + case 1719: if (n[1719]++ > 0) check ('a string 1719'); break; + case 1720: if (n[1720]++ > 0) check ('a string 1720'); break; + case 1721: if (n[1721]++ > 0) check ('a string 1721'); break; + case 1722: if (n[1722]++ > 0) check ('a string 1722'); break; + case 1723: if (n[1723]++ > 0) check ('a string 1723'); break; + case 1724: if (n[1724]++ > 0) check ('a string 1724'); break; + case 1725: if (n[1725]++ > 0) check ('a string 1725'); break; + case 1726: if (n[1726]++ > 0) check ('a string 1726'); break; + case 1727: if (n[1727]++ > 0) check ('a string 1727'); break; + case 1728: if (n[1728]++ > 0) check ('a string 1728'); break; + case 1729: if (n[1729]++ > 0) check ('a string 1729'); break; + case 1730: if (n[1730]++ > 0) check ('a string 1730'); break; + case 1731: if (n[1731]++ > 0) check ('a string 1731'); break; + case 1732: if (n[1732]++ > 0) check ('a string 1732'); break; + case 1733: if (n[1733]++ > 0) check ('a string 1733'); break; + case 1734: if (n[1734]++ > 0) check ('a string 1734'); break; + case 1735: if (n[1735]++ > 0) check ('a string 1735'); break; + case 1736: if (n[1736]++ > 0) check ('a string 1736'); break; + case 1737: if (n[1737]++ > 0) check ('a string 1737'); break; + case 1738: if (n[1738]++ > 0) check ('a string 1738'); break; + case 1739: if (n[1739]++ > 0) check ('a string 1739'); break; + case 1740: if (n[1740]++ > 0) check ('a string 1740'); break; + case 1741: if (n[1741]++ > 0) check ('a string 1741'); break; + case 1742: if (n[1742]++ > 0) check ('a string 1742'); break; + case 1743: if (n[1743]++ > 0) check ('a string 1743'); break; + case 1744: if (n[1744]++ > 0) check ('a string 1744'); break; + case 1745: if (n[1745]++ > 0) check ('a string 1745'); break; + case 1746: if (n[1746]++ > 0) check ('a string 1746'); break; + case 1747: if (n[1747]++ > 0) check ('a string 1747'); break; + case 1748: if (n[1748]++ > 0) check ('a string 1748'); break; + case 1749: if (n[1749]++ > 0) check ('a string 1749'); break; + case 1750: if (n[1750]++ > 0) check ('a string 1750'); break; + case 1751: if (n[1751]++ > 0) check ('a string 1751'); break; + case 1752: if (n[1752]++ > 0) check ('a string 1752'); break; + case 1753: if (n[1753]++ > 0) check ('a string 1753'); break; + case 1754: if (n[1754]++ > 0) check ('a string 1754'); break; + case 1755: if (n[1755]++ > 0) check ('a string 1755'); break; + case 1756: if (n[1756]++ > 0) check ('a string 1756'); break; + case 1757: if (n[1757]++ > 0) check ('a string 1757'); break; + case 1758: if (n[1758]++ > 0) check ('a string 1758'); break; + case 1759: if (n[1759]++ > 0) check ('a string 1759'); break; + case 1760: if (n[1760]++ > 0) check ('a string 1760'); break; + case 1761: if (n[1761]++ > 0) check ('a string 1761'); break; + case 1762: if (n[1762]++ > 0) check ('a string 1762'); break; + case 1763: if (n[1763]++ > 0) check ('a string 1763'); break; + case 1764: if (n[1764]++ > 0) check ('a string 1764'); break; + case 1765: if (n[1765]++ > 0) check ('a string 1765'); break; + case 1766: if (n[1766]++ > 0) check ('a string 1766'); break; + case 1767: if (n[1767]++ > 0) check ('a string 1767'); break; + case 1768: if (n[1768]++ > 0) check ('a string 1768'); break; + case 1769: if (n[1769]++ > 0) check ('a string 1769'); break; + case 1770: if (n[1770]++ > 0) check ('a string 1770'); break; + case 1771: if (n[1771]++ > 0) check ('a string 1771'); break; + case 1772: if (n[1772]++ > 0) check ('a string 1772'); break; + case 1773: if (n[1773]++ > 0) check ('a string 1773'); break; + case 1774: if (n[1774]++ > 0) check ('a string 1774'); break; + case 1775: if (n[1775]++ > 0) check ('a string 1775'); break; + case 1776: if (n[1776]++ > 0) check ('a string 1776'); break; + case 1777: if (n[1777]++ > 0) check ('a string 1777'); break; + case 1778: if (n[1778]++ > 0) check ('a string 1778'); break; + case 1779: if (n[1779]++ > 0) check ('a string 1779'); break; + case 1780: if (n[1780]++ > 0) check ('a string 1780'); break; + case 1781: if (n[1781]++ > 0) check ('a string 1781'); break; + case 1782: if (n[1782]++ > 0) check ('a string 1782'); break; + case 1783: if (n[1783]++ > 0) check ('a string 1783'); break; + case 1784: if (n[1784]++ > 0) check ('a string 1784'); break; + case 1785: if (n[1785]++ > 0) check ('a string 1785'); break; + case 1786: if (n[1786]++ > 0) check ('a string 1786'); break; + case 1787: if (n[1787]++ > 0) check ('a string 1787'); break; + case 1788: if (n[1788]++ > 0) check ('a string 1788'); break; + case 1789: if (n[1789]++ > 0) check ('a string 1789'); break; + case 1790: if (n[1790]++ > 0) check ('a string 1790'); break; + case 1791: if (n[1791]++ > 0) check ('a string 1791'); break; + case 1792: if (n[1792]++ > 0) check ('a string 1792'); break; + case 1793: if (n[1793]++ > 0) check ('a string 1793'); break; + case 1794: if (n[1794]++ > 0) check ('a string 1794'); break; + case 1795: if (n[1795]++ > 0) check ('a string 1795'); break; + case 1796: if (n[1796]++ > 0) check ('a string 1796'); break; + case 1797: if (n[1797]++ > 0) check ('a string 1797'); break; + case 1798: if (n[1798]++ > 0) check ('a string 1798'); break; + case 1799: if (n[1799]++ > 0) check ('a string 1799'); break; + case 1800: if (n[1800]++ > 0) check ('a string 1800'); break; + case 1801: if (n[1801]++ > 0) check ('a string 1801'); break; + case 1802: if (n[1802]++ > 0) check ('a string 1802'); break; + case 1803: if (n[1803]++ > 0) check ('a string 1803'); break; + case 1804: if (n[1804]++ > 0) check ('a string 1804'); break; + case 1805: if (n[1805]++ > 0) check ('a string 1805'); break; + case 1806: if (n[1806]++ > 0) check ('a string 1806'); break; + case 1807: if (n[1807]++ > 0) check ('a string 1807'); break; + case 1808: if (n[1808]++ > 0) check ('a string 1808'); break; + case 1809: if (n[1809]++ > 0) check ('a string 1809'); break; + case 1810: if (n[1810]++ > 0) check ('a string 1810'); break; + case 1811: if (n[1811]++ > 0) check ('a string 1811'); break; + case 1812: if (n[1812]++ > 0) check ('a string 1812'); break; + case 1813: if (n[1813]++ > 0) check ('a string 1813'); break; + case 1814: if (n[1814]++ > 0) check ('a string 1814'); break; + case 1815: if (n[1815]++ > 0) check ('a string 1815'); break; + case 1816: if (n[1816]++ > 0) check ('a string 1816'); break; + case 1817: if (n[1817]++ > 0) check ('a string 1817'); break; + case 1818: if (n[1818]++ > 0) check ('a string 1818'); break; + case 1819: if (n[1819]++ > 0) check ('a string 1819'); break; + case 1820: if (n[1820]++ > 0) check ('a string 1820'); break; + case 1821: if (n[1821]++ > 0) check ('a string 1821'); break; + case 1822: if (n[1822]++ > 0) check ('a string 1822'); break; + case 1823: if (n[1823]++ > 0) check ('a string 1823'); break; + case 1824: if (n[1824]++ > 0) check ('a string 1824'); break; + case 1825: if (n[1825]++ > 0) check ('a string 1825'); break; + case 1826: if (n[1826]++ > 0) check ('a string 1826'); break; + case 1827: if (n[1827]++ > 0) check ('a string 1827'); break; + case 1828: if (n[1828]++ > 0) check ('a string 1828'); break; + case 1829: if (n[1829]++ > 0) check ('a string 1829'); break; + case 1830: if (n[1830]++ > 0) check ('a string 1830'); break; + case 1831: if (n[1831]++ > 0) check ('a string 1831'); break; + case 1832: if (n[1832]++ > 0) check ('a string 1832'); break; + case 1833: if (n[1833]++ > 0) check ('a string 1833'); break; + case 1834: if (n[1834]++ > 0) check ('a string 1834'); break; + case 1835: if (n[1835]++ > 0) check ('a string 1835'); break; + case 1836: if (n[1836]++ > 0) check ('a string 1836'); break; + case 1837: if (n[1837]++ > 0) check ('a string 1837'); break; + case 1838: if (n[1838]++ > 0) check ('a string 1838'); break; + case 1839: if (n[1839]++ > 0) check ('a string 1839'); break; + case 1840: if (n[1840]++ > 0) check ('a string 1840'); break; + case 1841: if (n[1841]++ > 0) check ('a string 1841'); break; + case 1842: if (n[1842]++ > 0) check ('a string 1842'); break; + case 1843: if (n[1843]++ > 0) check ('a string 1843'); break; + case 1844: if (n[1844]++ > 0) check ('a string 1844'); break; + case 1845: if (n[1845]++ > 0) check ('a string 1845'); break; + case 1846: if (n[1846]++ > 0) check ('a string 1846'); break; + case 1847: if (n[1847]++ > 0) check ('a string 1847'); break; + case 1848: if (n[1848]++ > 0) check ('a string 1848'); break; + case 1849: if (n[1849]++ > 0) check ('a string 1849'); break; + case 1850: if (n[1850]++ > 0) check ('a string 1850'); break; + case 1851: if (n[1851]++ > 0) check ('a string 1851'); break; + case 1852: if (n[1852]++ > 0) check ('a string 1852'); break; + case 1853: if (n[1853]++ > 0) check ('a string 1853'); break; + case 1854: if (n[1854]++ > 0) check ('a string 1854'); break; + case 1855: if (n[1855]++ > 0) check ('a string 1855'); break; + case 1856: if (n[1856]++ > 0) check ('a string 1856'); break; + case 1857: if (n[1857]++ > 0) check ('a string 1857'); break; + case 1858: if (n[1858]++ > 0) check ('a string 1858'); break; + case 1859: if (n[1859]++ > 0) check ('a string 1859'); break; + case 1860: if (n[1860]++ > 0) check ('a string 1860'); break; + case 1861: if (n[1861]++ > 0) check ('a string 1861'); break; + case 1862: if (n[1862]++ > 0) check ('a string 1862'); break; + case 1863: if (n[1863]++ > 0) check ('a string 1863'); break; + case 1864: if (n[1864]++ > 0) check ('a string 1864'); break; + case 1865: if (n[1865]++ > 0) check ('a string 1865'); break; + case 1866: if (n[1866]++ > 0) check ('a string 1866'); break; + case 1867: if (n[1867]++ > 0) check ('a string 1867'); break; + case 1868: if (n[1868]++ > 0) check ('a string 1868'); break; + case 1869: if (n[1869]++ > 0) check ('a string 1869'); break; + case 1870: if (n[1870]++ > 0) check ('a string 1870'); break; + case 1871: if (n[1871]++ > 0) check ('a string 1871'); break; + case 1872: if (n[1872]++ > 0) check ('a string 1872'); break; + case 1873: if (n[1873]++ > 0) check ('a string 1873'); break; + case 1874: if (n[1874]++ > 0) check ('a string 1874'); break; + case 1875: if (n[1875]++ > 0) check ('a string 1875'); break; + case 1876: if (n[1876]++ > 0) check ('a string 1876'); break; + case 1877: if (n[1877]++ > 0) check ('a string 1877'); break; + case 1878: if (n[1878]++ > 0) check ('a string 1878'); break; + case 1879: if (n[1879]++ > 0) check ('a string 1879'); break; + case 1880: if (n[1880]++ > 0) check ('a string 1880'); break; + case 1881: if (n[1881]++ > 0) check ('a string 1881'); break; + case 1882: if (n[1882]++ > 0) check ('a string 1882'); break; + case 1883: if (n[1883]++ > 0) check ('a string 1883'); break; + case 1884: if (n[1884]++ > 0) check ('a string 1884'); break; + case 1885: if (n[1885]++ > 0) check ('a string 1885'); break; + case 1886: if (n[1886]++ > 0) check ('a string 1886'); break; + case 1887: if (n[1887]++ > 0) check ('a string 1887'); break; + case 1888: if (n[1888]++ > 0) check ('a string 1888'); break; + case 1889: if (n[1889]++ > 0) check ('a string 1889'); break; + case 1890: if (n[1890]++ > 0) check ('a string 1890'); break; + case 1891: if (n[1891]++ > 0) check ('a string 1891'); break; + case 1892: if (n[1892]++ > 0) check ('a string 1892'); break; + case 1893: if (n[1893]++ > 0) check ('a string 1893'); break; + case 1894: if (n[1894]++ > 0) check ('a string 1894'); break; + case 1895: if (n[1895]++ > 0) check ('a string 1895'); break; + case 1896: if (n[1896]++ > 0) check ('a string 1896'); break; + case 1897: if (n[1897]++ > 0) check ('a string 1897'); break; + case 1898: if (n[1898]++ > 0) check ('a string 1898'); break; + case 1899: if (n[1899]++ > 0) check ('a string 1899'); break; + case 1900: if (n[1900]++ > 0) check ('a string 1900'); break; + case 1901: if (n[1901]++ > 0) check ('a string 1901'); break; + case 1902: if (n[1902]++ > 0) check ('a string 1902'); break; + case 1903: if (n[1903]++ > 0) check ('a string 1903'); break; + case 1904: if (n[1904]++ > 0) check ('a string 1904'); break; + case 1905: if (n[1905]++ > 0) check ('a string 1905'); break; + case 1906: if (n[1906]++ > 0) check ('a string 1906'); break; + case 1907: if (n[1907]++ > 0) check ('a string 1907'); break; + case 1908: if (n[1908]++ > 0) check ('a string 1908'); break; + case 1909: if (n[1909]++ > 0) check ('a string 1909'); break; + case 1910: if (n[1910]++ > 0) check ('a string 1910'); break; + case 1911: if (n[1911]++ > 0) check ('a string 1911'); break; + case 1912: if (n[1912]++ > 0) check ('a string 1912'); break; + case 1913: if (n[1913]++ > 0) check ('a string 1913'); break; + case 1914: if (n[1914]++ > 0) check ('a string 1914'); break; + case 1915: if (n[1915]++ > 0) check ('a string 1915'); break; + case 1916: if (n[1916]++ > 0) check ('a string 1916'); break; + case 1917: if (n[1917]++ > 0) check ('a string 1917'); break; + case 1918: if (n[1918]++ > 0) check ('a string 1918'); break; + case 1919: if (n[1919]++ > 0) check ('a string 1919'); break; + case 1920: if (n[1920]++ > 0) check ('a string 1920'); break; + case 1921: if (n[1921]++ > 0) check ('a string 1921'); break; + case 1922: if (n[1922]++ > 0) check ('a string 1922'); break; + case 1923: if (n[1923]++ > 0) check ('a string 1923'); break; + case 1924: if (n[1924]++ > 0) check ('a string 1924'); break; + case 1925: if (n[1925]++ > 0) check ('a string 1925'); break; + case 1926: if (n[1926]++ > 0) check ('a string 1926'); break; + case 1927: if (n[1927]++ > 0) check ('a string 1927'); break; + case 1928: if (n[1928]++ > 0) check ('a string 1928'); break; + case 1929: if (n[1929]++ > 0) check ('a string 1929'); break; + case 1930: if (n[1930]++ > 0) check ('a string 1930'); break; + case 1931: if (n[1931]++ > 0) check ('a string 1931'); break; + case 1932: if (n[1932]++ > 0) check ('a string 1932'); break; + case 1933: if (n[1933]++ > 0) check ('a string 1933'); break; + case 1934: if (n[1934]++ > 0) check ('a string 1934'); break; + case 1935: if (n[1935]++ > 0) check ('a string 1935'); break; + case 1936: if (n[1936]++ > 0) check ('a string 1936'); break; + case 1937: if (n[1937]++ > 0) check ('a string 1937'); break; + case 1938: if (n[1938]++ > 0) check ('a string 1938'); break; + case 1939: if (n[1939]++ > 0) check ('a string 1939'); break; + case 1940: if (n[1940]++ > 0) check ('a string 1940'); break; + case 1941: if (n[1941]++ > 0) check ('a string 1941'); break; + case 1942: if (n[1942]++ > 0) check ('a string 1942'); break; + case 1943: if (n[1943]++ > 0) check ('a string 1943'); break; + case 1944: if (n[1944]++ > 0) check ('a string 1944'); break; + case 1945: if (n[1945]++ > 0) check ('a string 1945'); break; + case 1946: if (n[1946]++ > 0) check ('a string 1946'); break; + case 1947: if (n[1947]++ > 0) check ('a string 1947'); break; + case 1948: if (n[1948]++ > 0) check ('a string 1948'); break; + case 1949: if (n[1949]++ > 0) check ('a string 1949'); break; + case 1950: if (n[1950]++ > 0) check ('a string 1950'); break; + case 1951: if (n[1951]++ > 0) check ('a string 1951'); break; + case 1952: if (n[1952]++ > 0) check ('a string 1952'); break; + case 1953: if (n[1953]++ > 0) check ('a string 1953'); break; + case 1954: if (n[1954]++ > 0) check ('a string 1954'); break; + case 1955: if (n[1955]++ > 0) check ('a string 1955'); break; + case 1956: if (n[1956]++ > 0) check ('a string 1956'); break; + case 1957: if (n[1957]++ > 0) check ('a string 1957'); break; + case 1958: if (n[1958]++ > 0) check ('a string 1958'); break; + case 1959: if (n[1959]++ > 0) check ('a string 1959'); break; + case 1960: if (n[1960]++ > 0) check ('a string 1960'); break; + case 1961: if (n[1961]++ > 0) check ('a string 1961'); break; + case 1962: if (n[1962]++ > 0) check ('a string 1962'); break; + case 1963: if (n[1963]++ > 0) check ('a string 1963'); break; + case 1964: if (n[1964]++ > 0) check ('a string 1964'); break; + case 1965: if (n[1965]++ > 0) check ('a string 1965'); break; + case 1966: if (n[1966]++ > 0) check ('a string 1966'); break; + case 1967: if (n[1967]++ > 0) check ('a string 1967'); break; + case 1968: if (n[1968]++ > 0) check ('a string 1968'); break; + case 1969: if (n[1969]++ > 0) check ('a string 1969'); break; + case 1970: if (n[1970]++ > 0) check ('a string 1970'); break; + case 1971: if (n[1971]++ > 0) check ('a string 1971'); break; + case 1972: if (n[1972]++ > 0) check ('a string 1972'); break; + case 1973: if (n[1973]++ > 0) check ('a string 1973'); break; + case 1974: if (n[1974]++ > 0) check ('a string 1974'); break; + case 1975: if (n[1975]++ > 0) check ('a string 1975'); break; + case 1976: if (n[1976]++ > 0) check ('a string 1976'); break; + case 1977: if (n[1977]++ > 0) check ('a string 1977'); break; + case 1978: if (n[1978]++ > 0) check ('a string 1978'); break; + case 1979: if (n[1979]++ > 0) check ('a string 1979'); break; + case 1980: if (n[1980]++ > 0) check ('a string 1980'); break; + case 1981: if (n[1981]++ > 0) check ('a string 1981'); break; + case 1982: if (n[1982]++ > 0) check ('a string 1982'); break; + case 1983: if (n[1983]++ > 0) check ('a string 1983'); break; + case 1984: if (n[1984]++ > 0) check ('a string 1984'); break; + case 1985: if (n[1985]++ > 0) check ('a string 1985'); break; + case 1986: if (n[1986]++ > 0) check ('a string 1986'); break; + case 1987: if (n[1987]++ > 0) check ('a string 1987'); break; + case 1988: if (n[1988]++ > 0) check ('a string 1988'); break; + case 1989: if (n[1989]++ > 0) check ('a string 1989'); break; + case 1990: if (n[1990]++ > 0) check ('a string 1990'); break; + case 1991: if (n[1991]++ > 0) check ('a string 1991'); break; + case 1992: if (n[1992]++ > 0) check ('a string 1992'); break; + case 1993: if (n[1993]++ > 0) check ('a string 1993'); break; + case 1994: if (n[1994]++ > 0) check ('a string 1994'); break; + case 1995: if (n[1995]++ > 0) check ('a string 1995'); break; + case 1996: if (n[1996]++ > 0) check ('a string 1996'); break; + case 1997: if (n[1997]++ > 0) check ('a string 1997'); break; + case 1998: if (n[1998]++ > 0) check ('a string 1998'); break; + case 1999: if (n[1999]++ > 0) check ('a string 1999'); break; + case 2000: if (n[2000]++ > 0) check ('a string 2000'); break; + case 2001: if (n[2001]++ > 0) check ('a string 2001'); break; + case 2002: if (n[2002]++ > 0) check ('a string 2002'); break; + case 2003: if (n[2003]++ > 0) check ('a string 2003'); break; + case 2004: if (n[2004]++ > 0) check ('a string 2004'); break; + case 2005: if (n[2005]++ > 0) check ('a string 2005'); break; + case 2006: if (n[2006]++ > 0) check ('a string 2006'); break; + case 2007: if (n[2007]++ > 0) check ('a string 2007'); break; + case 2008: if (n[2008]++ > 0) check ('a string 2008'); break; + case 2009: if (n[2009]++ > 0) check ('a string 2009'); break; + case 2010: if (n[2010]++ > 0) check ('a string 2010'); break; + case 2011: if (n[2011]++ > 0) check ('a string 2011'); break; + case 2012: if (n[2012]++ > 0) check ('a string 2012'); break; + case 2013: if (n[2013]++ > 0) check ('a string 2013'); break; + case 2014: if (n[2014]++ > 0) check ('a string 2014'); break; + case 2015: if (n[2015]++ > 0) check ('a string 2015'); break; + case 2016: if (n[2016]++ > 0) check ('a string 2016'); break; + case 2017: if (n[2017]++ > 0) check ('a string 2017'); break; + case 2018: if (n[2018]++ > 0) check ('a string 2018'); break; + case 2019: if (n[2019]++ > 0) check ('a string 2019'); break; + case 2020: if (n[2020]++ > 0) check ('a string 2020'); break; + case 2021: if (n[2021]++ > 0) check ('a string 2021'); break; + case 2022: if (n[2022]++ > 0) check ('a string 2022'); break; + case 2023: if (n[2023]++ > 0) check ('a string 2023'); break; + case 2024: if (n[2024]++ > 0) check ('a string 2024'); break; + case 2025: if (n[2025]++ > 0) check ('a string 2025'); break; + case 2026: if (n[2026]++ > 0) check ('a string 2026'); break; + case 2027: if (n[2027]++ > 0) check ('a string 2027'); break; + case 2028: if (n[2028]++ > 0) check ('a string 2028'); break; + case 2029: if (n[2029]++ > 0) check ('a string 2029'); break; + case 2030: if (n[2030]++ > 0) check ('a string 2030'); break; + case 2031: if (n[2031]++ > 0) check ('a string 2031'); break; + case 2032: if (n[2032]++ > 0) check ('a string 2032'); break; + case 2033: if (n[2033]++ > 0) check ('a string 2033'); break; + case 2034: if (n[2034]++ > 0) check ('a string 2034'); break; + case 2035: if (n[2035]++ > 0) check ('a string 2035'); break; + case 2036: if (n[2036]++ > 0) check ('a string 2036'); break; + case 2037: if (n[2037]++ > 0) check ('a string 2037'); break; + case 2038: if (n[2038]++ > 0) check ('a string 2038'); break; + case 2039: if (n[2039]++ > 0) check ('a string 2039'); break; + case 2040: if (n[2040]++ > 0) check ('a string 2040'); break; + case 2041: if (n[2041]++ > 0) check ('a string 2041'); break; + case 2042: if (n[2042]++ > 0) check ('a string 2042'); break; + case 2043: if (n[2043]++ > 0) check ('a string 2043'); break; + case 2044: if (n[2044]++ > 0) check ('a string 2044'); break; + case 2045: if (n[2045]++ > 0) check ('a string 2045'); break; + case 2046: if (n[2046]++ > 0) check ('a string 2046'); break; + case 2047: if (n[2047]++ > 0) check ('a string 2047'); break; + case 2048: if (n[2048]++ > 0) check ('a string 2048'); break; + case 2049: if (n[2049]++ > 0) check ('a string 2049'); break; + case 2050: if (n[2050]++ > 0) check ('a string 2050'); break; + case 2051: if (n[2051]++ > 0) check ('a string 2051'); break; + case 2052: if (n[2052]++ > 0) check ('a string 2052'); break; + case 2053: if (n[2053]++ > 0) check ('a string 2053'); break; + case 2054: if (n[2054]++ > 0) check ('a string 2054'); break; + case 2055: if (n[2055]++ > 0) check ('a string 2055'); break; + case 2056: if (n[2056]++ > 0) check ('a string 2056'); break; + case 2057: if (n[2057]++ > 0) check ('a string 2057'); break; + case 2058: if (n[2058]++ > 0) check ('a string 2058'); break; + case 2059: if (n[2059]++ > 0) check ('a string 2059'); break; + case 2060: if (n[2060]++ > 0) check ('a string 2060'); break; + case 2061: if (n[2061]++ > 0) check ('a string 2061'); break; + case 2062: if (n[2062]++ > 0) check ('a string 2062'); break; + case 2063: if (n[2063]++ > 0) check ('a string 2063'); break; + case 2064: if (n[2064]++ > 0) check ('a string 2064'); break; + case 2065: if (n[2065]++ > 0) check ('a string 2065'); break; + case 2066: if (n[2066]++ > 0) check ('a string 2066'); break; + case 2067: if (n[2067]++ > 0) check ('a string 2067'); break; + case 2068: if (n[2068]++ > 0) check ('a string 2068'); break; + case 2069: if (n[2069]++ > 0) check ('a string 2069'); break; + case 2070: if (n[2070]++ > 0) check ('a string 2070'); break; + case 2071: if (n[2071]++ > 0) check ('a string 2071'); break; + case 2072: if (n[2072]++ > 0) check ('a string 2072'); break; + case 2073: if (n[2073]++ > 0) check ('a string 2073'); break; + case 2074: if (n[2074]++ > 0) check ('a string 2074'); break; + case 2075: if (n[2075]++ > 0) check ('a string 2075'); break; + case 2076: if (n[2076]++ > 0) check ('a string 2076'); break; + case 2077: if (n[2077]++ > 0) check ('a string 2077'); break; + case 2078: if (n[2078]++ > 0) check ('a string 2078'); break; + case 2079: if (n[2079]++ > 0) check ('a string 2079'); break; + case 2080: if (n[2080]++ > 0) check ('a string 2080'); break; + case 2081: if (n[2081]++ > 0) check ('a string 2081'); break; + case 2082: if (n[2082]++ > 0) check ('a string 2082'); break; + case 2083: if (n[2083]++ > 0) check ('a string 2083'); break; + case 2084: if (n[2084]++ > 0) check ('a string 2084'); break; + case 2085: if (n[2085]++ > 0) check ('a string 2085'); break; + case 2086: if (n[2086]++ > 0) check ('a string 2086'); break; + case 2087: if (n[2087]++ > 0) check ('a string 2087'); break; + case 2088: if (n[2088]++ > 0) check ('a string 2088'); break; + case 2089: if (n[2089]++ > 0) check ('a string 2089'); break; + case 2090: if (n[2090]++ > 0) check ('a string 2090'); break; + case 2091: if (n[2091]++ > 0) check ('a string 2091'); break; + case 2092: if (n[2092]++ > 0) check ('a string 2092'); break; + case 2093: if (n[2093]++ > 0) check ('a string 2093'); break; + case 2094: if (n[2094]++ > 0) check ('a string 2094'); break; + case 2095: if (n[2095]++ > 0) check ('a string 2095'); break; + case 2096: if (n[2096]++ > 0) check ('a string 2096'); break; + case 2097: if (n[2097]++ > 0) check ('a string 2097'); break; + case 2098: if (n[2098]++ > 0) check ('a string 2098'); break; + case 2099: if (n[2099]++ > 0) check ('a string 2099'); break; + case 2100: if (n[2100]++ > 0) check ('a string 2100'); break; + case 2101: if (n[2101]++ > 0) check ('a string 2101'); break; + case 2102: if (n[2102]++ > 0) check ('a string 2102'); break; + case 2103: if (n[2103]++ > 0) check ('a string 2103'); break; + case 2104: if (n[2104]++ > 0) check ('a string 2104'); break; + case 2105: if (n[2105]++ > 0) check ('a string 2105'); break; + case 2106: if (n[2106]++ > 0) check ('a string 2106'); break; + case 2107: if (n[2107]++ > 0) check ('a string 2107'); break; + case 2108: if (n[2108]++ > 0) check ('a string 2108'); break; + case 2109: if (n[2109]++ > 0) check ('a string 2109'); break; + case 2110: if (n[2110]++ > 0) check ('a string 2110'); break; + case 2111: if (n[2111]++ > 0) check ('a string 2111'); break; + case 2112: if (n[2112]++ > 0) check ('a string 2112'); break; + case 2113: if (n[2113]++ > 0) check ('a string 2113'); break; + case 2114: if (n[2114]++ > 0) check ('a string 2114'); break; + case 2115: if (n[2115]++ > 0) check ('a string 2115'); break; + case 2116: if (n[2116]++ > 0) check ('a string 2116'); break; + case 2117: if (n[2117]++ > 0) check ('a string 2117'); break; + case 2118: if (n[2118]++ > 0) check ('a string 2118'); break; + case 2119: if (n[2119]++ > 0) check ('a string 2119'); break; + case 2120: if (n[2120]++ > 0) check ('a string 2120'); break; + case 2121: if (n[2121]++ > 0) check ('a string 2121'); break; + case 2122: if (n[2122]++ > 0) check ('a string 2122'); break; + case 2123: if (n[2123]++ > 0) check ('a string 2123'); break; + case 2124: if (n[2124]++ > 0) check ('a string 2124'); break; + case 2125: if (n[2125]++ > 0) check ('a string 2125'); break; + case 2126: if (n[2126]++ > 0) check ('a string 2126'); break; + case 2127: if (n[2127]++ > 0) check ('a string 2127'); break; + case 2128: if (n[2128]++ > 0) check ('a string 2128'); break; + case 2129: if (n[2129]++ > 0) check ('a string 2129'); break; + case 2130: if (n[2130]++ > 0) check ('a string 2130'); break; + case 2131: if (n[2131]++ > 0) check ('a string 2131'); break; + case 2132: if (n[2132]++ > 0) check ('a string 2132'); break; + case 2133: if (n[2133]++ > 0) check ('a string 2133'); break; + case 2134: if (n[2134]++ > 0) check ('a string 2134'); break; + case 2135: if (n[2135]++ > 0) check ('a string 2135'); break; + case 2136: if (n[2136]++ > 0) check ('a string 2136'); break; + case 2137: if (n[2137]++ > 0) check ('a string 2137'); break; + case 2138: if (n[2138]++ > 0) check ('a string 2138'); break; + case 2139: if (n[2139]++ > 0) check ('a string 2139'); break; + case 2140: if (n[2140]++ > 0) check ('a string 2140'); break; + case 2141: if (n[2141]++ > 0) check ('a string 2141'); break; + case 2142: if (n[2142]++ > 0) check ('a string 2142'); break; + case 2143: if (n[2143]++ > 0) check ('a string 2143'); break; + case 2144: if (n[2144]++ > 0) check ('a string 2144'); break; + case 2145: if (n[2145]++ > 0) check ('a string 2145'); break; + case 2146: if (n[2146]++ > 0) check ('a string 2146'); break; + case 2147: if (n[2147]++ > 0) check ('a string 2147'); break; + case 2148: if (n[2148]++ > 0) check ('a string 2148'); break; + case 2149: if (n[2149]++ > 0) check ('a string 2149'); break; + case 2150: if (n[2150]++ > 0) check ('a string 2150'); break; + case 2151: if (n[2151]++ > 0) check ('a string 2151'); break; + case 2152: if (n[2152]++ > 0) check ('a string 2152'); break; + case 2153: if (n[2153]++ > 0) check ('a string 2153'); break; + case 2154: if (n[2154]++ > 0) check ('a string 2154'); break; + case 2155: if (n[2155]++ > 0) check ('a string 2155'); break; + case 2156: if (n[2156]++ > 0) check ('a string 2156'); break; + case 2157: if (n[2157]++ > 0) check ('a string 2157'); break; + case 2158: if (n[2158]++ > 0) check ('a string 2158'); break; + case 2159: if (n[2159]++ > 0) check ('a string 2159'); break; + case 2160: if (n[2160]++ > 0) check ('a string 2160'); break; + case 2161: if (n[2161]++ > 0) check ('a string 2161'); break; + case 2162: if (n[2162]++ > 0) check ('a string 2162'); break; + case 2163: if (n[2163]++ > 0) check ('a string 2163'); break; + case 2164: if (n[2164]++ > 0) check ('a string 2164'); break; + case 2165: if (n[2165]++ > 0) check ('a string 2165'); break; + case 2166: if (n[2166]++ > 0) check ('a string 2166'); break; + case 2167: if (n[2167]++ > 0) check ('a string 2167'); break; + case 2168: if (n[2168]++ > 0) check ('a string 2168'); break; + case 2169: if (n[2169]++ > 0) check ('a string 2169'); break; + case 2170: if (n[2170]++ > 0) check ('a string 2170'); break; + case 2171: if (n[2171]++ > 0) check ('a string 2171'); break; + case 2172: if (n[2172]++ > 0) check ('a string 2172'); break; + case 2173: if (n[2173]++ > 0) check ('a string 2173'); break; + case 2174: if (n[2174]++ > 0) check ('a string 2174'); break; + case 2175: if (n[2175]++ > 0) check ('a string 2175'); break; + case 2176: if (n[2176]++ > 0) check ('a string 2176'); break; + case 2177: if (n[2177]++ > 0) check ('a string 2177'); break; + case 2178: if (n[2178]++ > 0) check ('a string 2178'); break; + case 2179: if (n[2179]++ > 0) check ('a string 2179'); break; + case 2180: if (n[2180]++ > 0) check ('a string 2180'); break; + case 2181: if (n[2181]++ > 0) check ('a string 2181'); break; + case 2182: if (n[2182]++ > 0) check ('a string 2182'); break; + case 2183: if (n[2183]++ > 0) check ('a string 2183'); break; + case 2184: if (n[2184]++ > 0) check ('a string 2184'); break; + case 2185: if (n[2185]++ > 0) check ('a string 2185'); break; + case 2186: if (n[2186]++ > 0) check ('a string 2186'); break; + case 2187: if (n[2187]++ > 0) check ('a string 2187'); break; + case 2188: if (n[2188]++ > 0) check ('a string 2188'); break; + case 2189: if (n[2189]++ > 0) check ('a string 2189'); break; + case 2190: if (n[2190]++ > 0) check ('a string 2190'); break; + case 2191: if (n[2191]++ > 0) check ('a string 2191'); break; + case 2192: if (n[2192]++ > 0) check ('a string 2192'); break; + case 2193: if (n[2193]++ > 0) check ('a string 2193'); break; + case 2194: if (n[2194]++ > 0) check ('a string 2194'); break; + case 2195: if (n[2195]++ > 0) check ('a string 2195'); break; + case 2196: if (n[2196]++ > 0) check ('a string 2196'); break; + case 2197: if (n[2197]++ > 0) check ('a string 2197'); break; + case 2198: if (n[2198]++ > 0) check ('a string 2198'); break; + case 2199: if (n[2199]++ > 0) check ('a string 2199'); break; + case 2200: if (n[2200]++ > 0) check ('a string 2200'); break; + case 2201: if (n[2201]++ > 0) check ('a string 2201'); break; + case 2202: if (n[2202]++ > 0) check ('a string 2202'); break; + case 2203: if (n[2203]++ > 0) check ('a string 2203'); break; + case 2204: if (n[2204]++ > 0) check ('a string 2204'); break; + case 2205: if (n[2205]++ > 0) check ('a string 2205'); break; + case 2206: if (n[2206]++ > 0) check ('a string 2206'); break; + case 2207: if (n[2207]++ > 0) check ('a string 2207'); break; + case 2208: if (n[2208]++ > 0) check ('a string 2208'); break; + case 2209: if (n[2209]++ > 0) check ('a string 2209'); break; + case 2210: if (n[2210]++ > 0) check ('a string 2210'); break; + case 2211: if (n[2211]++ > 0) check ('a string 2211'); break; + case 2212: if (n[2212]++ > 0) check ('a string 2212'); break; + case 2213: if (n[2213]++ > 0) check ('a string 2213'); break; + case 2214: if (n[2214]++ > 0) check ('a string 2214'); break; + case 2215: if (n[2215]++ > 0) check ('a string 2215'); break; + case 2216: if (n[2216]++ > 0) check ('a string 2216'); break; + case 2217: if (n[2217]++ > 0) check ('a string 2217'); break; + case 2218: if (n[2218]++ > 0) check ('a string 2218'); break; + case 2219: if (n[2219]++ > 0) check ('a string 2219'); break; + case 2220: if (n[2220]++ > 0) check ('a string 2220'); break; + case 2221: if (n[2221]++ > 0) check ('a string 2221'); break; + case 2222: if (n[2222]++ > 0) check ('a string 2222'); break; + case 2223: if (n[2223]++ > 0) check ('a string 2223'); break; + case 2224: if (n[2224]++ > 0) check ('a string 2224'); break; + case 2225: if (n[2225]++ > 0) check ('a string 2225'); break; + case 2226: if (n[2226]++ > 0) check ('a string 2226'); break; + case 2227: if (n[2227]++ > 0) check ('a string 2227'); break; + case 2228: if (n[2228]++ > 0) check ('a string 2228'); break; + case 2229: if (n[2229]++ > 0) check ('a string 2229'); break; + case 2230: if (n[2230]++ > 0) check ('a string 2230'); break; + case 2231: if (n[2231]++ > 0) check ('a string 2231'); break; + case 2232: if (n[2232]++ > 0) check ('a string 2232'); break; + case 2233: if (n[2233]++ > 0) check ('a string 2233'); break; + case 2234: if (n[2234]++ > 0) check ('a string 2234'); break; + case 2235: if (n[2235]++ > 0) check ('a string 2235'); break; + case 2236: if (n[2236]++ > 0) check ('a string 2236'); break; + case 2237: if (n[2237]++ > 0) check ('a string 2237'); break; + case 2238: if (n[2238]++ > 0) check ('a string 2238'); break; + case 2239: if (n[2239]++ > 0) check ('a string 2239'); break; + case 2240: if (n[2240]++ > 0) check ('a string 2240'); break; + case 2241: if (n[2241]++ > 0) check ('a string 2241'); break; + case 2242: if (n[2242]++ > 0) check ('a string 2242'); break; + case 2243: if (n[2243]++ > 0) check ('a string 2243'); break; + case 2244: if (n[2244]++ > 0) check ('a string 2244'); break; + case 2245: if (n[2245]++ > 0) check ('a string 2245'); break; + case 2246: if (n[2246]++ > 0) check ('a string 2246'); break; + case 2247: if (n[2247]++ > 0) check ('a string 2247'); break; + case 2248: if (n[2248]++ > 0) check ('a string 2248'); break; + case 2249: if (n[2249]++ > 0) check ('a string 2249'); break; + case 2250: if (n[2250]++ > 0) check ('a string 2250'); break; + case 2251: if (n[2251]++ > 0) check ('a string 2251'); break; + case 2252: if (n[2252]++ > 0) check ('a string 2252'); break; + case 2253: if (n[2253]++ > 0) check ('a string 2253'); break; + case 2254: if (n[2254]++ > 0) check ('a string 2254'); break; + case 2255: if (n[2255]++ > 0) check ('a string 2255'); break; + case 2256: if (n[2256]++ > 0) check ('a string 2256'); break; + case 2257: if (n[2257]++ > 0) check ('a string 2257'); break; + case 2258: if (n[2258]++ > 0) check ('a string 2258'); break; + case 2259: if (n[2259]++ > 0) check ('a string 2259'); break; + case 2260: if (n[2260]++ > 0) check ('a string 2260'); break; + case 2261: if (n[2261]++ > 0) check ('a string 2261'); break; + case 2262: if (n[2262]++ > 0) check ('a string 2262'); break; + case 2263: if (n[2263]++ > 0) check ('a string 2263'); break; + case 2264: if (n[2264]++ > 0) check ('a string 2264'); break; + case 2265: if (n[2265]++ > 0) check ('a string 2265'); break; + case 2266: if (n[2266]++ > 0) check ('a string 2266'); break; + case 2267: if (n[2267]++ > 0) check ('a string 2267'); break; + case 2268: if (n[2268]++ > 0) check ('a string 2268'); break; + case 2269: if (n[2269]++ > 0) check ('a string 2269'); break; + case 2270: if (n[2270]++ > 0) check ('a string 2270'); break; + case 2271: if (n[2271]++ > 0) check ('a string 2271'); break; + case 2272: if (n[2272]++ > 0) check ('a string 2272'); break; + case 2273: if (n[2273]++ > 0) check ('a string 2273'); break; + case 2274: if (n[2274]++ > 0) check ('a string 2274'); break; + case 2275: if (n[2275]++ > 0) check ('a string 2275'); break; + case 2276: if (n[2276]++ > 0) check ('a string 2276'); break; + case 2277: if (n[2277]++ > 0) check ('a string 2277'); break; + case 2278: if (n[2278]++ > 0) check ('a string 2278'); break; + case 2279: if (n[2279]++ > 0) check ('a string 2279'); break; + case 2280: if (n[2280]++ > 0) check ('a string 2280'); break; + case 2281: if (n[2281]++ > 0) check ('a string 2281'); break; + case 2282: if (n[2282]++ > 0) check ('a string 2282'); break; + case 2283: if (n[2283]++ > 0) check ('a string 2283'); break; + case 2284: if (n[2284]++ > 0) check ('a string 2284'); break; + case 2285: if (n[2285]++ > 0) check ('a string 2285'); break; + case 2286: if (n[2286]++ > 0) check ('a string 2286'); break; + case 2287: if (n[2287]++ > 0) check ('a string 2287'); break; + case 2288: if (n[2288]++ > 0) check ('a string 2288'); break; + case 2289: if (n[2289]++ > 0) check ('a string 2289'); break; + case 2290: if (n[2290]++ > 0) check ('a string 2290'); break; + case 2291: if (n[2291]++ > 0) check ('a string 2291'); break; + case 2292: if (n[2292]++ > 0) check ('a string 2292'); break; + case 2293: if (n[2293]++ > 0) check ('a string 2293'); break; + case 2294: if (n[2294]++ > 0) check ('a string 2294'); break; + case 2295: if (n[2295]++ > 0) check ('a string 2295'); break; + case 2296: if (n[2296]++ > 0) check ('a string 2296'); break; + case 2297: if (n[2297]++ > 0) check ('a string 2297'); break; + case 2298: if (n[2298]++ > 0) check ('a string 2298'); break; + case 2299: if (n[2299]++ > 0) check ('a string 2299'); break; + case 2300: if (n[2300]++ > 0) check ('a string 2300'); break; + case 2301: if (n[2301]++ > 0) check ('a string 2301'); break; + case 2302: if (n[2302]++ > 0) check ('a string 2302'); break; + case 2303: if (n[2303]++ > 0) check ('a string 2303'); break; + case 2304: if (n[2304]++ > 0) check ('a string 2304'); break; + case 2305: if (n[2305]++ > 0) check ('a string 2305'); break; + case 2306: if (n[2306]++ > 0) check ('a string 2306'); break; + case 2307: if (n[2307]++ > 0) check ('a string 2307'); break; + case 2308: if (n[2308]++ > 0) check ('a string 2308'); break; + case 2309: if (n[2309]++ > 0) check ('a string 2309'); break; + case 2310: if (n[2310]++ > 0) check ('a string 2310'); break; + case 2311: if (n[2311]++ > 0) check ('a string 2311'); break; + case 2312: if (n[2312]++ > 0) check ('a string 2312'); break; + case 2313: if (n[2313]++ > 0) check ('a string 2313'); break; + case 2314: if (n[2314]++ > 0) check ('a string 2314'); break; + case 2315: if (n[2315]++ > 0) check ('a string 2315'); break; + case 2316: if (n[2316]++ > 0) check ('a string 2316'); break; + case 2317: if (n[2317]++ > 0) check ('a string 2317'); break; + case 2318: if (n[2318]++ > 0) check ('a string 2318'); break; + case 2319: if (n[2319]++ > 0) check ('a string 2319'); break; + case 2320: if (n[2320]++ > 0) check ('a string 2320'); break; + case 2321: if (n[2321]++ > 0) check ('a string 2321'); break; + case 2322: if (n[2322]++ > 0) check ('a string 2322'); break; + case 2323: if (n[2323]++ > 0) check ('a string 2323'); break; + case 2324: if (n[2324]++ > 0) check ('a string 2324'); break; + case 2325: if (n[2325]++ > 0) check ('a string 2325'); break; + case 2326: if (n[2326]++ > 0) check ('a string 2326'); break; + case 2327: if (n[2327]++ > 0) check ('a string 2327'); break; + case 2328: if (n[2328]++ > 0) check ('a string 2328'); break; + case 2329: if (n[2329]++ > 0) check ('a string 2329'); break; + case 2330: if (n[2330]++ > 0) check ('a string 2330'); break; + case 2331: if (n[2331]++ > 0) check ('a string 2331'); break; + case 2332: if (n[2332]++ > 0) check ('a string 2332'); break; + case 2333: if (n[2333]++ > 0) check ('a string 2333'); break; + case 2334: if (n[2334]++ > 0) check ('a string 2334'); break; + case 2335: if (n[2335]++ > 0) check ('a string 2335'); break; + case 2336: if (n[2336]++ > 0) check ('a string 2336'); break; + case 2337: if (n[2337]++ > 0) check ('a string 2337'); break; + case 2338: if (n[2338]++ > 0) check ('a string 2338'); break; + case 2339: if (n[2339]++ > 0) check ('a string 2339'); break; + case 2340: if (n[2340]++ > 0) check ('a string 2340'); break; + case 2341: if (n[2341]++ > 0) check ('a string 2341'); break; + case 2342: if (n[2342]++ > 0) check ('a string 2342'); break; + case 2343: if (n[2343]++ > 0) check ('a string 2343'); break; + case 2344: if (n[2344]++ > 0) check ('a string 2344'); break; + case 2345: if (n[2345]++ > 0) check ('a string 2345'); break; + case 2346: if (n[2346]++ > 0) check ('a string 2346'); break; + case 2347: if (n[2347]++ > 0) check ('a string 2347'); break; + case 2348: if (n[2348]++ > 0) check ('a string 2348'); break; + case 2349: if (n[2349]++ > 0) check ('a string 2349'); break; + case 2350: if (n[2350]++ > 0) check ('a string 2350'); break; + case 2351: if (n[2351]++ > 0) check ('a string 2351'); break; + case 2352: if (n[2352]++ > 0) check ('a string 2352'); break; + case 2353: if (n[2353]++ > 0) check ('a string 2353'); break; + case 2354: if (n[2354]++ > 0) check ('a string 2354'); break; + case 2355: if (n[2355]++ > 0) check ('a string 2355'); break; + case 2356: if (n[2356]++ > 0) check ('a string 2356'); break; + case 2357: if (n[2357]++ > 0) check ('a string 2357'); break; + case 2358: if (n[2358]++ > 0) check ('a string 2358'); break; + case 2359: if (n[2359]++ > 0) check ('a string 2359'); break; + case 2360: if (n[2360]++ > 0) check ('a string 2360'); break; + case 2361: if (n[2361]++ > 0) check ('a string 2361'); break; + case 2362: if (n[2362]++ > 0) check ('a string 2362'); break; + case 2363: if (n[2363]++ > 0) check ('a string 2363'); break; + case 2364: if (n[2364]++ > 0) check ('a string 2364'); break; + case 2365: if (n[2365]++ > 0) check ('a string 2365'); break; + case 2366: if (n[2366]++ > 0) check ('a string 2366'); break; + case 2367: if (n[2367]++ > 0) check ('a string 2367'); break; + case 2368: if (n[2368]++ > 0) check ('a string 2368'); break; + case 2369: if (n[2369]++ > 0) check ('a string 2369'); break; + case 2370: if (n[2370]++ > 0) check ('a string 2370'); break; + case 2371: if (n[2371]++ > 0) check ('a string 2371'); break; + case 2372: if (n[2372]++ > 0) check ('a string 2372'); break; + case 2373: if (n[2373]++ > 0) check ('a string 2373'); break; + case 2374: if (n[2374]++ > 0) check ('a string 2374'); break; + case 2375: if (n[2375]++ > 0) check ('a string 2375'); break; + case 2376: if (n[2376]++ > 0) check ('a string 2376'); break; + case 2377: if (n[2377]++ > 0) check ('a string 2377'); break; + case 2378: if (n[2378]++ > 0) check ('a string 2378'); break; + case 2379: if (n[2379]++ > 0) check ('a string 2379'); break; + case 2380: if (n[2380]++ > 0) check ('a string 2380'); break; + case 2381: if (n[2381]++ > 0) check ('a string 2381'); break; + case 2382: if (n[2382]++ > 0) check ('a string 2382'); break; + case 2383: if (n[2383]++ > 0) check ('a string 2383'); break; + case 2384: if (n[2384]++ > 0) check ('a string 2384'); break; + case 2385: if (n[2385]++ > 0) check ('a string 2385'); break; + case 2386: if (n[2386]++ > 0) check ('a string 2386'); break; + case 2387: if (n[2387]++ > 0) check ('a string 2387'); break; + case 2388: if (n[2388]++ > 0) check ('a string 2388'); break; + case 2389: if (n[2389]++ > 0) check ('a string 2389'); break; + case 2390: if (n[2390]++ > 0) check ('a string 2390'); break; + case 2391: if (n[2391]++ > 0) check ('a string 2391'); break; + case 2392: if (n[2392]++ > 0) check ('a string 2392'); break; + case 2393: if (n[2393]++ > 0) check ('a string 2393'); break; + case 2394: if (n[2394]++ > 0) check ('a string 2394'); break; + case 2395: if (n[2395]++ > 0) check ('a string 2395'); break; + case 2396: if (n[2396]++ > 0) check ('a string 2396'); break; + case 2397: if (n[2397]++ > 0) check ('a string 2397'); break; + case 2398: if (n[2398]++ > 0) check ('a string 2398'); break; + case 2399: if (n[2399]++ > 0) check ('a string 2399'); break; + case 2400: if (n[2400]++ > 0) check ('a string 2400'); break; + case 2401: if (n[2401]++ > 0) check ('a string 2401'); break; + case 2402: if (n[2402]++ > 0) check ('a string 2402'); break; + case 2403: if (n[2403]++ > 0) check ('a string 2403'); break; + case 2404: if (n[2404]++ > 0) check ('a string 2404'); break; + case 2405: if (n[2405]++ > 0) check ('a string 2405'); break; + case 2406: if (n[2406]++ > 0) check ('a string 2406'); break; + case 2407: if (n[2407]++ > 0) check ('a string 2407'); break; + case 2408: if (n[2408]++ > 0) check ('a string 2408'); break; + case 2409: if (n[2409]++ > 0) check ('a string 2409'); break; + case 2410: if (n[2410]++ > 0) check ('a string 2410'); break; + case 2411: if (n[2411]++ > 0) check ('a string 2411'); break; + case 2412: if (n[2412]++ > 0) check ('a string 2412'); break; + case 2413: if (n[2413]++ > 0) check ('a string 2413'); break; + case 2414: if (n[2414]++ > 0) check ('a string 2414'); break; + case 2415: if (n[2415]++ > 0) check ('a string 2415'); break; + case 2416: if (n[2416]++ > 0) check ('a string 2416'); break; + case 2417: if (n[2417]++ > 0) check ('a string 2417'); break; + case 2418: if (n[2418]++ > 0) check ('a string 2418'); break; + case 2419: if (n[2419]++ > 0) check ('a string 2419'); break; + case 2420: if (n[2420]++ > 0) check ('a string 2420'); break; + case 2421: if (n[2421]++ > 0) check ('a string 2421'); break; + case 2422: if (n[2422]++ > 0) check ('a string 2422'); break; + case 2423: if (n[2423]++ > 0) check ('a string 2423'); break; + case 2424: if (n[2424]++ > 0) check ('a string 2424'); break; + case 2425: if (n[2425]++ > 0) check ('a string 2425'); break; + case 2426: if (n[2426]++ > 0) check ('a string 2426'); break; + case 2427: if (n[2427]++ > 0) check ('a string 2427'); break; + case 2428: if (n[2428]++ > 0) check ('a string 2428'); break; + case 2429: if (n[2429]++ > 0) check ('a string 2429'); break; + case 2430: if (n[2430]++ > 0) check ('a string 2430'); break; + case 2431: if (n[2431]++ > 0) check ('a string 2431'); break; + case 2432: if (n[2432]++ > 0) check ('a string 2432'); break; + case 2433: if (n[2433]++ > 0) check ('a string 2433'); break; + case 2434: if (n[2434]++ > 0) check ('a string 2434'); break; + case 2435: if (n[2435]++ > 0) check ('a string 2435'); break; + case 2436: if (n[2436]++ > 0) check ('a string 2436'); break; + case 2437: if (n[2437]++ > 0) check ('a string 2437'); break; + case 2438: if (n[2438]++ > 0) check ('a string 2438'); break; + case 2439: if (n[2439]++ > 0) check ('a string 2439'); break; + case 2440: if (n[2440]++ > 0) check ('a string 2440'); break; + case 2441: if (n[2441]++ > 0) check ('a string 2441'); break; + case 2442: if (n[2442]++ > 0) check ('a string 2442'); break; + case 2443: if (n[2443]++ > 0) check ('a string 2443'); break; + case 2444: if (n[2444]++ > 0) check ('a string 2444'); break; + case 2445: if (n[2445]++ > 0) check ('a string 2445'); break; + case 2446: if (n[2446]++ > 0) check ('a string 2446'); break; + case 2447: if (n[2447]++ > 0) check ('a string 2447'); break; + case 2448: if (n[2448]++ > 0) check ('a string 2448'); break; + case 2449: if (n[2449]++ > 0) check ('a string 2449'); break; + case 2450: if (n[2450]++ > 0) check ('a string 2450'); break; + case 2451: if (n[2451]++ > 0) check ('a string 2451'); break; + case 2452: if (n[2452]++ > 0) check ('a string 2452'); break; + case 2453: if (n[2453]++ > 0) check ('a string 2453'); break; + case 2454: if (n[2454]++ > 0) check ('a string 2454'); break; + case 2455: if (n[2455]++ > 0) check ('a string 2455'); break; + case 2456: if (n[2456]++ > 0) check ('a string 2456'); break; + case 2457: if (n[2457]++ > 0) check ('a string 2457'); break; + case 2458: if (n[2458]++ > 0) check ('a string 2458'); break; + case 2459: if (n[2459]++ > 0) check ('a string 2459'); break; + case 2460: if (n[2460]++ > 0) check ('a string 2460'); break; + case 2461: if (n[2461]++ > 0) check ('a string 2461'); break; + case 2462: if (n[2462]++ > 0) check ('a string 2462'); break; + case 2463: if (n[2463]++ > 0) check ('a string 2463'); break; + case 2464: if (n[2464]++ > 0) check ('a string 2464'); break; + case 2465: if (n[2465]++ > 0) check ('a string 2465'); break; + case 2466: if (n[2466]++ > 0) check ('a string 2466'); break; + case 2467: if (n[2467]++ > 0) check ('a string 2467'); break; + case 2468: if (n[2468]++ > 0) check ('a string 2468'); break; + case 2469: if (n[2469]++ > 0) check ('a string 2469'); break; + case 2470: if (n[2470]++ > 0) check ('a string 2470'); break; + case 2471: if (n[2471]++ > 0) check ('a string 2471'); break; + case 2472: if (n[2472]++ > 0) check ('a string 2472'); break; + case 2473: if (n[2473]++ > 0) check ('a string 2473'); break; + case 2474: if (n[2474]++ > 0) check ('a string 2474'); break; + case 2475: if (n[2475]++ > 0) check ('a string 2475'); break; + case 2476: if (n[2476]++ > 0) check ('a string 2476'); break; + case 2477: if (n[2477]++ > 0) check ('a string 2477'); break; + case 2478: if (n[2478]++ > 0) check ('a string 2478'); break; + case 2479: if (n[2479]++ > 0) check ('a string 2479'); break; + case 2480: if (n[2480]++ > 0) check ('a string 2480'); break; + case 2481: if (n[2481]++ > 0) check ('a string 2481'); break; + case 2482: if (n[2482]++ > 0) check ('a string 2482'); break; + case 2483: if (n[2483]++ > 0) check ('a string 2483'); break; + case 2484: if (n[2484]++ > 0) check ('a string 2484'); break; + case 2485: if (n[2485]++ > 0) check ('a string 2485'); break; + case 2486: if (n[2486]++ > 0) check ('a string 2486'); break; + case 2487: if (n[2487]++ > 0) check ('a string 2487'); break; + case 2488: if (n[2488]++ > 0) check ('a string 2488'); break; + case 2489: if (n[2489]++ > 0) check ('a string 2489'); break; + case 2490: if (n[2490]++ > 0) check ('a string 2490'); break; + case 2491: if (n[2491]++ > 0) check ('a string 2491'); break; + case 2492: if (n[2492]++ > 0) check ('a string 2492'); break; + case 2493: if (n[2493]++ > 0) check ('a string 2493'); break; + case 2494: if (n[2494]++ > 0) check ('a string 2494'); break; + case 2495: if (n[2495]++ > 0) check ('a string 2495'); break; + case 2496: if (n[2496]++ > 0) check ('a string 2496'); break; + case 2497: if (n[2497]++ > 0) check ('a string 2497'); break; + case 2498: if (n[2498]++ > 0) check ('a string 2498'); break; + case 2499: if (n[2499]++ > 0) check ('a string 2499'); break; + case 2500: if (n[2500]++ > 0) check ('a string 2500'); break; + case 2501: if (n[2501]++ > 0) check ('a string 2501'); break; + case 2502: if (n[2502]++ > 0) check ('a string 2502'); break; + case 2503: if (n[2503]++ > 0) check ('a string 2503'); break; + case 2504: if (n[2504]++ > 0) check ('a string 2504'); break; + case 2505: if (n[2505]++ > 0) check ('a string 2505'); break; + case 2506: if (n[2506]++ > 0) check ('a string 2506'); break; + case 2507: if (n[2507]++ > 0) check ('a string 2507'); break; + case 2508: if (n[2508]++ > 0) check ('a string 2508'); break; + case 2509: if (n[2509]++ > 0) check ('a string 2509'); break; + case 2510: if (n[2510]++ > 0) check ('a string 2510'); break; + case 2511: if (n[2511]++ > 0) check ('a string 2511'); break; + case 2512: if (n[2512]++ > 0) check ('a string 2512'); break; + case 2513: if (n[2513]++ > 0) check ('a string 2513'); break; + case 2514: if (n[2514]++ > 0) check ('a string 2514'); break; + case 2515: if (n[2515]++ > 0) check ('a string 2515'); break; + case 2516: if (n[2516]++ > 0) check ('a string 2516'); break; + case 2517: if (n[2517]++ > 0) check ('a string 2517'); break; + case 2518: if (n[2518]++ > 0) check ('a string 2518'); break; + case 2519: if (n[2519]++ > 0) check ('a string 2519'); break; + case 2520: if (n[2520]++ > 0) check ('a string 2520'); break; + case 2521: if (n[2521]++ > 0) check ('a string 2521'); break; + case 2522: if (n[2522]++ > 0) check ('a string 2522'); break; + case 2523: if (n[2523]++ > 0) check ('a string 2523'); break; + case 2524: if (n[2524]++ > 0) check ('a string 2524'); break; + case 2525: if (n[2525]++ > 0) check ('a string 2525'); break; + case 2526: if (n[2526]++ > 0) check ('a string 2526'); break; + case 2527: if (n[2527]++ > 0) check ('a string 2527'); break; + case 2528: if (n[2528]++ > 0) check ('a string 2528'); break; + case 2529: if (n[2529]++ > 0) check ('a string 2529'); break; + case 2530: if (n[2530]++ > 0) check ('a string 2530'); break; + case 2531: if (n[2531]++ > 0) check ('a string 2531'); break; + case 2532: if (n[2532]++ > 0) check ('a string 2532'); break; + case 2533: if (n[2533]++ > 0) check ('a string 2533'); break; + case 2534: if (n[2534]++ > 0) check ('a string 2534'); break; + case 2535: if (n[2535]++ > 0) check ('a string 2535'); break; + case 2536: if (n[2536]++ > 0) check ('a string 2536'); break; + case 2537: if (n[2537]++ > 0) check ('a string 2537'); break; + case 2538: if (n[2538]++ > 0) check ('a string 2538'); break; + case 2539: if (n[2539]++ > 0) check ('a string 2539'); break; + case 2540: if (n[2540]++ > 0) check ('a string 2540'); break; + case 2541: if (n[2541]++ > 0) check ('a string 2541'); break; + case 2542: if (n[2542]++ > 0) check ('a string 2542'); break; + case 2543: if (n[2543]++ > 0) check ('a string 2543'); break; + case 2544: if (n[2544]++ > 0) check ('a string 2544'); break; + case 2545: if (n[2545]++ > 0) check ('a string 2545'); break; + case 2546: if (n[2546]++ > 0) check ('a string 2546'); break; + case 2547: if (n[2547]++ > 0) check ('a string 2547'); break; + case 2548: if (n[2548]++ > 0) check ('a string 2548'); break; + case 2549: if (n[2549]++ > 0) check ('a string 2549'); break; + case 2550: if (n[2550]++ > 0) check ('a string 2550'); break; + case 2551: if (n[2551]++ > 0) check ('a string 2551'); break; + case 2552: if (n[2552]++ > 0) check ('a string 2552'); break; + case 2553: if (n[2553]++ > 0) check ('a string 2553'); break; + case 2554: if (n[2554]++ > 0) check ('a string 2554'); break; + case 2555: if (n[2555]++ > 0) check ('a string 2555'); break; + case 2556: if (n[2556]++ > 0) check ('a string 2556'); break; + case 2557: if (n[2557]++ > 0) check ('a string 2557'); break; + case 2558: if (n[2558]++ > 0) check ('a string 2558'); break; + case 2559: if (n[2559]++ > 0) check ('a string 2559'); break; + case 2560: if (n[2560]++ > 0) check ('a string 2560'); break; + case 2561: if (n[2561]++ > 0) check ('a string 2561'); break; + case 2562: if (n[2562]++ > 0) check ('a string 2562'); break; + case 2563: if (n[2563]++ > 0) check ('a string 2563'); break; + case 2564: if (n[2564]++ > 0) check ('a string 2564'); break; + case 2565: if (n[2565]++ > 0) check ('a string 2565'); break; + case 2566: if (n[2566]++ > 0) check ('a string 2566'); break; + case 2567: if (n[2567]++ > 0) check ('a string 2567'); break; + case 2568: if (n[2568]++ > 0) check ('a string 2568'); break; + case 2569: if (n[2569]++ > 0) check ('a string 2569'); break; + case 2570: if (n[2570]++ > 0) check ('a string 2570'); break; + case 2571: if (n[2571]++ > 0) check ('a string 2571'); break; + case 2572: if (n[2572]++ > 0) check ('a string 2572'); break; + case 2573: if (n[2573]++ > 0) check ('a string 2573'); break; + case 2574: if (n[2574]++ > 0) check ('a string 2574'); break; + case 2575: if (n[2575]++ > 0) check ('a string 2575'); break; + case 2576: if (n[2576]++ > 0) check ('a string 2576'); break; + case 2577: if (n[2577]++ > 0) check ('a string 2577'); break; + case 2578: if (n[2578]++ > 0) check ('a string 2578'); break; + case 2579: if (n[2579]++ > 0) check ('a string 2579'); break; + case 2580: if (n[2580]++ > 0) check ('a string 2580'); break; + case 2581: if (n[2581]++ > 0) check ('a string 2581'); break; + case 2582: if (n[2582]++ > 0) check ('a string 2582'); break; + case 2583: if (n[2583]++ > 0) check ('a string 2583'); break; + case 2584: if (n[2584]++ > 0) check ('a string 2584'); break; + case 2585: if (n[2585]++ > 0) check ('a string 2585'); break; + case 2586: if (n[2586]++ > 0) check ('a string 2586'); break; + case 2587: if (n[2587]++ > 0) check ('a string 2587'); break; + case 2588: if (n[2588]++ > 0) check ('a string 2588'); break; + case 2589: if (n[2589]++ > 0) check ('a string 2589'); break; + case 2590: if (n[2590]++ > 0) check ('a string 2590'); break; + case 2591: if (n[2591]++ > 0) check ('a string 2591'); break; + case 2592: if (n[2592]++ > 0) check ('a string 2592'); break; + case 2593: if (n[2593]++ > 0) check ('a string 2593'); break; + case 2594: if (n[2594]++ > 0) check ('a string 2594'); break; + case 2595: if (n[2595]++ > 0) check ('a string 2595'); break; + case 2596: if (n[2596]++ > 0) check ('a string 2596'); break; + case 2597: if (n[2597]++ > 0) check ('a string 2597'); break; + case 2598: if (n[2598]++ > 0) check ('a string 2598'); break; + case 2599: if (n[2599]++ > 0) check ('a string 2599'); break; + case 2600: if (n[2600]++ > 0) check ('a string 2600'); break; + case 2601: if (n[2601]++ > 0) check ('a string 2601'); break; + case 2602: if (n[2602]++ > 0) check ('a string 2602'); break; + case 2603: if (n[2603]++ > 0) check ('a string 2603'); break; + case 2604: if (n[2604]++ > 0) check ('a string 2604'); break; + case 2605: if (n[2605]++ > 0) check ('a string 2605'); break; + case 2606: if (n[2606]++ > 0) check ('a string 2606'); break; + case 2607: if (n[2607]++ > 0) check ('a string 2607'); break; + case 2608: if (n[2608]++ > 0) check ('a string 2608'); break; + case 2609: if (n[2609]++ > 0) check ('a string 2609'); break; + case 2610: if (n[2610]++ > 0) check ('a string 2610'); break; + case 2611: if (n[2611]++ > 0) check ('a string 2611'); break; + case 2612: if (n[2612]++ > 0) check ('a string 2612'); break; + case 2613: if (n[2613]++ > 0) check ('a string 2613'); break; + case 2614: if (n[2614]++ > 0) check ('a string 2614'); break; + case 2615: if (n[2615]++ > 0) check ('a string 2615'); break; + case 2616: if (n[2616]++ > 0) check ('a string 2616'); break; + case 2617: if (n[2617]++ > 0) check ('a string 2617'); break; + case 2618: if (n[2618]++ > 0) check ('a string 2618'); break; + case 2619: if (n[2619]++ > 0) check ('a string 2619'); break; + case 2620: if (n[2620]++ > 0) check ('a string 2620'); break; + case 2621: if (n[2621]++ > 0) check ('a string 2621'); break; + case 2622: if (n[2622]++ > 0) check ('a string 2622'); break; + case 2623: if (n[2623]++ > 0) check ('a string 2623'); break; + case 2624: if (n[2624]++ > 0) check ('a string 2624'); break; + case 2625: if (n[2625]++ > 0) check ('a string 2625'); break; + case 2626: if (n[2626]++ > 0) check ('a string 2626'); break; + case 2627: if (n[2627]++ > 0) check ('a string 2627'); break; + case 2628: if (n[2628]++ > 0) check ('a string 2628'); break; + case 2629: if (n[2629]++ > 0) check ('a string 2629'); break; + case 2630: if (n[2630]++ > 0) check ('a string 2630'); break; + case 2631: if (n[2631]++ > 0) check ('a string 2631'); break; + case 2632: if (n[2632]++ > 0) check ('a string 2632'); break; + case 2633: if (n[2633]++ > 0) check ('a string 2633'); break; + case 2634: if (n[2634]++ > 0) check ('a string 2634'); break; + case 2635: if (n[2635]++ > 0) check ('a string 2635'); break; + case 2636: if (n[2636]++ > 0) check ('a string 2636'); break; + case 2637: if (n[2637]++ > 0) check ('a string 2637'); break; + case 2638: if (n[2638]++ > 0) check ('a string 2638'); break; + case 2639: if (n[2639]++ > 0) check ('a string 2639'); break; + case 2640: if (n[2640]++ > 0) check ('a string 2640'); break; + case 2641: if (n[2641]++ > 0) check ('a string 2641'); break; + case 2642: if (n[2642]++ > 0) check ('a string 2642'); break; + case 2643: if (n[2643]++ > 0) check ('a string 2643'); break; + case 2644: if (n[2644]++ > 0) check ('a string 2644'); break; + case 2645: if (n[2645]++ > 0) check ('a string 2645'); break; + case 2646: if (n[2646]++ > 0) check ('a string 2646'); break; + case 2647: if (n[2647]++ > 0) check ('a string 2647'); break; + case 2648: if (n[2648]++ > 0) check ('a string 2648'); break; + case 2649: if (n[2649]++ > 0) check ('a string 2649'); break; + case 2650: if (n[2650]++ > 0) check ('a string 2650'); break; + case 2651: if (n[2651]++ > 0) check ('a string 2651'); break; + case 2652: if (n[2652]++ > 0) check ('a string 2652'); break; + case 2653: if (n[2653]++ > 0) check ('a string 2653'); break; + case 2654: if (n[2654]++ > 0) check ('a string 2654'); break; + case 2655: if (n[2655]++ > 0) check ('a string 2655'); break; + case 2656: if (n[2656]++ > 0) check ('a string 2656'); break; + case 2657: if (n[2657]++ > 0) check ('a string 2657'); break; + case 2658: if (n[2658]++ > 0) check ('a string 2658'); break; + case 2659: if (n[2659]++ > 0) check ('a string 2659'); break; + case 2660: if (n[2660]++ > 0) check ('a string 2660'); break; + case 2661: if (n[2661]++ > 0) check ('a string 2661'); break; + case 2662: if (n[2662]++ > 0) check ('a string 2662'); break; + case 2663: if (n[2663]++ > 0) check ('a string 2663'); break; + case 2664: if (n[2664]++ > 0) check ('a string 2664'); break; + case 2665: if (n[2665]++ > 0) check ('a string 2665'); break; + case 2666: if (n[2666]++ > 0) check ('a string 2666'); break; + case 2667: if (n[2667]++ > 0) check ('a string 2667'); break; + case 2668: if (n[2668]++ > 0) check ('a string 2668'); break; + case 2669: if (n[2669]++ > 0) check ('a string 2669'); break; + case 2670: if (n[2670]++ > 0) check ('a string 2670'); break; + case 2671: if (n[2671]++ > 0) check ('a string 2671'); break; + case 2672: if (n[2672]++ > 0) check ('a string 2672'); break; + case 2673: if (n[2673]++ > 0) check ('a string 2673'); break; + case 2674: if (n[2674]++ > 0) check ('a string 2674'); break; + case 2675: if (n[2675]++ > 0) check ('a string 2675'); break; + case 2676: if (n[2676]++ > 0) check ('a string 2676'); break; + case 2677: if (n[2677]++ > 0) check ('a string 2677'); break; + case 2678: if (n[2678]++ > 0) check ('a string 2678'); break; + case 2679: if (n[2679]++ > 0) check ('a string 2679'); break; + case 2680: if (n[2680]++ > 0) check ('a string 2680'); break; + case 2681: if (n[2681]++ > 0) check ('a string 2681'); break; + case 2682: if (n[2682]++ > 0) check ('a string 2682'); break; + case 2683: if (n[2683]++ > 0) check ('a string 2683'); break; + case 2684: if (n[2684]++ > 0) check ('a string 2684'); break; + case 2685: if (n[2685]++ > 0) check ('a string 2685'); break; + case 2686: if (n[2686]++ > 0) check ('a string 2686'); break; + case 2687: if (n[2687]++ > 0) check ('a string 2687'); break; + case 2688: if (n[2688]++ > 0) check ('a string 2688'); break; + case 2689: if (n[2689]++ > 0) check ('a string 2689'); break; + case 2690: if (n[2690]++ > 0) check ('a string 2690'); break; + case 2691: if (n[2691]++ > 0) check ('a string 2691'); break; + case 2692: if (n[2692]++ > 0) check ('a string 2692'); break; + case 2693: if (n[2693]++ > 0) check ('a string 2693'); break; + case 2694: if (n[2694]++ > 0) check ('a string 2694'); break; + case 2695: if (n[2695]++ > 0) check ('a string 2695'); break; + case 2696: if (n[2696]++ > 0) check ('a string 2696'); break; + case 2697: if (n[2697]++ > 0) check ('a string 2697'); break; + case 2698: if (n[2698]++ > 0) check ('a string 2698'); break; + case 2699: if (n[2699]++ > 0) check ('a string 2699'); break; + case 2700: if (n[2700]++ > 0) check ('a string 2700'); break; + case 2701: if (n[2701]++ > 0) check ('a string 2701'); break; + case 2702: if (n[2702]++ > 0) check ('a string 2702'); break; + case 2703: if (n[2703]++ > 0) check ('a string 2703'); break; + case 2704: if (n[2704]++ > 0) check ('a string 2704'); break; + case 2705: if (n[2705]++ > 0) check ('a string 2705'); break; + case 2706: if (n[2706]++ > 0) check ('a string 2706'); break; + case 2707: if (n[2707]++ > 0) check ('a string 2707'); break; + case 2708: if (n[2708]++ > 0) check ('a string 2708'); break; + case 2709: if (n[2709]++ > 0) check ('a string 2709'); break; + case 2710: if (n[2710]++ > 0) check ('a string 2710'); break; + case 2711: if (n[2711]++ > 0) check ('a string 2711'); break; + case 2712: if (n[2712]++ > 0) check ('a string 2712'); break; + case 2713: if (n[2713]++ > 0) check ('a string 2713'); break; + case 2714: if (n[2714]++ > 0) check ('a string 2714'); break; + case 2715: if (n[2715]++ > 0) check ('a string 2715'); break; + case 2716: if (n[2716]++ > 0) check ('a string 2716'); break; + case 2717: if (n[2717]++ > 0) check ('a string 2717'); break; + case 2718: if (n[2718]++ > 0) check ('a string 2718'); break; + case 2719: if (n[2719]++ > 0) check ('a string 2719'); break; + case 2720: if (n[2720]++ > 0) check ('a string 2720'); break; + case 2721: if (n[2721]++ > 0) check ('a string 2721'); break; + case 2722: if (n[2722]++ > 0) check ('a string 2722'); break; + case 2723: if (n[2723]++ > 0) check ('a string 2723'); break; + case 2724: if (n[2724]++ > 0) check ('a string 2724'); break; + case 2725: if (n[2725]++ > 0) check ('a string 2725'); break; + case 2726: if (n[2726]++ > 0) check ('a string 2726'); break; + case 2727: if (n[2727]++ > 0) check ('a string 2727'); break; + case 2728: if (n[2728]++ > 0) check ('a string 2728'); break; + case 2729: if (n[2729]++ > 0) check ('a string 2729'); break; + case 2730: if (n[2730]++ > 0) check ('a string 2730'); break; + case 2731: if (n[2731]++ > 0) check ('a string 2731'); break; + case 2732: if (n[2732]++ > 0) check ('a string 2732'); break; + case 2733: if (n[2733]++ > 0) check ('a string 2733'); break; + case 2734: if (n[2734]++ > 0) check ('a string 2734'); break; + case 2735: if (n[2735]++ > 0) check ('a string 2735'); break; + case 2736: if (n[2736]++ > 0) check ('a string 2736'); break; + case 2737: if (n[2737]++ > 0) check ('a string 2737'); break; + case 2738: if (n[2738]++ > 0) check ('a string 2738'); break; + case 2739: if (n[2739]++ > 0) check ('a string 2739'); break; + case 2740: if (n[2740]++ > 0) check ('a string 2740'); break; + case 2741: if (n[2741]++ > 0) check ('a string 2741'); break; + case 2742: if (n[2742]++ > 0) check ('a string 2742'); break; + case 2743: if (n[2743]++ > 0) check ('a string 2743'); break; + case 2744: if (n[2744]++ > 0) check ('a string 2744'); break; + case 2745: if (n[2745]++ > 0) check ('a string 2745'); break; + case 2746: if (n[2746]++ > 0) check ('a string 2746'); break; + case 2747: if (n[2747]++ > 0) check ('a string 2747'); break; + case 2748: if (n[2748]++ > 0) check ('a string 2748'); break; + case 2749: if (n[2749]++ > 0) check ('a string 2749'); break; + case 2750: if (n[2750]++ > 0) check ('a string 2750'); break; + case 2751: if (n[2751]++ > 0) check ('a string 2751'); break; + case 2752: if (n[2752]++ > 0) check ('a string 2752'); break; + case 2753: if (n[2753]++ > 0) check ('a string 2753'); break; + case 2754: if (n[2754]++ > 0) check ('a string 2754'); break; + case 2755: if (n[2755]++ > 0) check ('a string 2755'); break; + case 2756: if (n[2756]++ > 0) check ('a string 2756'); break; + case 2757: if (n[2757]++ > 0) check ('a string 2757'); break; + case 2758: if (n[2758]++ > 0) check ('a string 2758'); break; + case 2759: if (n[2759]++ > 0) check ('a string 2759'); break; + case 2760: if (n[2760]++ > 0) check ('a string 2760'); break; + case 2761: if (n[2761]++ > 0) check ('a string 2761'); break; + case 2762: if (n[2762]++ > 0) check ('a string 2762'); break; + case 2763: if (n[2763]++ > 0) check ('a string 2763'); break; + case 2764: if (n[2764]++ > 0) check ('a string 2764'); break; + case 2765: if (n[2765]++ > 0) check ('a string 2765'); break; + case 2766: if (n[2766]++ > 0) check ('a string 2766'); break; + case 2767: if (n[2767]++ > 0) check ('a string 2767'); break; + case 2768: if (n[2768]++ > 0) check ('a string 2768'); break; + case 2769: if (n[2769]++ > 0) check ('a string 2769'); break; + case 2770: if (n[2770]++ > 0) check ('a string 2770'); break; + case 2771: if (n[2771]++ > 0) check ('a string 2771'); break; + case 2772: if (n[2772]++ > 0) check ('a string 2772'); break; + case 2773: if (n[2773]++ > 0) check ('a string 2773'); break; + case 2774: if (n[2774]++ > 0) check ('a string 2774'); break; + case 2775: if (n[2775]++ > 0) check ('a string 2775'); break; + case 2776: if (n[2776]++ > 0) check ('a string 2776'); break; + case 2777: if (n[2777]++ > 0) check ('a string 2777'); break; + case 2778: if (n[2778]++ > 0) check ('a string 2778'); break; + case 2779: if (n[2779]++ > 0) check ('a string 2779'); break; + case 2780: if (n[2780]++ > 0) check ('a string 2780'); break; + case 2781: if (n[2781]++ > 0) check ('a string 2781'); break; + case 2782: if (n[2782]++ > 0) check ('a string 2782'); break; + case 2783: if (n[2783]++ > 0) check ('a string 2783'); break; + case 2784: if (n[2784]++ > 0) check ('a string 2784'); break; + case 2785: if (n[2785]++ > 0) check ('a string 2785'); break; + case 2786: if (n[2786]++ > 0) check ('a string 2786'); break; + case 2787: if (n[2787]++ > 0) check ('a string 2787'); break; + case 2788: if (n[2788]++ > 0) check ('a string 2788'); break; + case 2789: if (n[2789]++ > 0) check ('a string 2789'); break; + case 2790: if (n[2790]++ > 0) check ('a string 2790'); break; + case 2791: if (n[2791]++ > 0) check ('a string 2791'); break; + case 2792: if (n[2792]++ > 0) check ('a string 2792'); break; + case 2793: if (n[2793]++ > 0) check ('a string 2793'); break; + case 2794: if (n[2794]++ > 0) check ('a string 2794'); break; + case 2795: if (n[2795]++ > 0) check ('a string 2795'); break; + case 2796: if (n[2796]++ > 0) check ('a string 2796'); break; + case 2797: if (n[2797]++ > 0) check ('a string 2797'); break; + case 2798: if (n[2798]++ > 0) check ('a string 2798'); break; + case 2799: if (n[2799]++ > 0) check ('a string 2799'); break; + case 2800: if (n[2800]++ > 0) check ('a string 2800'); break; + case 2801: if (n[2801]++ > 0) check ('a string 2801'); break; + case 2802: if (n[2802]++ > 0) check ('a string 2802'); break; + case 2803: if (n[2803]++ > 0) check ('a string 2803'); break; + case 2804: if (n[2804]++ > 0) check ('a string 2804'); break; + case 2805: if (n[2805]++ > 0) check ('a string 2805'); break; + case 2806: if (n[2806]++ > 0) check ('a string 2806'); break; + case 2807: if (n[2807]++ > 0) check ('a string 2807'); break; + case 2808: if (n[2808]++ > 0) check ('a string 2808'); break; + case 2809: if (n[2809]++ > 0) check ('a string 2809'); break; + case 2810: if (n[2810]++ > 0) check ('a string 2810'); break; + case 2811: if (n[2811]++ > 0) check ('a string 2811'); break; + case 2812: if (n[2812]++ > 0) check ('a string 2812'); break; + case 2813: if (n[2813]++ > 0) check ('a string 2813'); break; + case 2814: if (n[2814]++ > 0) check ('a string 2814'); break; + case 2815: if (n[2815]++ > 0) check ('a string 2815'); break; + case 2816: if (n[2816]++ > 0) check ('a string 2816'); break; + case 2817: if (n[2817]++ > 0) check ('a string 2817'); break; + case 2818: if (n[2818]++ > 0) check ('a string 2818'); break; + case 2819: if (n[2819]++ > 0) check ('a string 2819'); break; + case 2820: if (n[2820]++ > 0) check ('a string 2820'); break; + case 2821: if (n[2821]++ > 0) check ('a string 2821'); break; + case 2822: if (n[2822]++ > 0) check ('a string 2822'); break; + case 2823: if (n[2823]++ > 0) check ('a string 2823'); break; + case 2824: if (n[2824]++ > 0) check ('a string 2824'); break; + case 2825: if (n[2825]++ > 0) check ('a string 2825'); break; + case 2826: if (n[2826]++ > 0) check ('a string 2826'); break; + case 2827: if (n[2827]++ > 0) check ('a string 2827'); break; + case 2828: if (n[2828]++ > 0) check ('a string 2828'); break; + case 2829: if (n[2829]++ > 0) check ('a string 2829'); break; + case 2830: if (n[2830]++ > 0) check ('a string 2830'); break; + case 2831: if (n[2831]++ > 0) check ('a string 2831'); break; + case 2832: if (n[2832]++ > 0) check ('a string 2832'); break; + case 2833: if (n[2833]++ > 0) check ('a string 2833'); break; + case 2834: if (n[2834]++ > 0) check ('a string 2834'); break; + case 2835: if (n[2835]++ > 0) check ('a string 2835'); break; + case 2836: if (n[2836]++ > 0) check ('a string 2836'); break; + case 2837: if (n[2837]++ > 0) check ('a string 2837'); break; + case 2838: if (n[2838]++ > 0) check ('a string 2838'); break; + case 2839: if (n[2839]++ > 0) check ('a string 2839'); break; + case 2840: if (n[2840]++ > 0) check ('a string 2840'); break; + case 2841: if (n[2841]++ > 0) check ('a string 2841'); break; + case 2842: if (n[2842]++ > 0) check ('a string 2842'); break; + case 2843: if (n[2843]++ > 0) check ('a string 2843'); break; + case 2844: if (n[2844]++ > 0) check ('a string 2844'); break; + case 2845: if (n[2845]++ > 0) check ('a string 2845'); break; + case 2846: if (n[2846]++ > 0) check ('a string 2846'); break; + case 2847: if (n[2847]++ > 0) check ('a string 2847'); break; + case 2848: if (n[2848]++ > 0) check ('a string 2848'); break; + case 2849: if (n[2849]++ > 0) check ('a string 2849'); break; + case 2850: if (n[2850]++ > 0) check ('a string 2850'); break; + case 2851: if (n[2851]++ > 0) check ('a string 2851'); break; + case 2852: if (n[2852]++ > 0) check ('a string 2852'); break; + case 2853: if (n[2853]++ > 0) check ('a string 2853'); break; + case 2854: if (n[2854]++ > 0) check ('a string 2854'); break; + case 2855: if (n[2855]++ > 0) check ('a string 2855'); break; + case 2856: if (n[2856]++ > 0) check ('a string 2856'); break; + case 2857: if (n[2857]++ > 0) check ('a string 2857'); break; + case 2858: if (n[2858]++ > 0) check ('a string 2858'); break; + case 2859: if (n[2859]++ > 0) check ('a string 2859'); break; + case 2860: if (n[2860]++ > 0) check ('a string 2860'); break; + case 2861: if (n[2861]++ > 0) check ('a string 2861'); break; + case 2862: if (n[2862]++ > 0) check ('a string 2862'); break; + case 2863: if (n[2863]++ > 0) check ('a string 2863'); break; + case 2864: if (n[2864]++ > 0) check ('a string 2864'); break; + case 2865: if (n[2865]++ > 0) check ('a string 2865'); break; + case 2866: if (n[2866]++ > 0) check ('a string 2866'); break; + case 2867: if (n[2867]++ > 0) check ('a string 2867'); break; + case 2868: if (n[2868]++ > 0) check ('a string 2868'); break; + case 2869: if (n[2869]++ > 0) check ('a string 2869'); break; + case 2870: if (n[2870]++ > 0) check ('a string 2870'); break; + case 2871: if (n[2871]++ > 0) check ('a string 2871'); break; + case 2872: if (n[2872]++ > 0) check ('a string 2872'); break; + case 2873: if (n[2873]++ > 0) check ('a string 2873'); break; + case 2874: if (n[2874]++ > 0) check ('a string 2874'); break; + case 2875: if (n[2875]++ > 0) check ('a string 2875'); break; + case 2876: if (n[2876]++ > 0) check ('a string 2876'); break; + case 2877: if (n[2877]++ > 0) check ('a string 2877'); break; + case 2878: if (n[2878]++ > 0) check ('a string 2878'); break; + case 2879: if (n[2879]++ > 0) check ('a string 2879'); break; + case 2880: if (n[2880]++ > 0) check ('a string 2880'); break; + case 2881: if (n[2881]++ > 0) check ('a string 2881'); break; + case 2882: if (n[2882]++ > 0) check ('a string 2882'); break; + case 2883: if (n[2883]++ > 0) check ('a string 2883'); break; + case 2884: if (n[2884]++ > 0) check ('a string 2884'); break; + case 2885: if (n[2885]++ > 0) check ('a string 2885'); break; + case 2886: if (n[2886]++ > 0) check ('a string 2886'); break; + case 2887: if (n[2887]++ > 0) check ('a string 2887'); break; + case 2888: if (n[2888]++ > 0) check ('a string 2888'); break; + case 2889: if (n[2889]++ > 0) check ('a string 2889'); break; + case 2890: if (n[2890]++ > 0) check ('a string 2890'); break; + case 2891: if (n[2891]++ > 0) check ('a string 2891'); break; + case 2892: if (n[2892]++ > 0) check ('a string 2892'); break; + case 2893: if (n[2893]++ > 0) check ('a string 2893'); break; + case 2894: if (n[2894]++ > 0) check ('a string 2894'); break; + case 2895: if (n[2895]++ > 0) check ('a string 2895'); break; + case 2896: if (n[2896]++ > 0) check ('a string 2896'); break; + case 2897: if (n[2897]++ > 0) check ('a string 2897'); break; + case 2898: if (n[2898]++ > 0) check ('a string 2898'); break; + case 2899: if (n[2899]++ > 0) check ('a string 2899'); break; + case 2900: if (n[2900]++ > 0) check ('a string 2900'); break; + case 2901: if (n[2901]++ > 0) check ('a string 2901'); break; + case 2902: if (n[2902]++ > 0) check ('a string 2902'); break; + case 2903: if (n[2903]++ > 0) check ('a string 2903'); break; + case 2904: if (n[2904]++ > 0) check ('a string 2904'); break; + case 2905: if (n[2905]++ > 0) check ('a string 2905'); break; + case 2906: if (n[2906]++ > 0) check ('a string 2906'); break; + case 2907: if (n[2907]++ > 0) check ('a string 2907'); break; + case 2908: if (n[2908]++ > 0) check ('a string 2908'); break; + case 2909: if (n[2909]++ > 0) check ('a string 2909'); break; + case 2910: if (n[2910]++ > 0) check ('a string 2910'); break; + case 2911: if (n[2911]++ > 0) check ('a string 2911'); break; + case 2912: if (n[2912]++ > 0) check ('a string 2912'); break; + case 2913: if (n[2913]++ > 0) check ('a string 2913'); break; + case 2914: if (n[2914]++ > 0) check ('a string 2914'); break; + case 2915: if (n[2915]++ > 0) check ('a string 2915'); break; + case 2916: if (n[2916]++ > 0) check ('a string 2916'); break; + case 2917: if (n[2917]++ > 0) check ('a string 2917'); break; + case 2918: if (n[2918]++ > 0) check ('a string 2918'); break; + case 2919: if (n[2919]++ > 0) check ('a string 2919'); break; + case 2920: if (n[2920]++ > 0) check ('a string 2920'); break; + case 2921: if (n[2921]++ > 0) check ('a string 2921'); break; + case 2922: if (n[2922]++ > 0) check ('a string 2922'); break; + case 2923: if (n[2923]++ > 0) check ('a string 2923'); break; + case 2924: if (n[2924]++ > 0) check ('a string 2924'); break; + case 2925: if (n[2925]++ > 0) check ('a string 2925'); break; + case 2926: if (n[2926]++ > 0) check ('a string 2926'); break; + case 2927: if (n[2927]++ > 0) check ('a string 2927'); break; + case 2928: if (n[2928]++ > 0) check ('a string 2928'); break; + case 2929: if (n[2929]++ > 0) check ('a string 2929'); break; + case 2930: if (n[2930]++ > 0) check ('a string 2930'); break; + case 2931: if (n[2931]++ > 0) check ('a string 2931'); break; + case 2932: if (n[2932]++ > 0) check ('a string 2932'); break; + case 2933: if (n[2933]++ > 0) check ('a string 2933'); break; + case 2934: if (n[2934]++ > 0) check ('a string 2934'); break; + case 2935: if (n[2935]++ > 0) check ('a string 2935'); break; + case 2936: if (n[2936]++ > 0) check ('a string 2936'); break; + case 2937: if (n[2937]++ > 0) check ('a string 2937'); break; + case 2938: if (n[2938]++ > 0) check ('a string 2938'); break; + case 2939: if (n[2939]++ > 0) check ('a string 2939'); break; + case 2940: if (n[2940]++ > 0) check ('a string 2940'); break; + case 2941: if (n[2941]++ > 0) check ('a string 2941'); break; + case 2942: if (n[2942]++ > 0) check ('a string 2942'); break; + case 2943: if (n[2943]++ > 0) check ('a string 2943'); break; + case 2944: if (n[2944]++ > 0) check ('a string 2944'); break; + case 2945: if (n[2945]++ > 0) check ('a string 2945'); break; + case 2946: if (n[2946]++ > 0) check ('a string 2946'); break; + case 2947: if (n[2947]++ > 0) check ('a string 2947'); break; + case 2948: if (n[2948]++ > 0) check ('a string 2948'); break; + case 2949: if (n[2949]++ > 0) check ('a string 2949'); break; + case 2950: if (n[2950]++ > 0) check ('a string 2950'); break; + case 2951: if (n[2951]++ > 0) check ('a string 2951'); break; + case 2952: if (n[2952]++ > 0) check ('a string 2952'); break; + case 2953: if (n[2953]++ > 0) check ('a string 2953'); break; + case 2954: if (n[2954]++ > 0) check ('a string 2954'); break; + case 2955: if (n[2955]++ > 0) check ('a string 2955'); break; + case 2956: if (n[2956]++ > 0) check ('a string 2956'); break; + case 2957: if (n[2957]++ > 0) check ('a string 2957'); break; + case 2958: if (n[2958]++ > 0) check ('a string 2958'); break; + case 2959: if (n[2959]++ > 0) check ('a string 2959'); break; + case 2960: if (n[2960]++ > 0) check ('a string 2960'); break; + case 2961: if (n[2961]++ > 0) check ('a string 2961'); break; + case 2962: if (n[2962]++ > 0) check ('a string 2962'); break; + case 2963: if (n[2963]++ > 0) check ('a string 2963'); break; + case 2964: if (n[2964]++ > 0) check ('a string 2964'); break; + case 2965: if (n[2965]++ > 0) check ('a string 2965'); break; + case 2966: if (n[2966]++ > 0) check ('a string 2966'); break; + case 2967: if (n[2967]++ > 0) check ('a string 2967'); break; + case 2968: if (n[2968]++ > 0) check ('a string 2968'); break; + case 2969: if (n[2969]++ > 0) check ('a string 2969'); break; + case 2970: if (n[2970]++ > 0) check ('a string 2970'); break; + case 2971: if (n[2971]++ > 0) check ('a string 2971'); break; + case 2972: if (n[2972]++ > 0) check ('a string 2972'); break; + case 2973: if (n[2973]++ > 0) check ('a string 2973'); break; + case 2974: if (n[2974]++ > 0) check ('a string 2974'); break; + case 2975: if (n[2975]++ > 0) check ('a string 2975'); break; + case 2976: if (n[2976]++ > 0) check ('a string 2976'); break; + case 2977: if (n[2977]++ > 0) check ('a string 2977'); break; + case 2978: if (n[2978]++ > 0) check ('a string 2978'); break; + case 2979: if (n[2979]++ > 0) check ('a string 2979'); break; + case 2980: if (n[2980]++ > 0) check ('a string 2980'); break; + case 2981: if (n[2981]++ > 0) check ('a string 2981'); break; + case 2982: if (n[2982]++ > 0) check ('a string 2982'); break; + case 2983: if (n[2983]++ > 0) check ('a string 2983'); break; + case 2984: if (n[2984]++ > 0) check ('a string 2984'); break; + case 2985: if (n[2985]++ > 0) check ('a string 2985'); break; + case 2986: if (n[2986]++ > 0) check ('a string 2986'); break; + case 2987: if (n[2987]++ > 0) check ('a string 2987'); break; + case 2988: if (n[2988]++ > 0) check ('a string 2988'); break; + case 2989: if (n[2989]++ > 0) check ('a string 2989'); break; + case 2990: if (n[2990]++ > 0) check ('a string 2990'); break; + case 2991: if (n[2991]++ > 0) check ('a string 2991'); break; + case 2992: if (n[2992]++ > 0) check ('a string 2992'); break; + case 2993: if (n[2993]++ > 0) check ('a string 2993'); break; + case 2994: if (n[2994]++ > 0) check ('a string 2994'); break; + case 2995: if (n[2995]++ > 0) check ('a string 2995'); break; + case 2996: if (n[2996]++ > 0) check ('a string 2996'); break; + case 2997: if (n[2997]++ > 0) check ('a string 2997'); break; + case 2998: if (n[2998]++ > 0) check ('a string 2998'); break; + case 2999: if (n[2999]++ > 0) check ('a string 2999'); break; + case 3000: if (n[3000]++ > 0) check ('a string 3000'); break; + case 3001: if (n[3001]++ > 0) check ('a string 3001'); break; + case 3002: if (n[3002]++ > 0) check ('a string 3002'); break; + case 3003: if (n[3003]++ > 0) check ('a string 3003'); break; + case 3004: if (n[3004]++ > 0) check ('a string 3004'); break; + case 3005: if (n[3005]++ > 0) check ('a string 3005'); break; + case 3006: if (n[3006]++ > 0) check ('a string 3006'); break; + case 3007: if (n[3007]++ > 0) check ('a string 3007'); break; + case 3008: if (n[3008]++ > 0) check ('a string 3008'); break; + case 3009: if (n[3009]++ > 0) check ('a string 3009'); break; + default : if (n[3010]++ > 0) check ('a string 3010'); break; + } + } + + b4(); + b_after(); +} + + +function check(status) +{ + print('k = ' + k + ' j = ' + j + ' ' + status); + + for (i = 0; i < i2; i++) + { + if (n[i] != 1) + { + print('n[' + i + '] = ' + n[i]); + if (i != j) + { + print('Test failed'); + err_num++; + break; + } + } + } +} + + +function b4() +{ + print('Visited b4'); +} + + +function b_after() +{ + print('Visited b_after'); +} + +reportCompare('No Error', 'No Error', ''); diff --git a/js/src/tests/js1_5/Regress/regress-82306.js b/js/src/tests/js1_5/Regress/regress-82306.js new file mode 100644 index 000000000..a4a8a9f95 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-82306.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 23 May 2001 + * + * SUMMARY: Regression test for Bugzilla bug 82306 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=82306 + * + * This test used to crash the JS engine. This was discovered + * by Mike Epstein <epstein@tellme.com> + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 82306; +var summary = "Testing we don't crash on encodeURI()"; +var URI = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + URI += '<?xml version="1.0"?>'; + URI += '<zcti application="xxxx_demo">'; + URI += '<pstn_data>'; + URI += '<ani>650-930-xxxx</ani>'; + URI += '<dnis>877-485-xxxx</dnis>'; + URI += '</pstn_data>'; + URI += '<keyvalue key="name" value="xxx"/>'; + URI += '<keyvalue key="phone" value="6509309000"/>'; + URI += '</zcti>'; + + // Just testing that we don't crash on this + encodeURI(URI); + + reportCompare('No Crash', 'No Crash', ''); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-89443.js b/js/src/tests/js1_5/Regress/regress-89443.js new file mode 100644 index 000000000..6307355c0 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-89443.js @@ -0,0 +1,2119 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-12 + * + * SUMMARY: Regression test for bug 89443 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=89443 + * + * Just seeing if this script will compile without stack overflow. + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 89443; +var summary = 'Testing this script will compile without stack overflow'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +// I don't know what these functions are supposed to be; use dummies - +function isPlainHostName() +{ +} + +function dnsDomainIs() +{ +} + +// Here's the big function - +function FindProxyForURL(url, host) +{ + + if (isPlainHostName(host) + || dnsDomainIs(host, ".hennepin.lib.mn.us") + || dnsDomainIs(host, ".hclib.org") + ) + return "DIRECT"; + else if (isPlainHostName(host) + +// subscription database access + + || dnsDomainIs(host, ".asahi.com") + || dnsDomainIs(host, ".2facts.com") + || dnsDomainIs(host, ".oclc.org") + || dnsDomainIs(host, ".collegesource.com") + || dnsDomainIs(host, ".cq.com") + || dnsDomainIs(host, ".grolier.com") + || dnsDomainIs(host, ".groveart.com") + || dnsDomainIs(host, ".groveopera.com") + || dnsDomainIs(host, ".fsonline.com") + || dnsDomainIs(host, ".carl.org") + || dnsDomainIs(host, ".newslibrary.com") + || dnsDomainIs(host, ".pioneerplanet.com") + || dnsDomainIs(host, ".startribune.com") + || dnsDomainIs(host, ".poemfinder.com") + || dnsDomainIs(host, ".umi.com") + || dnsDomainIs(host, ".referenceusa.com") + || dnsDomainIs(host, ".sirs.com") + || dnsDomainIs(host, ".krmediastream.com") + || dnsDomainIs(host, ".gale.com") + || dnsDomainIs(host, ".galenet.com") + || dnsDomainIs(host, ".galegroup.com") + || dnsDomainIs(host, ".facts.com") + || dnsDomainIs(host, ".eb.com") + || dnsDomainIs(host, ".worldbookonline.com") + || dnsDomainIs(host, ".galegroup.com") + || dnsDomainIs(host, ".accessscience.com") + || dnsDomainIs(host, ".booksinprint.com") + || dnsDomainIs(host, ".infolearning.com") + || dnsDomainIs(host, ".standardpoor.com") + +// image servers + || dnsDomainIs(host, ".akamaitech.net") + || dnsDomainIs(host, ".akamai.net") + || dnsDomainIs(host, ".yimg.com") + || dnsDomainIs(host, ".imgis.com") + || dnsDomainIs(host, ".ibsys.com") + +// KidsClick-linked kids search engines + || dnsDomainIs(host, ".edview.com") + || dnsDomainIs(host, ".searchopolis.com") + || dnsDomainIs(host, ".onekey.com") + || dnsDomainIs(host, ".askjeeves.com") + +// Non-subscription Reference Tools URLs from the RecWebSites DBData table + || dnsDomainIs(host, "www.cnn.com") + || dnsDomainIs(host, "www.emulateme.com") + || dnsDomainIs(host, "terraserver.microsoft.com") + || dnsDomainIs(host, "www.theodora.com") + || dnsDomainIs(host, "www.3datlas.com") + || dnsDomainIs(host, "www.infoplease.com") + || dnsDomainIs(host, "www.switchboard.com") + || dnsDomainIs(host, "www.bartleby.com") + || dnsDomainIs(host, "www.mn-politics.com") + || dnsDomainIs(host, "www.thesaurus.com") + || dnsDomainIs(host, "www.usnews.com") + || dnsDomainIs(host, "www.petersons.com") + || dnsDomainIs(host, "www.collegenet.com") + || dnsDomainIs(host, "www.m-w.com") + || dnsDomainIs(host, "clever.net") + || dnsDomainIs(host, "maps.expedia.com") + || dnsDomainIs(host, "www.CollegeEdge.com") + || dnsDomainIs(host, "www.homeworkcentral.com") + || dnsDomainIs(host, "www.studyweb.com") + || dnsDomainIs(host, "www.mnpro.com") + +// custom URLs for local and other access + || dnsDomainIs(host, ".dsdukes.com") + || dnsDomainIs(host, ".spsaints.com") + || dnsDomainIs(host, ".mnzoo.com") + || dnsDomainIs(host, ".realaudio.com") + || dnsDomainIs(host, ".co.hennepin.mn.us") + || dnsDomainIs(host, ".gov") + || dnsDomainIs(host, ".org") + || dnsDomainIs(host, ".edu") + || dnsDomainIs(host, ".fox29.com") + || dnsDomainIs(host, ".wcco.com") + || dnsDomainIs(host, ".kstp.com") + || dnsDomainIs(host, ".kmsp.com") + || dnsDomainIs(host, ".kare11.com") + || dnsDomainIs(host, ".macromedia.com") + || dnsDomainIs(host, ".shockwave.com") + || dnsDomainIs(host, ".wwf.com") + || dnsDomainIs(host, ".wwfsuperstars.com") + || dnsDomainIs(host, ".summerslam.com") + || dnsDomainIs(host, ".yahooligans.com") + || dnsDomainIs(host, ".mhoob.com") + || dnsDomainIs(host, "www.hmonginternet.com") + || dnsDomainIs(host, "www.hmongonline.com") + || dnsDomainIs(host, ".yahoo.com") + || dnsDomainIs(host, ".pokemon.com") + || dnsDomainIs(host, ".bet.com") + || dnsDomainIs(host, ".smallworld.com") + || dnsDomainIs(host, ".cartoonnetwork.com") + || dnsDomainIs(host, ".carmensandiego.com") + || dnsDomainIs(host, ".disney.com") + || dnsDomainIs(host, ".powerpuffgirls.com") + || dnsDomainIs(host, ".aol.com") + +// Smithsonian + || dnsDomainIs(host, "160.111.100.190") + +// Hotmail + || dnsDomainIs(host, ".passport.com") + || dnsDomainIs(host, ".hotmail.com") + || dnsDomainIs(host, "216.33.236.24") + || dnsDomainIs(host, "216.32.182.251") + || dnsDomainIs(host, ".hotmail.msn.com") + +// K12 schools + || dnsDomainIs(host, ".k12.al.us") + || dnsDomainIs(host, ".k12.ak.us") + || dnsDomainIs(host, ".k12.ar.us") + || dnsDomainIs(host, ".k12.az.us") + || dnsDomainIs(host, ".k12.ca.us") + || dnsDomainIs(host, ".k12.co.us") + || dnsDomainIs(host, ".k12.ct.us") + || dnsDomainIs(host, ".k12.dc.us") + || dnsDomainIs(host, ".k12.de.us") + || dnsDomainIs(host, ".k12.fl.us") + || dnsDomainIs(host, ".k12.ga.us") + || dnsDomainIs(host, ".k12.hi.us") + || dnsDomainIs(host, ".k12.id.us") + || dnsDomainIs(host, ".k12.il.us") + || dnsDomainIs(host, ".k12.in.us") + || dnsDomainIs(host, ".k12.ia.us") + || dnsDomainIs(host, ".k12.ks.us") + || dnsDomainIs(host, ".k12.ky.us") + || dnsDomainIs(host, ".k12.la.us") + || dnsDomainIs(host, ".k12.me.us") + || dnsDomainIs(host, ".k12.md.us") + || dnsDomainIs(host, ".k12.ma.us") + || dnsDomainIs(host, ".k12.mi.us") + || dnsDomainIs(host, ".k12.mn.us") + || dnsDomainIs(host, ".k12.ms.us") + || dnsDomainIs(host, ".k12.mo.us") + || dnsDomainIs(host, ".k12.mt.us") + || dnsDomainIs(host, ".k12.ne.us") + || dnsDomainIs(host, ".k12.nv.us") + || dnsDomainIs(host, ".k12.nh.us") + || dnsDomainIs(host, ".k12.nj.us") + || dnsDomainIs(host, ".k12.nm.us") + || dnsDomainIs(host, ".k12.ny.us") + || dnsDomainIs(host, ".k12.nc.us") + || dnsDomainIs(host, ".k12.nd.us") + || dnsDomainIs(host, ".k12.oh.us") + || dnsDomainIs(host, ".k12.ok.us") + || dnsDomainIs(host, ".k12.or.us") + || dnsDomainIs(host, ".k12.pa.us") + || dnsDomainIs(host, ".k12.ri.us") + || dnsDomainIs(host, ".k12.sc.us") + || dnsDomainIs(host, ".k12.sd.us") + || dnsDomainIs(host, ".k12.tn.us") + || dnsDomainIs(host, ".k12.tx.us") + || dnsDomainIs(host, ".k12.ut.us") + || dnsDomainIs(host, ".k12.vt.us") + || dnsDomainIs(host, ".k12.va.us") + || dnsDomainIs(host, ".k12.wa.us") + || dnsDomainIs(host, ".k12.wv.us") + || dnsDomainIs(host, ".k12.wi.us") + || dnsDomainIs(host, ".k12.wy.us") + +// U.S. Libraries + || dnsDomainIs(host, ".lib.al.us") + || dnsDomainIs(host, ".lib.ak.us") + || dnsDomainIs(host, ".lib.ar.us") + || dnsDomainIs(host, ".lib.az.us") + || dnsDomainIs(host, ".lib.ca.us") + || dnsDomainIs(host, ".lib.co.us") + || dnsDomainIs(host, ".lib.ct.us") + || dnsDomainIs(host, ".lib.dc.us") + || dnsDomainIs(host, ".lib.de.us") + || dnsDomainIs(host, ".lib.fl.us") + || dnsDomainIs(host, ".lib.ga.us") + || dnsDomainIs(host, ".lib.hi.us") + || dnsDomainIs(host, ".lib.id.us") + || dnsDomainIs(host, ".lib.il.us") + || dnsDomainIs(host, ".lib.in.us") + || dnsDomainIs(host, ".lib.ia.us") + || dnsDomainIs(host, ".lib.ks.us") + || dnsDomainIs(host, ".lib.ky.us") + || dnsDomainIs(host, ".lib.la.us") + || dnsDomainIs(host, ".lib.me.us") + || dnsDomainIs(host, ".lib.md.us") + || dnsDomainIs(host, ".lib.ma.us") + || dnsDomainIs(host, ".lib.mi.us") + || dnsDomainIs(host, ".lib.mn.us") + || dnsDomainIs(host, ".lib.ms.us") + || dnsDomainIs(host, ".lib.mo.us") + || dnsDomainIs(host, ".lib.mt.us") + || dnsDomainIs(host, ".lib.ne.us") + || dnsDomainIs(host, ".lib.nv.us") + || dnsDomainIs(host, ".lib.nh.us") + || dnsDomainIs(host, ".lib.nj.us") + || dnsDomainIs(host, ".lib.nm.us") + || dnsDomainIs(host, ".lib.ny.us") + || dnsDomainIs(host, ".lib.nc.us") + || dnsDomainIs(host, ".lib.nd.us") + || dnsDomainIs(host, ".lib.oh.us") + || dnsDomainIs(host, ".lib.ok.us") + || dnsDomainIs(host, ".lib.or.us") + || dnsDomainIs(host, ".lib.pa.us") + || dnsDomainIs(host, ".lib.ri.us") + || dnsDomainIs(host, ".lib.sc.us") + || dnsDomainIs(host, ".lib.sd.us") + || dnsDomainIs(host, ".lib.tn.us") + || dnsDomainIs(host, ".lib.tx.us") + || dnsDomainIs(host, ".lib.ut.us") + || dnsDomainIs(host, ".lib.vt.us") + || dnsDomainIs(host, ".lib.va.us") + || dnsDomainIs(host, ".lib.wa.us") + || dnsDomainIs(host, ".lib.wv.us") + || dnsDomainIs(host, ".lib.wi.us") + || dnsDomainIs(host, ".lib.wy.us") + +// U.S. Cities + || dnsDomainIs(host, ".ci.al.us") + || dnsDomainIs(host, ".ci.ak.us") + || dnsDomainIs(host, ".ci.ar.us") + || dnsDomainIs(host, ".ci.az.us") + || dnsDomainIs(host, ".ci.ca.us") + || dnsDomainIs(host, ".ci.co.us") + || dnsDomainIs(host, ".ci.ct.us") + || dnsDomainIs(host, ".ci.dc.us") + || dnsDomainIs(host, ".ci.de.us") + || dnsDomainIs(host, ".ci.fl.us") + || dnsDomainIs(host, ".ci.ga.us") + || dnsDomainIs(host, ".ci.hi.us") + || dnsDomainIs(host, ".ci.id.us") + || dnsDomainIs(host, ".ci.il.us") + || dnsDomainIs(host, ".ci.in.us") + || dnsDomainIs(host, ".ci.ia.us") + || dnsDomainIs(host, ".ci.ks.us") + || dnsDomainIs(host, ".ci.ky.us") + || dnsDomainIs(host, ".ci.la.us") + || dnsDomainIs(host, ".ci.me.us") + || dnsDomainIs(host, ".ci.md.us") + || dnsDomainIs(host, ".ci.ma.us") + || dnsDomainIs(host, ".ci.mi.us") + || dnsDomainIs(host, ".ci.mn.us") + || dnsDomainIs(host, ".ci.ms.us") + || dnsDomainIs(host, ".ci.mo.us") + || dnsDomainIs(host, ".ci.mt.us") + || dnsDomainIs(host, ".ci.ne.us") + || dnsDomainIs(host, ".ci.nv.us") + || dnsDomainIs(host, ".ci.nh.us") + || dnsDomainIs(host, ".ci.nj.us") + || dnsDomainIs(host, ".ci.nm.us") + || dnsDomainIs(host, ".ci.ny.us") + || dnsDomainIs(host, ".ci.nc.us") + || dnsDomainIs(host, ".ci.nd.us") + || dnsDomainIs(host, ".ci.oh.us") + || dnsDomainIs(host, ".ci.ok.us") + || dnsDomainIs(host, ".ci.or.us") + || dnsDomainIs(host, ".ci.pa.us") + || dnsDomainIs(host, ".ci.ri.us") + || dnsDomainIs(host, ".ci.sc.us") + || dnsDomainIs(host, ".ci.sd.us") + || dnsDomainIs(host, ".ci.tn.us") + || dnsDomainIs(host, ".ci.tx.us") + || dnsDomainIs(host, ".ci.ut.us") + || dnsDomainIs(host, ".ci.vt.us") + || dnsDomainIs(host, ".ci.va.us") + || dnsDomainIs(host, ".ci.wa.us") + || dnsDomainIs(host, ".ci.wv.us") + || dnsDomainIs(host, ".ci.wi.us") + || dnsDomainIs(host, ".ci.wy.us") + +// U.S. Counties + || dnsDomainIs(host, ".co.al.us") + || dnsDomainIs(host, ".co.ak.us") + || dnsDomainIs(host, ".co.ar.us") + || dnsDomainIs(host, ".co.az.us") + || dnsDomainIs(host, ".co.ca.us") + || dnsDomainIs(host, ".co.co.us") + || dnsDomainIs(host, ".co.ct.us") + || dnsDomainIs(host, ".co.dc.us") + || dnsDomainIs(host, ".co.de.us") + || dnsDomainIs(host, ".co.fl.us") + || dnsDomainIs(host, ".co.ga.us") + || dnsDomainIs(host, ".co.hi.us") + || dnsDomainIs(host, ".co.id.us") + || dnsDomainIs(host, ".co.il.us") + || dnsDomainIs(host, ".co.in.us") + || dnsDomainIs(host, ".co.ia.us") + || dnsDomainIs(host, ".co.ks.us") + || dnsDomainIs(host, ".co.ky.us") + || dnsDomainIs(host, ".co.la.us") + || dnsDomainIs(host, ".co.me.us") + || dnsDomainIs(host, ".co.md.us") + || dnsDomainIs(host, ".co.ma.us") + || dnsDomainIs(host, ".co.mi.us") + || dnsDomainIs(host, ".co.mn.us") + || dnsDomainIs(host, ".co.ms.us") + || dnsDomainIs(host, ".co.mo.us") + || dnsDomainIs(host, ".co.mt.us") + || dnsDomainIs(host, ".co.ne.us") + || dnsDomainIs(host, ".co.nv.us") + || dnsDomainIs(host, ".co.nh.us") + || dnsDomainIs(host, ".co.nj.us") + || dnsDomainIs(host, ".co.nm.us") + || dnsDomainIs(host, ".co.ny.us") + || dnsDomainIs(host, ".co.nc.us") + || dnsDomainIs(host, ".co.nd.us") + || dnsDomainIs(host, ".co.oh.us") + || dnsDomainIs(host, ".co.ok.us") + || dnsDomainIs(host, ".co.or.us") + || dnsDomainIs(host, ".co.pa.us") + || dnsDomainIs(host, ".co.ri.us") + || dnsDomainIs(host, ".co.sc.us") + || dnsDomainIs(host, ".co.sd.us") + || dnsDomainIs(host, ".co.tn.us") + || dnsDomainIs(host, ".co.tx.us") + || dnsDomainIs(host, ".co.ut.us") + || dnsDomainIs(host, ".co.vt.us") + || dnsDomainIs(host, ".co.va.us") + || dnsDomainIs(host, ".co.wa.us") + || dnsDomainIs(host, ".co.wv.us") + || dnsDomainIs(host, ".co.wi.us") + || dnsDomainIs(host, ".co.wy.us") + +// U.S. States + || dnsDomainIs(host, ".state.al.us") + || dnsDomainIs(host, ".state.ak.us") + || dnsDomainIs(host, ".state.ar.us") + || dnsDomainIs(host, ".state.az.us") + || dnsDomainIs(host, ".state.ca.us") + || dnsDomainIs(host, ".state.co.us") + || dnsDomainIs(host, ".state.ct.us") + || dnsDomainIs(host, ".state.dc.us") + || dnsDomainIs(host, ".state.de.us") + || dnsDomainIs(host, ".state.fl.us") + || dnsDomainIs(host, ".state.ga.us") + || dnsDomainIs(host, ".state.hi.us") + || dnsDomainIs(host, ".state.id.us") + || dnsDomainIs(host, ".state.il.us") + || dnsDomainIs(host, ".state.in.us") + || dnsDomainIs(host, ".state.ia.us") + || dnsDomainIs(host, ".state.ks.us") + || dnsDomainIs(host, ".state.ky.us") + || dnsDomainIs(host, ".state.la.us") + || dnsDomainIs(host, ".state.me.us") + || dnsDomainIs(host, ".state.md.us") + || dnsDomainIs(host, ".state.ma.us") + || dnsDomainIs(host, ".state.mi.us") + || dnsDomainIs(host, ".state.mn.us") + || dnsDomainIs(host, ".state.ms.us") + || dnsDomainIs(host, ".state.mo.us") + || dnsDomainIs(host, ".state.mt.us") + || dnsDomainIs(host, ".state.ne.us") + || dnsDomainIs(host, ".state.nv.us") + || dnsDomainIs(host, ".state.nh.us") + || dnsDomainIs(host, ".state.nj.us") + || dnsDomainIs(host, ".state.nm.us") + || dnsDomainIs(host, ".state.ny.us") + || dnsDomainIs(host, ".state.nc.us") + || dnsDomainIs(host, ".state.nd.us") + || dnsDomainIs(host, ".state.oh.us") + || dnsDomainIs(host, ".state.ok.us") + || dnsDomainIs(host, ".state.or.us") + || dnsDomainIs(host, ".state.pa.us") + || dnsDomainIs(host, ".state.ri.us") + || dnsDomainIs(host, ".state.sc.us") + || dnsDomainIs(host, ".state.sd.us") + || dnsDomainIs(host, ".state.tn.us") + || dnsDomainIs(host, ".state.tx.us") + || dnsDomainIs(host, ".state.ut.us") + || dnsDomainIs(host, ".state.vt.us") + || dnsDomainIs(host, ".state.va.us") + || dnsDomainIs(host, ".state.wa.us") + || dnsDomainIs(host, ".state.wv.us") + || dnsDomainIs(host, ".state.wi.us") + || dnsDomainIs(host, ".state.wy.us") + +// KidsClick URLs + + || dnsDomainIs(host, "12.16.163.163") + || dnsDomainIs(host, "128.59.173.136") + || dnsDomainIs(host, "165.112.78.61") + || dnsDomainIs(host, "216.55.23.140") + || dnsDomainIs(host, "63.111.53.150") + || dnsDomainIs(host, "64.94.206.8") + + || dnsDomainIs(host, "abc.go.com") + || dnsDomainIs(host, "acmepet.petsmart.com") + || dnsDomainIs(host, "adver-net.com") + || dnsDomainIs(host, "aint-it-cool-news.com") + || dnsDomainIs(host, "akidsheart.com") + || dnsDomainIs(host, "alabanza.com") + || dnsDomainIs(host, "allerdays.com") + || dnsDomainIs(host, "allgame.com") + || dnsDomainIs(host, "allowancenet.com") + || dnsDomainIs(host, "amish-heartland.com") + || dnsDomainIs(host, "ancienthistory.about.com") + || dnsDomainIs(host, "animals.about.com") + || dnsDomainIs(host, "antenna.nl") + || dnsDomainIs(host, "arcweb.sos.state.or.us") + || dnsDomainIs(host, "artistmummer.homestead.com") + || dnsDomainIs(host, "artists.vh1.com") + || dnsDomainIs(host, "arts.lausd.k12.ca.us") + || dnsDomainIs(host, "asiatravel.com") + || dnsDomainIs(host, "asterius.com") + || dnsDomainIs(host, "atlas.gc.ca") + || dnsDomainIs(host, "atschool.eduweb.co.uk") + || dnsDomainIs(host, "ayya.pd.net") + || dnsDomainIs(host, "babelfish.altavista.com") + || dnsDomainIs(host, "babylon5.warnerbros.com") + || dnsDomainIs(host, "banzai.neosoft.com") + || dnsDomainIs(host, "barneyonline.com") + || dnsDomainIs(host, "baroque-music.com") + || dnsDomainIs(host, "barsoom.msss.com") + || dnsDomainIs(host, "baseball-almanac.com") + || dnsDomainIs(host, "bcadventure.com") + || dnsDomainIs(host, "beadiecritters.hosting4less.com") + || dnsDomainIs(host, "beverlyscrafts.com") + || dnsDomainIs(host, "biology.about.com") + || dnsDomainIs(host, "birding.about.com") + || dnsDomainIs(host, "boatsafe.com") + || dnsDomainIs(host, "bombpop.com") + || dnsDomainIs(host, "boulter.com") + || dnsDomainIs(host, "bright-ideas-software.com") + || dnsDomainIs(host, "buckman.pps.k12.or.us") + || dnsDomainIs(host, "buffalobills.com") + || dnsDomainIs(host, "bvsd.k12.co.us") + || dnsDomainIs(host, "cagle.slate.msn.com") + || dnsDomainIs(host, "calc.entisoft.com") + || dnsDomainIs(host, "canada.gc.ca") + || dnsDomainIs(host, "candleandsoap.about.com") + || dnsDomainIs(host, "caselaw.lp.findlaw.com") + || dnsDomainIs(host, "catalog.com") + || dnsDomainIs(host, "catalog.socialstudies.com") + || dnsDomainIs(host, "cavern.com") + || dnsDomainIs(host, "cbs.sportsline.com") + || dnsDomainIs(host, "cc.matsuyama-u.ac.jp") + || dnsDomainIs(host, "celt.net") + || dnsDomainIs(host, "cgfa.kelloggcreek.com") + || dnsDomainIs(host, "channel4000.com") + || dnsDomainIs(host, "chess.delorie.com") + || dnsDomainIs(host, "chess.liveonthenet.com") + || dnsDomainIs(host, "childfun.com") + || dnsDomainIs(host, "christmas.com") + || dnsDomainIs(host, "citystar.com") + || dnsDomainIs(host, "claim.goldrush.com") + || dnsDomainIs(host, "clairerosemaryjane.com") + || dnsDomainIs(host, "clevermedia.com") + || dnsDomainIs(host, "cobblestonepub.com") + || dnsDomainIs(host, "codebrkr.infopages.net") + || dnsDomainIs(host, "colitz.com") + || dnsDomainIs(host, "collections.ic.gc.ca") + || dnsDomainIs(host, "coloquio.com") + || dnsDomainIs(host, "come.to") + || dnsDomainIs(host, "coombs.anu.edu.au") + || dnsDomainIs(host, "crafterscommunity.com") + || dnsDomainIs(host, "craftsforkids.about.com") + || dnsDomainIs(host, "creativity.net") + || dnsDomainIs(host, "cslewis.drzeus.net") + || dnsDomainIs(host, "cust.idl.com.au") + || dnsDomainIs(host, "cvs.anu.edu.au") + || dnsDomainIs(host, "cybersleuth-kids.com") + || dnsDomainIs(host, "cybertown.com") + || dnsDomainIs(host, "darkfish.com") + || dnsDomainIs(host, "datadragon.com") + || dnsDomainIs(host, "davesite.com") + || dnsDomainIs(host, "dbertens.www.cistron.nl") + || dnsDomainIs(host, "detnews.com") + || dnsDomainIs(host, "dhr.dos.state.fl.us") + || dnsDomainIs(host, "dialspace.dial.pipex.com") + || dnsDomainIs(host, "dictionaries.travlang.com") + || dnsDomainIs(host, "disney.go.com") + || dnsDomainIs(host, "disneyland.disney.go.com") + || dnsDomainIs(host, "district.gresham.k12.or.us") + || dnsDomainIs(host, "dmarie.com") + || dnsDomainIs(host, "dreamwater.com") + || dnsDomainIs(host, "duke.fuse.net") + || dnsDomainIs(host, "earlyamerica.com") + || dnsDomainIs(host, "earthsky.com") + || dnsDomainIs(host, "easyweb.easynet.co.uk") + || dnsDomainIs(host, "ecards1.bansheeweb.com") + || dnsDomainIs(host, "edugreen.teri.res.in") + || dnsDomainIs(host, "edwardlear.tripod.com") + || dnsDomainIs(host, "eelink.net") + || dnsDomainIs(host, "elizabethsings.com") + || dnsDomainIs(host, "enature.com") + || dnsDomainIs(host, "encarta.msn.com") + || dnsDomainIs(host, "endangeredspecie.com") + || dnsDomainIs(host, "enterprise.america.com") + || dnsDomainIs(host, "ericae.net") + || dnsDomainIs(host, "esl.about.com") + || dnsDomainIs(host, "eveander.com") + || dnsDomainIs(host, "exn.ca") + || dnsDomainIs(host, "fallscam.niagara.com") + || dnsDomainIs(host, "family.go.com") + || dnsDomainIs(host, "family2.go.com") + || dnsDomainIs(host, "familyeducation.com") + || dnsDomainIs(host, "finditquick.com") + || dnsDomainIs(host, "fln-bma.yazigi.com.br") + || dnsDomainIs(host, "fln-con.yazigi.com.br") + || dnsDomainIs(host, "food.epicurious.com") + || dnsDomainIs(host, "forums.sympatico.ca") + || dnsDomainIs(host, "fotw.vexillum.com") + || dnsDomainIs(host, "fox.nstn.ca") + || dnsDomainIs(host, "framingham.com") + || dnsDomainIs(host, "freevote.com") + || dnsDomainIs(host, "freeweb.pdq.net") + || dnsDomainIs(host, "games.yahoo.com") + || dnsDomainIs(host, "gardening.sierrahome.com") + || dnsDomainIs(host, "gardenofpraise.com") + || dnsDomainIs(host, "gcclearn.gcc.cc.va.us") + || dnsDomainIs(host, "genealogytoday.com") + || dnsDomainIs(host, "genesis.ne.mediaone.net") + || dnsDomainIs(host, "geniefind.com") + || dnsDomainIs(host, "geography.about.com") + || dnsDomainIs(host, "gf.state.wy.us") + || dnsDomainIs(host, "gi.grolier.com") + || dnsDomainIs(host, "golf.com") + || dnsDomainIs(host, "greatseal.com") + || dnsDomainIs(host, "guardians.net") + || dnsDomainIs(host, "hamlet.hypermart.net") + || dnsDomainIs(host, "happypuppy.com") + || dnsDomainIs(host, "harcourt.fsc.follett.com") + || dnsDomainIs(host, "haringkids.com") + || dnsDomainIs(host, "harrietmaysavitz.com") + || dnsDomainIs(host, "harrypotter.warnerbros.com") + || dnsDomainIs(host, "hca.gilead.org.il") + || dnsDomainIs(host, "header.future.easyspace.com") + || dnsDomainIs(host, "historymedren.about.com") + || dnsDomainIs(host, "home.att.net") + || dnsDomainIs(host, "home.austin.rr.com") + || dnsDomainIs(host, "home.capu.net") + || dnsDomainIs(host, "home.cfl.rr.com") + || dnsDomainIs(host, "home.clara.net") + || dnsDomainIs(host, "home.clear.net.nz") + || dnsDomainIs(host, "home.earthlink.net") + || dnsDomainIs(host, "home.eznet.net") + || dnsDomainIs(host, "home.flash.net") + || dnsDomainIs(host, "home.hiwaay.net") + || dnsDomainIs(host, "home.hkstar.com") + || dnsDomainIs(host, "home.ici.net") + || dnsDomainIs(host, "home.inreach.com") + || dnsDomainIs(host, "home.interlynx.net") + || dnsDomainIs(host, "home.istar.ca") + || dnsDomainIs(host, "home.mira.net") + || dnsDomainIs(host, "home.nycap.rr.com") + || dnsDomainIs(host, "home.online.no") + || dnsDomainIs(host, "home.pb.net") + || dnsDomainIs(host, "home2.pacific.net.sg") + || dnsDomainIs(host, "homearts.com") + || dnsDomainIs(host, "homepage.mac.com") + || dnsDomainIs(host, "hometown.aol.com") + || dnsDomainIs(host, "homiliesbyemail.com") + || dnsDomainIs(host, "hotei.fix.co.jp") + || dnsDomainIs(host, "hotwired.lycos.com") + || dnsDomainIs(host, "hp.vector.co.jp") + || dnsDomainIs(host, "hum.amu.edu.pl") + || dnsDomainIs(host, "i-cias.com") + || dnsDomainIs(host, "icatapults.freeservers.com") + || dnsDomainIs(host, "ind.cioe.com") + || dnsDomainIs(host, "info.ex.ac.uk") + || dnsDomainIs(host, "infocan.gc.ca") + || dnsDomainIs(host, "infoservice.gc.ca") + || dnsDomainIs(host, "interoz.com") + || dnsDomainIs(host, "ireland.iol.ie") + || dnsDomainIs(host, "is.dal.ca") + || dnsDomainIs(host, "itss.raytheon.com") + || dnsDomainIs(host, "iul.com") + || dnsDomainIs(host, "jameswhitcombriley.com") + || dnsDomainIs(host, "jellieszone.com") + || dnsDomainIs(host, "jordan.sportsline.com") + || dnsDomainIs(host, "judyanddavid.com") + || dnsDomainIs(host, "jurai.murdoch.edu.au") + || dnsDomainIs(host, "just.about.com") + || dnsDomainIs(host, "kayleigh.tierranet.com") + || dnsDomainIs(host, "kcwingwalker.tripod.com") + || dnsDomainIs(host, "kidexchange.about.com") + || dnsDomainIs(host, "kids-world.colgatepalmolive.com") + || dnsDomainIs(host, "kids.mysterynet.com") + || dnsDomainIs(host, "kids.ot.com") + || dnsDomainIs(host, "kidsartscrafts.about.com") + || dnsDomainIs(host, "kidsastronomy.about.com") + || dnsDomainIs(host, "kidscience.about.com") + || dnsDomainIs(host, "kidscience.miningco.com") + || dnsDomainIs(host, "kidscollecting.about.com") + || dnsDomainIs(host, "kidsfun.co.uk") + || dnsDomainIs(host, "kidsinternet.about.com") + || dnsDomainIs(host, "kidslangarts.about.com") + || dnsDomainIs(host, "kidspenpals.about.com") + || dnsDomainIs(host, "kitecast.com") + || dnsDomainIs(host, "knight.city.ba.k12.md.us") + || dnsDomainIs(host, "kodak.com") + || dnsDomainIs(host, "kwanzaa4kids.homestead.com") + || dnsDomainIs(host, "lagos.africaonline.com") + || dnsDomainIs(host, "lancearmstrong.com") + || dnsDomainIs(host, "landru.i-link-2.net") + || dnsDomainIs(host, "lang.nagoya-u.ac.jp") + || dnsDomainIs(host, "lascala.milano.it") + || dnsDomainIs(host, "latinoculture.about.com") + || dnsDomainIs(host, "litcal.yasuda-u.ac.jp") + || dnsDomainIs(host, "littlebit.com") + || dnsDomainIs(host, "live.edventures.com") + || dnsDomainIs(host, "look.net") + || dnsDomainIs(host, "lycoskids.infoplease.com") + || dnsDomainIs(host, "lynx.uio.no") + || dnsDomainIs(host, "macdict.dict.mq.edu.au") + || dnsDomainIs(host, "maori.culture.co.nz") + || dnsDomainIs(host, "marktwain.about.com") + || dnsDomainIs(host, "marktwain.miningco.com") + || dnsDomainIs(host, "mars2030.net") + || dnsDomainIs(host, "martin.parasitology.mcgill.ca") + || dnsDomainIs(host, "martinlutherking.8m.com") + || dnsDomainIs(host, "mastercollector.com") + || dnsDomainIs(host, "mathcentral.uregina.ca") + || dnsDomainIs(host, "members.aol.com") + || dnsDomainIs(host, "members.carol.net") + || dnsDomainIs(host, "members.cland.net") + || dnsDomainIs(host, "members.cruzio.com") + || dnsDomainIs(host, "members.easyspace.com") + || dnsDomainIs(host, "members.eisa.net.au") + || dnsDomainIs(host, "members.home.net") + || dnsDomainIs(host, "members.iinet.net.au") + || dnsDomainIs(host, "members.nbci.com") + || dnsDomainIs(host, "members.ozemail.com.au") + || dnsDomainIs(host, "members.surfsouth.com") + || dnsDomainIs(host, "members.theglobe.com") + || dnsDomainIs(host, "members.tripod.com") + || dnsDomainIs(host, "mexplaza.udg.mx") + || dnsDomainIs(host, "mgfx.com") + || dnsDomainIs(host, "microimg.com") + || dnsDomainIs(host, "midusa.net") + || dnsDomainIs(host, "mildan.com") + || dnsDomainIs(host, "millennianet.com") + || dnsDomainIs(host, "mindbreakers.e-fun.nu") + || dnsDomainIs(host, "missjanet.xs4all.nl") + || dnsDomainIs(host, "mistral.culture.fr") + || dnsDomainIs(host, "mobileation.com") + || dnsDomainIs(host, "mrshowbiz.go.com") + || dnsDomainIs(host, "ms.simplenet.com") + || dnsDomainIs(host, "museum.gov.ns.ca") + || dnsDomainIs(host, "music.excite.com") + || dnsDomainIs(host, "musicfinder.yahoo.com") + || dnsDomainIs(host, "my.freeway.net") + || dnsDomainIs(host, "mytrains.com") + || dnsDomainIs(host, "nativeauthors.com") + || dnsDomainIs(host, "nba.com") + || dnsDomainIs(host, "nch.ari.net") + || dnsDomainIs(host, "neonpeach.tripod.com") + || dnsDomainIs(host, "net.indra.com") + || dnsDomainIs(host, "ngeorgia.com") + || dnsDomainIs(host, "ngp.ngpc.state.ne.us") + || dnsDomainIs(host, "nhd.heinle.com") + || dnsDomainIs(host, "nick.com") + || dnsDomainIs(host, "normandy.eb.com") + || dnsDomainIs(host, "northshore.shore.net") + || dnsDomainIs(host, "now2000.com") + || dnsDomainIs(host, "npc.nunavut.ca") + || dnsDomainIs(host, "ns2.carib-link.net") + || dnsDomainIs(host, "ntl.sympatico.ca") + || dnsDomainIs(host, "oceanographer.navy.mil") + || dnsDomainIs(host, "oddens.geog.uu.nl") + || dnsDomainIs(host, "officialcitysites.com") + || dnsDomainIs(host, "oneida-nation.net") + || dnsDomainIs(host, "onlinegeorgia.com") + || dnsDomainIs(host, "originator_2.tripod.com") + || dnsDomainIs(host, "ortech-engr.com") + || dnsDomainIs(host, "osage.voorhees.k12.nj.us") + || dnsDomainIs(host, "osiris.sund.ac.uk") + || dnsDomainIs(host, "ourworld.compuserve.com") + || dnsDomainIs(host, "outdoorphoto.com") + || dnsDomainIs(host, "pages.map.com") + || dnsDomainIs(host, "pages.prodigy.com") + || dnsDomainIs(host, "pages.prodigy.net") + || dnsDomainIs(host, "pages.tca.net") + || dnsDomainIs(host, "parcsafari.qc.ca") + || dnsDomainIs(host, "parenthoodweb.com") + || dnsDomainIs(host, "pathfinder.com") + || dnsDomainIs(host, "people.clarityconnect.com") + || dnsDomainIs(host, "people.enternet.com.au") + || dnsDomainIs(host, "people.ne.mediaone.net") + || dnsDomainIs(host, "phonics.jazzles.com") + || dnsDomainIs(host, "pibburns.com") + || dnsDomainIs(host, "pilgrims.net") + || dnsDomainIs(host, "pinenet.com") + || dnsDomainIs(host, "place.scholastic.com") + || dnsDomainIs(host, "playground.kodak.com") + || dnsDomainIs(host, "politicalgraveyard.com") + || dnsDomainIs(host, "polk.ga.net") + || dnsDomainIs(host, "pompstory.home.mindspring.com") + || dnsDomainIs(host, "popularmechanics.com") + || dnsDomainIs(host, "projects.edtech.sandi.net") + || dnsDomainIs(host, "psyche.usno.navy.mil") + || dnsDomainIs(host, "pubweb.parc.xerox.com") + || dnsDomainIs(host, "puzzlemaker.school.discovery.com") + || dnsDomainIs(host, "quest.classroom.com") + || dnsDomainIs(host, "quilting.about.com") + || dnsDomainIs(host, "rabbitmoon.home.mindspring.com") + || dnsDomainIs(host, "radio.cbc.ca") + || dnsDomainIs(host, "rats2u.com") + || dnsDomainIs(host, "rbcm1.rbcm.gov.bc.ca") + || dnsDomainIs(host, "readplay.com") + || dnsDomainIs(host, "recipes4children.homestead.com") + || dnsDomainIs(host, "redsox.com") + || dnsDomainIs(host, "renaissance.district96.k12.il.us") + || dnsDomainIs(host, "rhyme.lycos.com") + || dnsDomainIs(host, "rhythmweb.com") + || dnsDomainIs(host, "riverresource.com") + || dnsDomainIs(host, "rockhoundingar.com") + || dnsDomainIs(host, "rockies.mlb.com") + || dnsDomainIs(host, "rosecity.net") + || dnsDomainIs(host, "rr-vs.informatik.uni-ulm.de") + || dnsDomainIs(host, "rubens.anu.edu.au") + || dnsDomainIs(host, "rummelplatz.uni-mannheim.de") + || dnsDomainIs(host, "sandbox.xerox.com") + || dnsDomainIs(host, "sarah.fredart.com") + || dnsDomainIs(host, "schmidel.com") + || dnsDomainIs(host, "scholastic.com") + || dnsDomainIs(host, "school.discovery.com") + || dnsDomainIs(host, "schoolcentral.com") + || dnsDomainIs(host, "seattletimes.nwsource.com") + || dnsDomainIs(host, "sericulum.com") + || dnsDomainIs(host, "sf.airforce.com") + || dnsDomainIs(host, "shop.usps.com") + || dnsDomainIs(host, "showcase.netins.net") + || dnsDomainIs(host, "sikids.com") + || dnsDomainIs(host, "sites.huji.ac.il") + || dnsDomainIs(host, "sjliving.com") + || dnsDomainIs(host, "skullduggery.com") + || dnsDomainIs(host, "skyways.lib.ks.us") + || dnsDomainIs(host, "snowdaymovie.nick.com") + || dnsDomainIs(host, "sosa21.hypermart.net") + || dnsDomainIs(host, "soundamerica.com") + || dnsDomainIs(host, "spaceboy.nasda.go.jp") + || dnsDomainIs(host, "sports.nfl.com") + || dnsDomainIs(host, "sportsillustrated.cnn.com") + || dnsDomainIs(host, "starwars.hasbro.com") + || dnsDomainIs(host, "statelibrary.dcr.state.nc.us") + || dnsDomainIs(host, "streetplay.com") + || dnsDomainIs(host, "sts.gsc.nrcan.gc.ca") + || dnsDomainIs(host, "sunniebunniezz.com") + || dnsDomainIs(host, "sunsite.nus.edu.sg") + || dnsDomainIs(host, "sunsite.sut.ac.jp") + || dnsDomainIs(host, "superm.bart.nl") + || dnsDomainIs(host, "surf.to") + || dnsDomainIs(host, "svinet2.fs.fed.us") + || dnsDomainIs(host, "swiminfo.com") + || dnsDomainIs(host, "tabletennis.about.com") + || dnsDomainIs(host, "teacher.scholastic.com") + || dnsDomainIs(host, "theforce.net") + || dnsDomainIs(host, "thejessicas.homestead.com") + || dnsDomainIs(host, "themes.editthispage.com") + || dnsDomainIs(host, "theory.uwinnipeg.ca") + || dnsDomainIs(host, "theshadowlands.net") + || dnsDomainIs(host, "thinks.com") + || dnsDomainIs(host, "thryomanes.tripod.com") + || dnsDomainIs(host, "time_zone.tripod.com") + || dnsDomainIs(host, "titania.cobuild.collins.co.uk") + || dnsDomainIs(host, "torre.duomo.pisa.it") + || dnsDomainIs(host, "touregypt.net") + || dnsDomainIs(host, "toycollecting.about.com") + || dnsDomainIs(host, "trace.ntu.ac.uk") + || dnsDomainIs(host, "travelwithkids.about.com") + || dnsDomainIs(host, "tukids.tucows.com") + || dnsDomainIs(host, "tv.yahoo.com") + || dnsDomainIs(host, "tycho.usno.navy.mil") + || dnsDomainIs(host, "ubl.artistdirect.com") + || dnsDomainIs(host, "uk-pages.net") + || dnsDomainIs(host, "ukraine.uazone.net") + || dnsDomainIs(host, "unmuseum.mus.pa.us") + || dnsDomainIs(host, "us.imdb.com") + || dnsDomainIs(host, "userpage.chemie.fu-berlin.de") + || dnsDomainIs(host, "userpage.fu-berlin.de") + || dnsDomainIs(host, "userpages.aug.com") + || dnsDomainIs(host, "users.aol.com") + || dnsDomainIs(host, "users.bigpond.net.au") + || dnsDomainIs(host, "users.breathemail.net") + || dnsDomainIs(host, "users.erols.com") + || dnsDomainIs(host, "users.imag.net") + || dnsDomainIs(host, "users.inetw.net") + || dnsDomainIs(host, "users.massed.net") + || dnsDomainIs(host, "users.skynet.be") + || dnsDomainIs(host, "users.uniserve.com") + || dnsDomainIs(host, "venus.spaceports.com") + || dnsDomainIs(host, "vgstrategies.about.com") + || dnsDomainIs(host, "victorian.fortunecity.com") + || dnsDomainIs(host, "vilenski.com") + || dnsDomainIs(host, "village.infoweb.ne.jp") + || dnsDomainIs(host, "virtual.finland.fi") + || dnsDomainIs(host, "vrml.fornax.hu") + || dnsDomainIs(host, "vvv.com") + || dnsDomainIs(host, "w1.xrefer.com") + || dnsDomainIs(host, "w3.one.net") + || dnsDomainIs(host, "w3.rz-berlin.mpg.de") + || dnsDomainIs(host, "w3.trib.com") + || dnsDomainIs(host, "wallofsound.go.com") + || dnsDomainIs(host, "web.aimnet.com") + || dnsDomainIs(host, "web.ccsd.k12.wy.us") + || dnsDomainIs(host, "web.cs.ualberta.ca") + || dnsDomainIs(host, "web.idirect.com") + || dnsDomainIs(host, "web.kyoto-inet.or.jp") + || dnsDomainIs(host, "web.macam98.ac.il") + || dnsDomainIs(host, "web.massvacation.com") + || dnsDomainIs(host, "web.one.net.au") + || dnsDomainIs(host, "web.qx.net") + || dnsDomainIs(host, "web.uvic.ca") + || dnsDomainIs(host, "web2.airmail.net") + || dnsDomainIs(host, "webcoast.com") + || dnsDomainIs(host, "webgames.kalisto.com") + || dnsDomainIs(host, "webhome.idirect.com") + || dnsDomainIs(host, "webpages.homestead.com") + || dnsDomainIs(host, "webrum.uni-mannheim.de") + || dnsDomainIs(host, "webusers.anet-stl.com") + || dnsDomainIs(host, "welcome.to") + || dnsDomainIs(host, "wgntv.com") + || dnsDomainIs(host, "whales.magna.com.au") + || dnsDomainIs(host, "wildheart.com") + || dnsDomainIs(host, "wilstar.net") + || dnsDomainIs(host, "winter-wonderland.com") + || dnsDomainIs(host, "women.com") + || dnsDomainIs(host, "woodrow.mpls.frb.fed.us") + || dnsDomainIs(host, "wordzap.com") + || dnsDomainIs(host, "worldkids.net") + || dnsDomainIs(host, "worldwideguide.net") + || dnsDomainIs(host, "ww3.bay.k12.fl.us") + || dnsDomainIs(host, "ww3.sportsline.com") + || dnsDomainIs(host, "www-groups.dcs.st-and.ac.uk") + || dnsDomainIs(host, "www-public.rz.uni-duesseldorf.de") + || dnsDomainIs(host, "www.1stkids.com") + || dnsDomainIs(host, "www.2020tech.com") + || dnsDomainIs(host, "www.21stcenturytoys.com") + || dnsDomainIs(host, "www.4adventure.com") + || dnsDomainIs(host, "www.50states.com") + || dnsDomainIs(host, "www.800padutch.com") + || dnsDomainIs(host, "www.88.com") + || dnsDomainIs(host, "www.a-better.com") + || dnsDomainIs(host, "www.aaa.com.au") + || dnsDomainIs(host, "www.aacca.com") + || dnsDomainIs(host, "www.aalbc.com") + || dnsDomainIs(host, "www.aardman.com") + || dnsDomainIs(host, "www.aardvarkelectric.com") + || dnsDomainIs(host, "www.aawc.com") + || dnsDomainIs(host, "www.ababmx.com") + || dnsDomainIs(host, "www.abbeville.com") + || dnsDomainIs(host, "www.abc.net.au") + || dnsDomainIs(host, "www.abcb.com") + || dnsDomainIs(host, "www.abctooncenter.com") + || dnsDomainIs(host, "www.about.ch") + || dnsDomainIs(host, "www.accessart.org.uk") + || dnsDomainIs(host, "www.accu.or.jp") + || dnsDomainIs(host, "www.accuweather.com") + || dnsDomainIs(host, "www.achuka.co.uk") + || dnsDomainIs(host, "www.acmecity.com") + || dnsDomainIs(host, "www.acorn-group.com") + || dnsDomainIs(host, "www.acs.ucalgary.ca") + || dnsDomainIs(host, "www.actden.com") + || dnsDomainIs(host, "www.actionplanet.com") + || dnsDomainIs(host, "www.activityvillage.co.uk") + || dnsDomainIs(host, "www.actwin.com") + || dnsDomainIs(host, "www.adequate.com") + || dnsDomainIs(host, "www.adidas.com") + || dnsDomainIs(host, "www.advent-calendars.com") + || dnsDomainIs(host, "www.aegis.com") + || dnsDomainIs(host, "www.af.mil") + || dnsDomainIs(host, "www.africaindex.africainfo.no") + || dnsDomainIs(host, "www.africam.com") + || dnsDomainIs(host, "www.africancrafts.com") + || dnsDomainIs(host, "www.aggressive.com") + || dnsDomainIs(host, "www.aghines.com") + || dnsDomainIs(host, "www.agirlsworld.com") + || dnsDomainIs(host, "www.agora.stm.it") + || dnsDomainIs(host, "www.agriculture.com") + || dnsDomainIs(host, "www.aikidofaq.com") + || dnsDomainIs(host, "www.ajkids.com") + || dnsDomainIs(host, "www.akfkoala.gil.com.au") + || dnsDomainIs(host, "www.akhlah.com") + || dnsDomainIs(host, "www.alabamainfo.com") + || dnsDomainIs(host, "www.aland.fi") + || dnsDomainIs(host, "www.albion.com") + || dnsDomainIs(host, "www.alcoholismhelp.com") + || dnsDomainIs(host, "www.alcottweb.com") + || dnsDomainIs(host, "www.alfanet.it") + || dnsDomainIs(host, "www.alfy.com") + || dnsDomainIs(host, "www.algebra-online.com") + || dnsDomainIs(host, "www.alienexplorer.com") + || dnsDomainIs(host, "www.aliensatschool.com") + || dnsDomainIs(host, "www.all-links.com") + || dnsDomainIs(host, "www.alldetroit.com") + || dnsDomainIs(host, "www.allexperts.com") + || dnsDomainIs(host, "www.allmixedup.com") + || dnsDomainIs(host, "www.allmusic.com") + || dnsDomainIs(host, "www.almanac.com") + || dnsDomainIs(host, "www.almaz.com") + || dnsDomainIs(host, "www.almondseed.com") + || dnsDomainIs(host, "www.aloha.com") + || dnsDomainIs(host, "www.aloha.net") + || dnsDomainIs(host, "www.altonweb.com") + || dnsDomainIs(host, "www.alyeska-pipe.com") + || dnsDomainIs(host, "www.am-wood.com") + || dnsDomainIs(host, "www.amazingadventure.com") + || dnsDomainIs(host, "www.amazon.com") + || dnsDomainIs(host, "www.americancheerleader.com") + || dnsDomainIs(host, "www.americancowboy.com") + || dnsDomainIs(host, "www.americangirl.com") + || dnsDomainIs(host, "www.americanparknetwork.com") + || dnsDomainIs(host, "www.americansouthwest.net") + || dnsDomainIs(host, "www.americanwest.com") + || dnsDomainIs(host, "www.ameritech.net") + || dnsDomainIs(host, "www.amtexpo.com") + || dnsDomainIs(host, "www.anbg.gov.au") + || dnsDomainIs(host, "www.anc.org.za") + || dnsDomainIs(host, "www.ancientegypt.co.uk") + || dnsDomainIs(host, "www.angelfire.com") + || dnsDomainIs(host, "www.angelsbaseball.com") + || dnsDomainIs(host, "www.anholt.co.uk") + || dnsDomainIs(host, "www.animabets.com") + || dnsDomainIs(host, "www.animalnetwork.com") + || dnsDomainIs(host, "www.animalpicturesarchive.com") + || dnsDomainIs(host, "www.anime-genesis.com") + || dnsDomainIs(host, "www.annefrank.com") + || dnsDomainIs(host, "www.annefrank.nl") + || dnsDomainIs(host, "www.annie75.com") + || dnsDomainIs(host, "www.antbee.com") + || dnsDomainIs(host, "www.antiquetools.com") + || dnsDomainIs(host, "www.antiquetoy.com") + || dnsDomainIs(host, "www.anzsbeg.org.au") + || dnsDomainIs(host, "www.aol.com") + || dnsDomainIs(host, "www.aone.com") + || dnsDomainIs(host, "www.aphids.com") + || dnsDomainIs(host, "www.apl.com") + || dnsDomainIs(host, "www.aplusmath.com") + || dnsDomainIs(host, "www.applebookshop.co.uk") + || dnsDomainIs(host, "www.appropriatesoftware.com") + || dnsDomainIs(host, "www.appukids.com") + || dnsDomainIs(host, "www.april-joy.com") + || dnsDomainIs(host, "www.arab.net") + || dnsDomainIs(host, "www.aracnet.com") + || dnsDomainIs(host, "www.arborday.com") + || dnsDomainIs(host, "www.arcadevillage.com") + || dnsDomainIs(host, "www.archiecomics.com") + || dnsDomainIs(host, "www.archives.state.al.us") + || dnsDomainIs(host, "www.arctic.ca") + || dnsDomainIs(host, "www.ardenjohnson.com") + || dnsDomainIs(host, "www.aristotle.net") + || dnsDomainIs(host, "www.arizhwys.com") + || dnsDomainIs(host, "www.arizonaguide.com") + || dnsDomainIs(host, "www.arlingtoncemetery.com") + || dnsDomainIs(host, "www.armory.com") + || dnsDomainIs(host, "www.armwrestling.com") + || dnsDomainIs(host, "www.arnprior.com") + || dnsDomainIs(host, "www.artabunga.com") + || dnsDomainIs(host, "www.artcarte.com") + || dnsDomainIs(host, "www.artchive.com") + || dnsDomainIs(host, "www.artcontest.com") + || dnsDomainIs(host, "www.artcyclopedia.com") + || dnsDomainIs(host, "www.artisandevelopers.com") + || dnsDomainIs(host, "www.artlex.com") + || dnsDomainIs(host, "www.artsandkids.com") + || dnsDomainIs(host, "www.artyastro.com") + || dnsDomainIs(host, "www.arwhead.com") + || dnsDomainIs(host, "www.asahi-net.or.jp") + || dnsDomainIs(host, "www.asap.unimelb.edu.au") + || dnsDomainIs(host, "www.ascpl.lib.oh.us") + || dnsDomainIs(host, "www.asia-art.net") + || dnsDomainIs(host, "www.asiabigtime.com") + || dnsDomainIs(host, "www.asianart.com") + || dnsDomainIs(host, "www.asiatour.com") + || dnsDomainIs(host, "www.asiaweek.com") + || dnsDomainIs(host, "www.askanexpert.com") + || dnsDomainIs(host, "www.askbasil.com") + || dnsDomainIs(host, "www.assa.org.au") + || dnsDomainIs(host, "www.ast.cam.ac.uk") + || dnsDomainIs(host, "www.astronomy.com") + || dnsDomainIs(host, "www.astros.com") + || dnsDomainIs(host, "www.atek.com") + || dnsDomainIs(host, "www.athlete.com") + || dnsDomainIs(host, "www.athropolis.com") + || dnsDomainIs(host, "www.atkielski.com") + || dnsDomainIs(host, "www.atlantabraves.com") + || dnsDomainIs(host, "www.atlantafalcons.com") + || dnsDomainIs(host, "www.atlantathrashers.com") + || dnsDomainIs(host, "www.atlanticus.com") + || dnsDomainIs(host, "www.atm.ch.cam.ac.uk") + || dnsDomainIs(host, "www.atom.co.jp") + || dnsDomainIs(host, "www.atomicarchive.com") + || dnsDomainIs(host, "www.att.com") + || dnsDomainIs(host, "www.audreywood.com") + || dnsDomainIs(host, "www.auntannie.com") + || dnsDomainIs(host, "www.auntie.com") + || dnsDomainIs(host, "www.avi-writer.com") + || dnsDomainIs(host, "www.awesomeclipartforkids.com") + || dnsDomainIs(host, "www.awhitehorse.com") + || dnsDomainIs(host, "www.axess.com") + || dnsDomainIs(host, "www.ayles.com") + || dnsDomainIs(host, "www.ayn.ca") + || dnsDomainIs(host, "www.azcardinals.com") + || dnsDomainIs(host, "www.azdiamondbacks.com") + || dnsDomainIs(host, "www.azsolarcenter.com") + || dnsDomainIs(host, "www.azstarnet.com") + || dnsDomainIs(host, "www.aztecafoods.com") + || dnsDomainIs(host, "www.b-witched.com") + || dnsDomainIs(host, "www.baberuthmuseum.com") + || dnsDomainIs(host, "www.backstreetboys.com") + || dnsDomainIs(host, "www.bagheera.com") + || dnsDomainIs(host, "www.bahamas.com") + || dnsDomainIs(host, "www.baileykids.com") + || dnsDomainIs(host, "www.baldeagleinfo.com") + || dnsDomainIs(host, "www.balloonhq.com") + || dnsDomainIs(host, "www.balloonzone.com") + || dnsDomainIs(host, "www.ballparks.com") + || dnsDomainIs(host, "www.balmoralsoftware.com") + || dnsDomainIs(host, "www.banja.com") + || dnsDomainIs(host, "www.banph.com") + || dnsDomainIs(host, "www.barbie.com") + || dnsDomainIs(host, "www.barkingbuddies.com") + || dnsDomainIs(host, "www.barnsdle.demon.co.uk") + || dnsDomainIs(host, "www.barrysclipart.com") + || dnsDomainIs(host, "www.bartleby.com") + || dnsDomainIs(host, "www.baseplate.com") + || dnsDomainIs(host, "www.batman-superman.com") + || dnsDomainIs(host, "www.batmanbeyond.com") + || dnsDomainIs(host, "www.bbc.co.uk") + || dnsDomainIs(host, "www.bbhighway.com") + || dnsDomainIs(host, "www.bboy.com") + || dnsDomainIs(host, "www.bcit.tec.nj.us") + || dnsDomainIs(host, "www.bconnex.net") + || dnsDomainIs(host, "www.bcpl.net") + || dnsDomainIs(host, "www.beach-net.com") + || dnsDomainIs(host, "www.beachboys.com") + || dnsDomainIs(host, "www.beakman.com") + || dnsDomainIs(host, "www.beano.co.uk") + || dnsDomainIs(host, "www.beans.demon.co.uk") + || dnsDomainIs(host, "www.beartime.com") + || dnsDomainIs(host, "www.bearyspecial.co.uk") + || dnsDomainIs(host, "www.bedtime.com") + || dnsDomainIs(host, "www.beingme.com") + || dnsDomainIs(host, "www.belizeexplorer.com") + || dnsDomainIs(host, "www.bell-labs.com") + || dnsDomainIs(host, "www.bemorecreative.com") + || dnsDomainIs(host, "www.bengals.com") + || dnsDomainIs(host, "www.benjerry.com") + || dnsDomainIs(host, "www.bennygoodsport.com") + || dnsDomainIs(host, "www.berenstainbears.com") + || dnsDomainIs(host, "www.beringia.com") + || dnsDomainIs(host, "www.beritsbest.com") + || dnsDomainIs(host, "www.berksweb.com") + || dnsDomainIs(host, "www.best.com") + || dnsDomainIs(host, "www.betsybyars.com") + || dnsDomainIs(host, "www.bfro.net") + || dnsDomainIs(host, "www.bgmm.com") + || dnsDomainIs(host, "www.bibliography.com") + || dnsDomainIs(host, "www.bigblue.com.au") + || dnsDomainIs(host, "www.bigchalk.com") + || dnsDomainIs(host, "www.bigidea.com") + || dnsDomainIs(host, "www.bigtop.com") + || dnsDomainIs(host, "www.bikecrawler.com") + || dnsDomainIs(host, "www.billboard.com") + || dnsDomainIs(host, "www.billybear4kids.com") + || dnsDomainIs(host, "www.biography.com") + || dnsDomainIs(host, "www.birdnature.com") + || dnsDomainIs(host, "www.birdsnways.com") + || dnsDomainIs(host, "www.birdtimes.com") + || dnsDomainIs(host, "www.birminghamzoo.com") + || dnsDomainIs(host, "www.birthdaypartyideas.com") + || dnsDomainIs(host, "www.bis.arachsys.com") + || dnsDomainIs(host, "www.bkgm.com") + || dnsDomainIs(host, "www.blackbaseball.com") + || dnsDomainIs(host, "www.blackbeardthepirate.com") + || dnsDomainIs(host, "www.blackbeltmag.com") + || dnsDomainIs(host, "www.blackfacts.com") + || dnsDomainIs(host, "www.blackfeetnation.com") + || dnsDomainIs(host, "www.blackhills-info.com") + || dnsDomainIs(host, "www.blackholegang.com") + || dnsDomainIs(host, "www.blaque.net") + || dnsDomainIs(host, "www.blarg.net") + || dnsDomainIs(host, "www.blasternaut.com") + || dnsDomainIs(host, "www.blizzard.com") + || dnsDomainIs(host, "www.blocksite.com") + || dnsDomainIs(host, "www.bluejackets.com") + || dnsDomainIs(host, "www.bluejays.ca") + || dnsDomainIs(host, "www.bluemountain.com") + || dnsDomainIs(host, "www.blupete.com") + || dnsDomainIs(host, "www.blyton.co.uk") + || dnsDomainIs(host, "www.boatnerd.com") + || dnsDomainIs(host, "www.boatsafe.com") + || dnsDomainIs(host, "www.bonus.com") + || dnsDomainIs(host, "www.boowakwala.com") + || dnsDomainIs(host, "www.bostonbruins.com") + || dnsDomainIs(host, "www.braceface.com") + || dnsDomainIs(host, "www.bracesinfo.com") + || dnsDomainIs(host, "www.bradkent.com") + || dnsDomainIs(host, "www.brainium.com") + || dnsDomainIs(host, "www.brainmania.com") + || dnsDomainIs(host, "www.brainpop.com") + || dnsDomainIs(host, "www.bridalcave.com") + || dnsDomainIs(host, "www.brightmoments.com") + || dnsDomainIs(host, "www.britannia.com") + || dnsDomainIs(host, "www.britannica.com") + || dnsDomainIs(host, "www.british-museum.ac.uk") + || dnsDomainIs(host, "www.brookes.ac.uk") + || dnsDomainIs(host, "www.brookfieldreader.com") + || dnsDomainIs(host, "www.btinternet.com") + || dnsDomainIs(host, "www.bubbledome.co.nz") + || dnsDomainIs(host, "www.buccaneers.com") + || dnsDomainIs(host, "www.buffy.com") + || dnsDomainIs(host, "www.bullying.co.uk") + || dnsDomainIs(host, "www.bumply.com") + || dnsDomainIs(host, "www.bungi.com") + || dnsDomainIs(host, "www.burlco.lib.nj.us") + || dnsDomainIs(host, "www.burlingamepezmuseum.com") + || dnsDomainIs(host, "www.bus.ualberta.ca") + || dnsDomainIs(host, "www.busprod.com") + || dnsDomainIs(host, "www.butlerart.com") + || dnsDomainIs(host, "www.butterflies.com") + || dnsDomainIs(host, "www.butterflyfarm.co.cr") + || dnsDomainIs(host, "www.bway.net") + || dnsDomainIs(host, "www.bydonovan.com") + || dnsDomainIs(host, "www.ca-mall.com") + || dnsDomainIs(host, "www.cabinessence.com") + || dnsDomainIs(host, "www.cablecarmuseum.com") + || dnsDomainIs(host, "www.cadbury.co.uk") + || dnsDomainIs(host, "www.calendarzone.com") + || dnsDomainIs(host, "www.calgaryflames.com") + || dnsDomainIs(host, "www.californiamissions.com") + || dnsDomainIs(host, "www.camalott.com") + || dnsDomainIs(host, "www.camelotintl.com") + || dnsDomainIs(host, "www.campbellsoup.com") + || dnsDomainIs(host, "www.camvista.com") + || dnsDomainIs(host, "www.canadiens.com") + || dnsDomainIs(host, "www.canals.state.ny.us") + || dnsDomainIs(host, "www.candlelightstories.com") + || dnsDomainIs(host, "www.candles-museum.com") + || dnsDomainIs(host, "www.candystand.com") + || dnsDomainIs(host, "www.caneshockey.com") + || dnsDomainIs(host, "www.canismajor.com") + || dnsDomainIs(host, "www.canucks.com") + || dnsDomainIs(host, "www.capecod.net") + || dnsDomainIs(host, "www.capital.net") + || dnsDomainIs(host, "www.capstonestudio.com") + || dnsDomainIs(host, "www.cardblvd.com") + || dnsDomainIs(host, "www.caro.net") + || dnsDomainIs(host, "www.carolhurst.com") + || dnsDomainIs(host, "www.carr.lib.md.us") + || dnsDomainIs(host, "www.cartooncorner.com") + || dnsDomainIs(host, "www.cartooncritters.com") + || dnsDomainIs(host, "www.cartoonnetwork.com") + || dnsDomainIs(host, "www.carvingpatterns.com") + || dnsDomainIs(host, "www.cashuniversity.com") + || dnsDomainIs(host, "www.castles-of-britain.com") + || dnsDomainIs(host, "www.castlewales.com") + || dnsDomainIs(host, "www.catholic-forum.com") + || dnsDomainIs(host, "www.catholic.net") + || dnsDomainIs(host, "www.cattle.guelph.on.ca") + || dnsDomainIs(host, "www.cavedive.com") + || dnsDomainIs(host, "www.caveofthewinds.com") + || dnsDomainIs(host, "www.cbc4kids.ca") + || dnsDomainIs(host, "www.ccer.ggl.ruu.nl") + || dnsDomainIs(host, "www.ccnet.com") + || dnsDomainIs(host, "www.celineonline.com") + || dnsDomainIs(host, "www.cellsalive.com") + || dnsDomainIs(host, "www.centuryinshoes.com") + || dnsDomainIs(host, "www.cfl.ca") + || dnsDomainIs(host, "www.channel4.com") + || dnsDomainIs(host, "www.channel8.net") + || dnsDomainIs(host, "www.chanukah99.com") + || dnsDomainIs(host, "www.charged.com") + || dnsDomainIs(host, "www.chargers.com") + || dnsDomainIs(host, "www.charlotte.com") + || dnsDomainIs(host, "www.chaseday.com") + || dnsDomainIs(host, "www.chateauversailles.fr") + || dnsDomainIs(host, "www.cheatcc.com") + || dnsDomainIs(host, "www.cheerleading.net") + || dnsDomainIs(host, "www.cheese.com") + || dnsDomainIs(host, "www.chem4kids.com") + || dnsDomainIs(host, "www.chemicool.com") + || dnsDomainIs(host, "www.cherbearsden.com") + || dnsDomainIs(host, "www.chesskids.com") + || dnsDomainIs(host, "www.chessvariants.com") + || dnsDomainIs(host, "www.cheungswingchun.com") + || dnsDomainIs(host, "www.chevroncars.com") + || dnsDomainIs(host, "www.chibi.simplenet.com") + || dnsDomainIs(host, "www.chicagobears.com") + || dnsDomainIs(host, "www.chicagoblackhawks.com") + || dnsDomainIs(host, "www.chickasaw.net") + || dnsDomainIs(host, "www.childrensmusic.co.uk") + || dnsDomainIs(host, "www.childrenssoftware.com") + || dnsDomainIs(host, "www.childrenstory.com") + || dnsDomainIs(host, "www.childrenwithdiabetes.com") + || dnsDomainIs(host, "www.chinapage.com") + || dnsDomainIs(host, "www.chinatoday.com") + || dnsDomainIs(host, "www.chinavista.com") + || dnsDomainIs(host, "www.chinnet.net") + || dnsDomainIs(host, "www.chiquita.com") + || dnsDomainIs(host, "www.chisox.com") + || dnsDomainIs(host, "www.chivalry.com") + || dnsDomainIs(host, "www.christiananswers.net") + || dnsDomainIs(host, "www.christianity.com") + || dnsDomainIs(host, "www.christmas.com") + || dnsDomainIs(host, "www.christmas98.com") + || dnsDomainIs(host, "www.chron.com") + || dnsDomainIs(host, "www.chronique.com") + || dnsDomainIs(host, "www.chuckecheese.com") + || dnsDomainIs(host, "www.chucklebait.com") + || dnsDomainIs(host, "www.chunkymonkey.com") + || dnsDomainIs(host, "www.ci.chi.il.us") + || dnsDomainIs(host, "www.ci.nyc.ny.us") + || dnsDomainIs(host, "www.ci.phoenix.az.us") + || dnsDomainIs(host, "www.ci.san-diego.ca.us") + || dnsDomainIs(host, "www.cibc.com") + || dnsDomainIs(host, "www.ciderpresspottery.com") + || dnsDomainIs(host, "www.cincinnatireds.com") + || dnsDomainIs(host, "www.circusparade.com") + || dnsDomainIs(host, "www.circusweb.com") + || dnsDomainIs(host, "www.cirquedusoleil.com") + || dnsDomainIs(host, "www.cit.state.vt.us") + || dnsDomainIs(host, "www.citycastles.com") + || dnsDomainIs(host, "www.cityu.edu.hk") + || dnsDomainIs(host, "www.civicmind.com") + || dnsDomainIs(host, "www.civil-war.net") + || dnsDomainIs(host, "www.civilization.ca") + || dnsDomainIs(host, "www.cl.cam.ac.uk") + || dnsDomainIs(host, "www.clantongang.com") + || dnsDomainIs(host, "www.clark.net") + || dnsDomainIs(host, "www.classicgaming.com") + || dnsDomainIs(host, "www.claus.com") + || dnsDomainIs(host, "www.clayz.com") + || dnsDomainIs(host, "www.clearcf.uvic.ca") + || dnsDomainIs(host, "www.clearlight.com") + || dnsDomainIs(host, "www.clemusart.com") + || dnsDomainIs(host, "www.clevelandbrowns.com") + || dnsDomainIs(host, "www.clipartcastle.com") + || dnsDomainIs(host, "www.clubi.ie") + || dnsDomainIs(host, "www.cnn.com") + || dnsDomainIs(host, "www.co.henrico.va.us") + || dnsDomainIs(host, "www.coax.net") + || dnsDomainIs(host, "www.cocacola.com") + || dnsDomainIs(host, "www.cocori.com") + || dnsDomainIs(host, "www.codesmiths.com") + || dnsDomainIs(host, "www.codetalk.fed.us") + || dnsDomainIs(host, "www.coin-gallery.com") + || dnsDomainIs(host, "www.colinthompson.com") + || dnsDomainIs(host, "www.collectoronline.com") + || dnsDomainIs(host, "www.colonialhall.com") + || dnsDomainIs(host, "www.coloradoavalanche.com") + || dnsDomainIs(host, "www.coloradorockies.com") + || dnsDomainIs(host, "www.colormathpink.com") + || dnsDomainIs(host, "www.colts.com") + || dnsDomainIs(host, "www.comet.net") + || dnsDomainIs(host, "www.cometsystems.com") + || dnsDomainIs(host, "www.comicbookresources.com") + || dnsDomainIs(host, "www.comicspage.com") + || dnsDomainIs(host, "www.compassnet.com") + || dnsDomainIs(host, "www.compleatbellairs.com") + || dnsDomainIs(host, "www.comptons.com") + || dnsDomainIs(host, "www.concentric.net") + || dnsDomainIs(host, "www.congogorillaforest.com") + || dnsDomainIs(host, "www.conjuror.com") + || dnsDomainIs(host, "www.conk.com") + || dnsDomainIs(host, "www.conservation.state.mo.us") + || dnsDomainIs(host, "www.contracostatimes.com") + || dnsDomainIs(host, "www.control.chalmers.se") + || dnsDomainIs(host, "www.cookierecipe.com") + || dnsDomainIs(host, "www.cooljapanesetoys.com") + || dnsDomainIs(host, "www.cooper.com") + || dnsDomainIs(host, "www.corpcomm.net") + || dnsDomainIs(host, "www.corrietenboom.com") + || dnsDomainIs(host, "www.corynet.com") + || dnsDomainIs(host, "www.corypaints.com") + || dnsDomainIs(host, "www.cosmosmith.com") + || dnsDomainIs(host, "www.countdown2000.com") + || dnsDomainIs(host, "www.cowboy.net") + || dnsDomainIs(host, "www.cowboypal.com") + || dnsDomainIs(host, "www.cowcreek.com") + || dnsDomainIs(host, "www.cowgirl.net") + || dnsDomainIs(host, "www.cowgirls.com") + || dnsDomainIs(host, "www.cp.duluth.mn.us") + || dnsDomainIs(host, "www.cpsweb.com") + || dnsDomainIs(host, "www.craftideas.com") + || dnsDomainIs(host, "www.craniamania.com") + || dnsDomainIs(host, "www.crater.lake.national-park.com") + || dnsDomainIs(host, "www.crayoncrawler.com") + || dnsDomainIs(host, "www.crazybone.com") + || dnsDomainIs(host, "www.crazybones.com") + || dnsDomainIs(host, "www.crd.ge.com") + || dnsDomainIs(host, "www.create4kids.com") + || dnsDomainIs(host, "www.creativemusic.com") + || dnsDomainIs(host, "www.crocodilian.com") + || dnsDomainIs(host, "www.crop.cri.nz") + || dnsDomainIs(host, "www.cruzio.com") + || dnsDomainIs(host, "www.crwflags.com") + || dnsDomainIs(host, "www.cryptograph.com") + || dnsDomainIs(host, "www.cryst.bbk.ac.uk") + || dnsDomainIs(host, "www.cs.bilkent.edu.tr") + || dnsDomainIs(host, "www.cs.man.ac.uk") + || dnsDomainIs(host, "www.cs.sfu.ca") + || dnsDomainIs(host, "www.cs.ubc.ca") + || dnsDomainIs(host, "www.csd.uu.se") + || dnsDomainIs(host, "www.csmonitor.com") + || dnsDomainIs(host, "www.csse.monash.edu.au") + || dnsDomainIs(host, "www.cstone.net") + || dnsDomainIs(host, "www.csu.edu.au") + || dnsDomainIs(host, "www.cubs.com") + || dnsDomainIs(host, "www.culture.fr") + || dnsDomainIs(host, "www.cultures.com") + || dnsDomainIs(host, "www.curtis-collection.com") + || dnsDomainIs(host, "www.cut-the-knot.com") + || dnsDomainIs(host, "www.cws-scf.ec.gc.ca") + || dnsDomainIs(host, "www.cyber-dyne.com") + || dnsDomainIs(host, "www.cyberbee.com") + || dnsDomainIs(host, "www.cyberbee.net") + || dnsDomainIs(host, "www.cybercom.net") + || dnsDomainIs(host, "www.cybercomm.net") + || dnsDomainIs(host, "www.cybercomm.nl") + || dnsDomainIs(host, "www.cybercorp.co.nz") + || dnsDomainIs(host, "www.cybercs.com") + || dnsDomainIs(host, "www.cybergoal.com") + || dnsDomainIs(host, "www.cyberkids.com") + || dnsDomainIs(host, "www.cyberspaceag.com") + || dnsDomainIs(host, "www.cyberteens.com") + || dnsDomainIs(host, "www.cybertours.com") + || dnsDomainIs(host, "www.cybiko.com") + || dnsDomainIs(host, "www.czweb.com") + || dnsDomainIs(host, "www.d91.k12.id.us") + || dnsDomainIs(host, "www.dailygrammar.com") + || dnsDomainIs(host, "www.dakidz.com") + || dnsDomainIs(host, "www.dalejarrettonline.com") + || dnsDomainIs(host, "www.dallascowboys.com") + || dnsDomainIs(host, "www.dallasdogndisc.com") + || dnsDomainIs(host, "www.dallasstars.com") + || dnsDomainIs(host, "www.damnyankees.com") + || dnsDomainIs(host, "www.danceart.com") + || dnsDomainIs(host, "www.daniellesplace.com") + || dnsDomainIs(host, "www.dare-america.com") + || dnsDomainIs(host, "www.darkfish.com") + || dnsDomainIs(host, "www.darsbydesign.com") + || dnsDomainIs(host, "www.datadragon.com") + || dnsDomainIs(host, "www.davidreilly.com") + || dnsDomainIs(host, "www.dccomics.com") + || dnsDomainIs(host, "www.dcn.davis.ca.us") + || dnsDomainIs(host, "www.deepseaworld.com") + || dnsDomainIs(host, "www.delawaretribeofindians.nsn.us") + || dnsDomainIs(host, "www.demon.co.uk") + || dnsDomainIs(host, "www.denverbroncos.com") + || dnsDomainIs(host, "www.denverpost.com") + || dnsDomainIs(host, "www.dep.state.pa.us") + || dnsDomainIs(host, "www.desert-fairy.com") + || dnsDomainIs(host, "www.desert-storm.com") + || dnsDomainIs(host, "www.desertusa.com") + || dnsDomainIs(host, "www.designltd.com") + || dnsDomainIs(host, "www.designsbykat.com") + || dnsDomainIs(host, "www.detnews.com") + || dnsDomainIs(host, "www.detroitlions.com") + || dnsDomainIs(host, "www.detroitredwings.com") + || dnsDomainIs(host, "www.detroittigers.com") + || dnsDomainIs(host, "www.deutsches-museum.de") + || dnsDomainIs(host, "www.devilray.com") + || dnsDomainIs(host, "www.dhorse.com") + || dnsDomainIs(host, "www.diana-ross.co.uk") + || dnsDomainIs(host, "www.dianarossandthesupremes.net") + || dnsDomainIs(host, "www.diaryproject.com") + || dnsDomainIs(host, "www.dickbutkus.com") + || dnsDomainIs(host, "www.dickshovel.com") + || dnsDomainIs(host, "www.dictionary.com") + || dnsDomainIs(host, "www.didyouknow.com") + || dnsDomainIs(host, "www.diegorivera.com") + || dnsDomainIs(host, "www.digitalcentury.com") + || dnsDomainIs(host, "www.digitaldog.com") + || dnsDomainIs(host, "www.digiweb.com") + || dnsDomainIs(host, "www.dimdima.com") + || dnsDomainIs(host, "www.dinodon.com") + || dnsDomainIs(host, "www.dinosauria.com") + || dnsDomainIs(host, "www.discovereso.com") + || dnsDomainIs(host, "www.discovergalapagos.com") + || dnsDomainIs(host, "www.discovergames.com") + || dnsDomainIs(host, "www.discoveringarchaeology.com") + || dnsDomainIs(host, "www.discoveringmontana.com") + || dnsDomainIs(host, "www.discoverlearning.com") + || dnsDomainIs(host, "www.discovery.com") + || dnsDomainIs(host, "www.disknet.com") + || dnsDomainIs(host, "www.disney.go.com") + || dnsDomainIs(host, "www.distinguishedwomen.com") + || dnsDomainIs(host, "www.dkonline.com") + || dnsDomainIs(host, "www.dltk-kids.com") + || dnsDomainIs(host, "www.dmgi.com") + || dnsDomainIs(host, "www.dnr.state.md.us") + || dnsDomainIs(host, "www.dnr.state.mi.us") + || dnsDomainIs(host, "www.dnr.state.wi.us") + || dnsDomainIs(host, "www.dodgers.com") + || dnsDomainIs(host, "www.dodoland.com") + || dnsDomainIs(host, "www.dog-play.com") + || dnsDomainIs(host, "www.dogbreedinfo.com") + || dnsDomainIs(host, "www.doginfomat.com") + || dnsDomainIs(host, "www.dole5aday.com") + || dnsDomainIs(host, "www.dollart.com") + || dnsDomainIs(host, "www.dolliedish.com") + || dnsDomainIs(host, "www.dome2000.co.uk") + || dnsDomainIs(host, "www.domtar.com") + || dnsDomainIs(host, "www.donegal.k12.pa.us") + || dnsDomainIs(host, "www.dorneypark.com") + || dnsDomainIs(host, "www.dorothyhinshawpatent.com") + || dnsDomainIs(host, "www.dougweb.com") + || dnsDomainIs(host, "www.dps.state.ak.us") + || dnsDomainIs(host, "www.draw3d.com") + || dnsDomainIs(host, "www.dreamgate.com") + || dnsDomainIs(host, "www.dreamkitty.com") + || dnsDomainIs(host, "www.dreamscape.com") + || dnsDomainIs(host, "www.dreamtime.net.au") + || dnsDomainIs(host, "www.drpeppermuseum.com") + || dnsDomainIs(host, "www.drscience.com") + || dnsDomainIs(host, "www.drseward.com") + || dnsDomainIs(host, "www.drtoy.com") + || dnsDomainIs(host, "www.dse.nl") + || dnsDomainIs(host, "www.dtic.mil") + || dnsDomainIs(host, "www.duracell.com") + || dnsDomainIs(host, "www.dustbunny.com") + || dnsDomainIs(host, "www.dynanet.com") + || dnsDomainIs(host, "www.eagerreaders.com") + || dnsDomainIs(host, "www.eaglekids.com") + || dnsDomainIs(host, "www.earthcalendar.net") + || dnsDomainIs(host, "www.earthday.net") + || dnsDomainIs(host, "www.earthdog.com") + || dnsDomainIs(host, "www.earthwatch.com") + || dnsDomainIs(host, "www.ease.com") + || dnsDomainIs(host, "www.eastasia.ws") + || dnsDomainIs(host, "www.easytype.com") + || dnsDomainIs(host, "www.eblewis.com") + || dnsDomainIs(host, "www.ebs.hw.ac.uk") + || dnsDomainIs(host, "www.eclipse.net") + || dnsDomainIs(host, "www.eco-pros.com") + || dnsDomainIs(host, "www.edbydesign.com") + || dnsDomainIs(host, "www.eddytheeco-dog.com") + || dnsDomainIs(host, "www.edgate.com") + || dnsDomainIs(host, "www.edmontonoilers.com") + || dnsDomainIs(host, "www.edu-source.com") + || dnsDomainIs(host, "www.edu.gov.on.ca") + || dnsDomainIs(host, "www.edu4kids.com") + || dnsDomainIs(host, "www.educ.uvic.ca") + || dnsDomainIs(host, "www.educate.org.uk") + || dnsDomainIs(host, "www.education-world.com") + || dnsDomainIs(host, "www.edunet.com") + || dnsDomainIs(host, "www.eduplace.com") + || dnsDomainIs(host, "www.edupuppy.com") + || dnsDomainIs(host, "www.eduweb.com") + || dnsDomainIs(host, "www.ee.ryerson.ca") + || dnsDomainIs(host, "www.ee.surrey.ac.uk") + || dnsDomainIs(host, "www.eeggs.com") + || dnsDomainIs(host, "www.efes.com") + || dnsDomainIs(host, "www.egalvao.com") + || dnsDomainIs(host, "www.egypt.com") + || dnsDomainIs(host, "www.egyptology.com") + || dnsDomainIs(host, "www.ehobbies.com") + || dnsDomainIs(host, "www.ehow.com") + || dnsDomainIs(host, "www.eia.brad.ac.uk") + || dnsDomainIs(host, "www.elbalero.gob.mx") + || dnsDomainIs(host, "www.eliki.com") + || dnsDomainIs(host, "www.elnino.com") + || dnsDomainIs(host, "www.elok.com") + || dnsDomainIs(host, "www.emf.net") + || dnsDomainIs(host, "www.emsphone.com") + || dnsDomainIs(host, "www.emulateme.com") + || dnsDomainIs(host, "www.en.com") + || dnsDomainIs(host, "www.enature.com") + || dnsDomainIs(host, "www.enchantedlearning.com") + || dnsDomainIs(host, "www.encyclopedia.com") + || dnsDomainIs(host, "www.endex.com") + || dnsDomainIs(host, "www.enjoyillinois.com") + || dnsDomainIs(host, "www.enn.com") + || dnsDomainIs(host, "www.enriqueig.com") + || dnsDomainIs(host, "www.enteract.com") + || dnsDomainIs(host, "www.epals.com") + || dnsDomainIs(host, "www.equine-world.co.uk") + || dnsDomainIs(host, "www.eric-carle.com") + || dnsDomainIs(host, "www.ericlindros.net") + || dnsDomainIs(host, "www.escape.com") + || dnsDomainIs(host, "www.eskimo.com") + || dnsDomainIs(host, "www.essentialsofmusic.com") + || dnsDomainIs(host, "www.etch-a-sketch.com") + || dnsDomainIs(host, "www.ethanallen.together.com") + || dnsDomainIs(host, "www.etoys.com") + || dnsDomainIs(host, "www.eurekascience.com") + || dnsDomainIs(host, "www.euronet.nl") + || dnsDomainIs(host, "www.everyrule.com") + || dnsDomainIs(host, "www.ex.ac.uk") + || dnsDomainIs(host, "www.excite.com") + || dnsDomainIs(host, "www.execpc.com") + || dnsDomainIs(host, "www.execulink.com") + || dnsDomainIs(host, "www.exn.net") + || dnsDomainIs(host, "www.expa.hvu.nl") + || dnsDomainIs(host, "www.expage.com") + || dnsDomainIs(host, "www.explode.to") + || dnsDomainIs(host, "www.explorescience.com") + || dnsDomainIs(host, "www.explorezone.com") + || dnsDomainIs(host, "www.extremescience.com") + || dnsDomainIs(host, "www.eyelid.co.uk") + || dnsDomainIs(host, "www.eyeneer.com") + || dnsDomainIs(host, "www.eyesofachild.com") + || dnsDomainIs(host, "www.eyesofglory.com") + || dnsDomainIs(host, "www.ezschool.com") + || dnsDomainIs(host, "www.f1-live.com") + || dnsDomainIs(host, "www.fables.co.uk") + || dnsDomainIs(host, "www.factmonster.com") + || dnsDomainIs(host, "www.fairygodmother.com") + || dnsDomainIs(host, "www.familybuzz.com") + || dnsDomainIs(host, "www.familygames.com") + || dnsDomainIs(host, "www.familygardening.com") + || dnsDomainIs(host, "www.familyinternet.com") + || dnsDomainIs(host, "www.familymoney.com") + || dnsDomainIs(host, "www.familyplay.com") + || dnsDomainIs(host, "www.famousbirthdays.com") + || dnsDomainIs(host, "www.fandom.com") + || dnsDomainIs(host, "www.fansites.com") + || dnsDomainIs(host, "www.faoschwarz.com") + || dnsDomainIs(host, "www.fbe.unsw.edu.au") + || dnsDomainIs(host, "www.fcps.k12.va.us") + || dnsDomainIs(host, "www.fellersartsfactory.com") + || dnsDomainIs(host, "www.ferrari.it") + || dnsDomainIs(host, "www.fertnel.com") + || dnsDomainIs(host, "www.fh-konstanz.de") + || dnsDomainIs(host, "www.fhw.gr") + || dnsDomainIs(host, "www.fibblesnork.com") + || dnsDomainIs(host, "www.fidnet.com") + || dnsDomainIs(host, "www.fieldhockey.com") + || dnsDomainIs(host, "www.fieldhockeytraining.com") + || dnsDomainIs(host, "www.fieler.com") + || dnsDomainIs(host, "www.finalfour.net") + || dnsDomainIs(host, "www.finifter.com") + || dnsDomainIs(host, "www.fireworks-safety.com") + || dnsDomainIs(host, "www.firstcut.com") + || dnsDomainIs(host, "www.firstnations.com") + || dnsDomainIs(host, "www.fishbc.com") + || dnsDomainIs(host, "www.fisher-price.com") + || dnsDomainIs(host, "www.fisheyeview.com") + || dnsDomainIs(host, "www.fishgeeks.com") + || dnsDomainIs(host, "www.fishindex.com") + || dnsDomainIs(host, "www.fitzgeraldstudio.com") + || dnsDomainIs(host, "www.flags.net") + || dnsDomainIs(host, "www.flail.com") + || dnsDomainIs(host, "www.flamarlins.com") + || dnsDomainIs(host, "www.flausa.com") + || dnsDomainIs(host, "www.floodlight-findings.com") + || dnsDomainIs(host, "www.floridahistory.com") + || dnsDomainIs(host, "www.floridapanthers.com") + || dnsDomainIs(host, "www.fng.fi") + || dnsDomainIs(host, "www.foodsci.uoguelph.ca") + || dnsDomainIs(host, "www.foremost.com") + || dnsDomainIs(host, "www.fortress.am") + || dnsDomainIs(host, "www.fortunecity.com") + || dnsDomainIs(host, "www.fosterclub.com") + || dnsDomainIs(host, "www.foundus.com") + || dnsDomainIs(host, "www.fourmilab.ch") + || dnsDomainIs(host, "www.fox.com") + || dnsDomainIs(host, "www.foxfamilychannel.com") + || dnsDomainIs(host, "www.foxhome.com") + || dnsDomainIs(host, "www.foxkids.com") + || dnsDomainIs(host, "www.franceway.com") + || dnsDomainIs(host, "www.fred.net") + || dnsDomainIs(host, "www.fredpenner.com") + || dnsDomainIs(host, "www.freedomknot.com") + || dnsDomainIs(host, "www.freejigsawpuzzles.com") + || dnsDomainIs(host, "www.freenet.edmonton.ab.ca") + || dnsDomainIs(host, "www.frii.com") + || dnsDomainIs(host, "www.frisbee.com") + || dnsDomainIs(host, "www.fritolay.com") + || dnsDomainIs(host, "www.frogsonice.com") + || dnsDomainIs(host, "www.frontiernet.net") + || dnsDomainIs(host, "www.fs.fed.us") + || dnsDomainIs(host, "www.funattic.com") + || dnsDomainIs(host, ".funbrain.com") + || dnsDomainIs(host, "www.fundango.com") + || dnsDomainIs(host, "www.funisland.com") + || dnsDomainIs(host, "www.funkandwagnalls.com") + || dnsDomainIs(host, "www.funorama.com") + || dnsDomainIs(host, "www.funschool.com") + || dnsDomainIs(host, "www.funster.com") + || dnsDomainIs(host, "www.furby.com") + || dnsDomainIs(host, "www.fusion.org.uk") + || dnsDomainIs(host, "www.futcher.com") + || dnsDomainIs(host, "www.futurescan.com") + || dnsDomainIs(host, "www.fyi.net") + || dnsDomainIs(host, "www.gailgibbons.com") + || dnsDomainIs(host, "www.galegroup.com") + || dnsDomainIs(host, "www.gambia.com") + || dnsDomainIs(host, "www.gamecabinet.com") + || dnsDomainIs(host, "www.gamecenter.com") + || dnsDomainIs(host, "www.gamefaqs.com") + || dnsDomainIs(host, "www.garfield.com") + || dnsDomainIs(host, "www.garyharbo.com") + || dnsDomainIs(host, "www.gatefish.com") + || dnsDomainIs(host, "www.gateway-va.com") + || dnsDomainIs(host, "www.gazillionaire.com") + || dnsDomainIs(host, "www.gearhead.com") + || dnsDomainIs(host, "www.genesplicing.com") + || dnsDomainIs(host, "www.genhomepage.com") + || dnsDomainIs(host, "www.geobop.com") + || dnsDomainIs(host, "www.geocities.com") + || dnsDomainIs(host, "www.geographia.com") + || dnsDomainIs(host, "www.georgeworld.com") + || dnsDomainIs(host, "www.georgian.net") + || dnsDomainIs(host, "www.german-way.com") + || dnsDomainIs(host, "www.germanfortravellers.com") + || dnsDomainIs(host, "www.germantown.k12.il.us") + || dnsDomainIs(host, "www.germany-tourism.de") + || dnsDomainIs(host, "www.getmusic.com") + || dnsDomainIs(host, "www.gettysburg.com") + || dnsDomainIs(host, "www.ghirardellisq.com") + || dnsDomainIs(host, "www.ghosttowngallery.com") + || dnsDomainIs(host, "www.ghosttownsusa.com") + || dnsDomainIs(host, "www.giants.com") + || dnsDomainIs(host, "www.gibraltar.gi") + || dnsDomainIs(host, "www.gigglepoetry.com") + || dnsDomainIs(host, "www.gilchriststudios.com") + || dnsDomainIs(host, "www.gillslap.freeserve.co.uk") + || dnsDomainIs(host, "www.gilmer.net") + || dnsDomainIs(host, "www.gio.gov.tw") + || dnsDomainIs(host, "www.girltech.com") + || dnsDomainIs(host, "www.girlzone.com") + || dnsDomainIs(host, "www.globalgang.org.uk") + || dnsDomainIs(host, "www.globalindex.com") + || dnsDomainIs(host, "www.globalinfo.com") + || dnsDomainIs(host, "www.gloriafan.com") + || dnsDomainIs(host, "www.gms.ocps.k12.fl.us") + || dnsDomainIs(host, "www.go-go-diggity.com") + || dnsDomainIs(host, "www.goals.com") + || dnsDomainIs(host, "www.godiva.com") + || dnsDomainIs(host, "www.golden-retriever.com") + || dnsDomainIs(host, "www.goldenbooks.com") + || dnsDomainIs(host, "www.goldeneggs.com.au") + || dnsDomainIs(host, "www.golfonline.com") + || dnsDomainIs(host, "www.goobo.com") + || dnsDomainIs(host, "www.goodearthgraphics.com") + || dnsDomainIs(host, "www.goodyear.com") + || dnsDomainIs(host, "www.gopbi.com") + || dnsDomainIs(host, "www.gorge.net") + || dnsDomainIs(host, "www.gorp.com") + || dnsDomainIs(host, "www.got-milk.com") + || dnsDomainIs(host, "www.gov.ab.ca") + || dnsDomainIs(host, "www.gov.nb.ca") + || dnsDomainIs(host, "www.grammarbook.com") + || dnsDomainIs(host, "www.grammarlady.com") + || dnsDomainIs(host, "www.grandparents-day.com") + || dnsDomainIs(host, "www.granthill.com") + || dnsDomainIs(host, "www.grayweb.com") + || dnsDomainIs(host, "www.greatbuildings.com") + || dnsDomainIs(host, "www.greatkids.com") + || dnsDomainIs(host, "www.greatscience.com") + || dnsDomainIs(host, "www.greeceny.com") + || dnsDomainIs(host, "www.greenkeepers.com") + || dnsDomainIs(host, "www.greylabyrinth.com") + || dnsDomainIs(host, "www.grimmy.com") + || dnsDomainIs(host, "www.gsrg.nmh.ac.uk") + || dnsDomainIs(host, "www.gti.net") + || dnsDomainIs(host, "www.guinnessworldrecords.com") + || dnsDomainIs(host, "www.guitar.net") + || dnsDomainIs(host, "www.guitarplaying.com") + || dnsDomainIs(host, "www.gumbyworld.com") + || dnsDomainIs(host, "www.gurlwurld.com") + || dnsDomainIs(host, "www.gwi.net") + || dnsDomainIs(host, "www.gymn-forum.com") + || dnsDomainIs(host, "www.gzkidzone.com") + || dnsDomainIs(host, "www.haemibalgassi.com") + || dnsDomainIs(host, "www.hairstylist.com") + || dnsDomainIs(host, "www.halcyon.com") + || dnsDomainIs(host, "www.halifax.cbc.ca") + || dnsDomainIs(host, "www.halloween-online.com") + || dnsDomainIs(host, "www.halloweenkids.com") + || dnsDomainIs(host, "www.halloweenmagazine.com") + || dnsDomainIs(host, "www.hamill.co.uk") + || dnsDomainIs(host, "www.hamsterdance2.com") + || dnsDomainIs(host, "www.hamsters.co.uk") + || dnsDomainIs(host, "www.hamstertours.com") + || dnsDomainIs(host, "www.handsonmath.com") + || dnsDomainIs(host, "www.handspeak.com") + || dnsDomainIs(host, "www.hansonline.com") + || dnsDomainIs(host, "www.happychild.org.uk") + || dnsDomainIs(host, "www.happyfamilies.com") + || dnsDomainIs(host, "www.happytoy.com") + || dnsDomainIs(host, "www.harley-davidson.com") + || dnsDomainIs(host, "www.harmonicalessons.com") + || dnsDomainIs(host, "www.harperchildrens.com") + || dnsDomainIs(host, "www.harvey.com") + || dnsDomainIs(host, "www.hasbro-interactive.com") + || dnsDomainIs(host, "www.haynet.net") + || dnsDomainIs(host, "www.hbc.com") + || dnsDomainIs(host, "www.hblewis.com") + || dnsDomainIs(host, "www.hbook.com") + || dnsDomainIs(host, "www.he.net") + || dnsDomainIs(host, "www.headbone.com") + || dnsDomainIs(host, "www.healthatoz.com") + || dnsDomainIs(host, "www.healthypet.com") + || dnsDomainIs(host, "www.heartfoundation.com.au") + || dnsDomainIs(host, "www.heatersworld.com") + || dnsDomainIs(host, "www.her-online.com") + || dnsDomainIs(host, "www.heroesofhistory.com") + || dnsDomainIs(host, "www.hersheypa.com") + || dnsDomainIs(host, "www.hersheys.com") + || dnsDomainIs(host, "www.hevanet.com") + || dnsDomainIs(host, "www.heynetwork.com") + || dnsDomainIs(host, "www.hgo.com") + || dnsDomainIs(host, "www.hhof.com") + || dnsDomainIs(host, "www.hideandseekpuppies.com") + || dnsDomainIs(host, "www.hifusion.com") + || dnsDomainIs(host, "www.highbridgepress.com") + || dnsDomainIs(host, "www.his.com") + || dnsDomainIs(host, "www.history.navy.mil") + || dnsDomainIs(host, "www.historychannel.com") + || dnsDomainIs(host, "www.historyhouse.com") + || dnsDomainIs(host, "www.historyplace.com") + || dnsDomainIs(host, "www.hisurf.com") + || dnsDomainIs(host, "www.hiyah.com") + || dnsDomainIs(host, "www.hmnet.com") + || dnsDomainIs(host, "www.hoboes.com") + || dnsDomainIs(host, "www.hockeydb.com") + || dnsDomainIs(host, "www.hohnerusa.com") + || dnsDomainIs(host, "www.holidaychannel.com") + || dnsDomainIs(host, "www.holidayfestival.com") + || dnsDomainIs(host, "www.holidays.net") + || dnsDomainIs(host, "www.hollywood.com") + || dnsDomainIs(host, "www.holoworld.com") + || dnsDomainIs(host, "www.homepagers.com") + || dnsDomainIs(host, "www.homeschoolzone.com") + || dnsDomainIs(host, "www.homestead.com") + || dnsDomainIs(host, "www.homeworkspot.com") + || dnsDomainIs(host, "www.hompro.com") + || dnsDomainIs(host, "www.honey.com") + || dnsDomainIs(host, "www.hooked.net") + || dnsDomainIs(host, "www.hoophall.com") + || dnsDomainIs(host, "www.hooverdam.com") + || dnsDomainIs(host, "www.hopepaul.com") + || dnsDomainIs(host, "www.horse-country.com") + || dnsDomainIs(host, "www.horsechat.com") + || dnsDomainIs(host, "www.horsefun.com") + || dnsDomainIs(host, "www.horus.ics.org.eg") + || dnsDomainIs(host, "www.hotbraille.com") + || dnsDomainIs(host, "www.hotwheels.com") + || dnsDomainIs(host, "www.howstuffworks.com") + || dnsDomainIs(host, "www.hpdigitalbookclub.com") + || dnsDomainIs(host, "www.hpj.com") + || dnsDomainIs(host, "www.hpl.hp.com") + || dnsDomainIs(host, "www.hpl.lib.tx.us") + || dnsDomainIs(host, "www.hpnetwork.f2s.com") + || dnsDomainIs(host, "www.hsswp.com") + || dnsDomainIs(host, "www.hsx.com") + || dnsDomainIs(host, "www.humboldt1.com") + || dnsDomainIs(host, "www.humongous.com") + || dnsDomainIs(host, "www.humph3.freeserve.co.uk") + || dnsDomainIs(host, "www.humphreybear.com ") + || dnsDomainIs(host, "www.hurricanehunters.com") + || dnsDomainIs(host, "www.hyperhistory.com") + || dnsDomainIs(host, "www.i2k.com") + || dnsDomainIs(host, "www.ibhof.com") + || dnsDomainIs(host, "www.ibiscom.com") + || dnsDomainIs(host, "www.ibm.com") + || dnsDomainIs(host, "www.icangarden.com") + || dnsDomainIs(host, "www.icecreamusa.com") + || dnsDomainIs(host, "www.icn.co.uk") + || dnsDomainIs(host, "www.icomm.ca") + || dnsDomainIs(host, "www.idfishnhunt.com") + || dnsDomainIs(host, "www.iditarod.com") + || dnsDomainIs(host, "www.iei.net") + || dnsDomainIs(host, "www.iemily.com") + || dnsDomainIs(host, "www.iir.com") + || dnsDomainIs(host, "www.ika.com") + || dnsDomainIs(host, "www.ikoala.com") + || dnsDomainIs(host, "www.iln.net") + || dnsDomainIs(host, "www.imagine5.com") + || dnsDomainIs(host, "www.imes.boj.or.jp") + || dnsDomainIs(host, "www.inch.com") + || dnsDomainIs(host, "www.incwell.com") + || dnsDomainIs(host, "www.indian-river.fl.us") + || dnsDomainIs(host, "www.indians.com") + || dnsDomainIs(host, "www.indo.com") + || dnsDomainIs(host, "www.indyracingleague.com") + || dnsDomainIs(host, "www.indyzoo.com") + || dnsDomainIs(host, "www.info-canada.com") + || dnsDomainIs(host, "www.infomagic.net") + || dnsDomainIs(host, "www.infoplease.com") + || dnsDomainIs(host, "www.infoporium.com") + || dnsDomainIs(host, "www.infostuff.com") + || dnsDomainIs(host, "www.inhandmuseum.com") + || dnsDomainIs(host, "www.inil.com") + || dnsDomainIs(host, "www.inkspot.com") + || dnsDomainIs(host, "www.inkyfingers.com") + || dnsDomainIs(host, "www.innerauto.com") + || dnsDomainIs(host, "www.innerbody.com") + || dnsDomainIs(host, "www.inqpub.com") + || dnsDomainIs(host, "www.insecta-inspecta.com") + || dnsDomainIs(host, "www.insectclopedia.com") + || dnsDomainIs(host, "www.inside-mexico.com") + || dnsDomainIs(host, "www.insiders.com") + || dnsDomainIs(host, "www.insteam.com") + || dnsDomainIs(host, "www.intel.com") + || dnsDomainIs(host, "www.intellicast.com") + || dnsDomainIs(host, "www.interads.co.uk") + || dnsDomainIs(host, "www.intercot.com") + || dnsDomainIs(host, "www.intergraffix.com") + || dnsDomainIs(host, "www.interknowledge.com") + || dnsDomainIs(host, "www.interlog.com") + || dnsDomainIs(host, "www.internet4kids.com") + || dnsDomainIs(host, "www.intersurf.com") + || dnsDomainIs(host, "www.inthe80s.com") + || dnsDomainIs(host, "www.inventorsmuseum.com") + || dnsDomainIs(host, "www.inwap.com") + || dnsDomainIs(host, "www.ioa.com") + || dnsDomainIs(host, "www.ionet.net") + || dnsDomainIs(host, "www.iowacity.com") + || dnsDomainIs(host, "www.ireland-now.com") + || dnsDomainIs(host, "www.ireland.com") + || dnsDomainIs(host, "www.irelandseye.com") + || dnsDomainIs(host, "www.irlgov.ie") + || dnsDomainIs(host, "www.isd.net") + || dnsDomainIs(host, "www.islandnet.com") + || dnsDomainIs(host, "www.isomedia.com") + || dnsDomainIs(host, "www.itftennis.com") + || dnsDomainIs(host, "www.itpi.dpi.state.nc.us") + || dnsDomainIs(host, "www.itskwanzaatime.com") + || dnsDomainIs(host, "www.itss.raytheon.com") + || dnsDomainIs(host, "www.iuma.com") + || dnsDomainIs(host, "www.iwaynet.net") + || dnsDomainIs(host, "www.iwc.com") + || dnsDomainIs(host, "www.iwight.gov.uk") + || dnsDomainIs(host, "www.ixpres.com") + || dnsDomainIs(host, "www.j.b.allen.btinternet.co.uk") + || dnsDomainIs(host, "www.jabuti.com") + || dnsDomainIs(host, "www.jackinthebox.com") + || dnsDomainIs(host, "www.jaffebros.com") + || dnsDomainIs(host, "www.jaguars.com") + || dnsDomainIs(host, "www.jamaica-gleaner.com") + || dnsDomainIs(host, "www.jamm.com") + || dnsDomainIs(host, "www.janbrett.com") + || dnsDomainIs(host, "www.janetstevens.com") + || dnsDomainIs(host, "www.japan-guide.com") + || dnsDomainIs(host, "www.jargon.net") + || dnsDomainIs(host, "www.javelinamx.com") + || dnsDomainIs(host, "www.jayjay.com") + || dnsDomainIs(host, "www.jazclass.aust.com") + || dnsDomainIs(host, "www.jedinet.com") + || dnsDomainIs(host, "www.jenniferlopez.com") + || dnsDomainIs(host, "www.jlpanagopoulos.com") + || dnsDomainIs(host, "www.jmarshall.com") + || dnsDomainIs(host, "www.jmccall.demon.co.uk") + || dnsDomainIs(host, "www.jmts.com") + || dnsDomainIs(host, "www.joesherlock.com") + || dnsDomainIs(host, "www.jorvik-viking-centre.co.uk") + || dnsDomainIs(host, "www.joycecarolthomas.com") + || dnsDomainIs(host, "www.joycone.com") + || dnsDomainIs(host, "www.joyrides.com") + || dnsDomainIs(host, "www.jps.net") + || dnsDomainIs(host, "www.jspub.com") + || dnsDomainIs(host, "www.judaica.com") + || dnsDomainIs(host, "www.judyblume.com") + || dnsDomainIs(host, "www.julen.net") + || dnsDomainIs(host, "www.june29.com") + || dnsDomainIs(host, "www.juneteenth.com") + || dnsDomainIs(host, "www.justuskidz.com") + || dnsDomainIs(host, "www.justwomen.com") + || dnsDomainIs(host, "www.jwindow.net") + || dnsDomainIs(host, "www.k9web.com") + || dnsDomainIs(host, "www.kaercher.de") + || dnsDomainIs(host, "www.kaleidoscapes.com") + || dnsDomainIs(host, "www.kapili.com") + || dnsDomainIs(host, "www.kcchiefs.com") + || dnsDomainIs(host, "www.kcpl.lib.mo.us") + || dnsDomainIs(host, "www.kcroyals.com") + || dnsDomainIs(host, "www.kcsd.k12.pa.us") + || dnsDomainIs(host, "www.kdu.com") + || dnsDomainIs(host, "www.kelloggs.com") + || dnsDomainIs(host, "www.kentuckyfriedchicken.com") + || dnsDomainIs(host, "www.kenyaweb.com") + || dnsDomainIs(host, "www.keypals.com") + || dnsDomainIs(host, "www.kfn.com") + || dnsDomainIs(host, "www.kid-at-art.com") + || dnsDomainIs(host, "www.kid-channel.com") + || dnsDomainIs(host, "www.kidallergy.com") + || dnsDomainIs(host, "www.kidbibs.com") + || dnsDomainIs(host, "www.kidcomics.com") + || dnsDomainIs(host, "www.kiddesafety.com") + || dnsDomainIs(host, "www.kiddiecampus.com") + || dnsDomainIs(host, "www.kididdles.com") + || dnsDomainIs(host, "www.kidnews.com") + || dnsDomainIs(host, "www.kidocracy.com") + || dnsDomainIs(host, "www.kidport.com") + || dnsDomainIs(host, "www.kids-channel.co.uk") + || dnsDomainIs(host, "www.kids-drawings.com") + || dnsDomainIs(host, "www.kids-in-mind.com") + || dnsDomainIs(host, "www.kids4peace.com") + || dnsDomainIs(host, "www.kidsandcomputers.com") + || dnsDomainIs(host, "www.kidsart.co.uk") + || dnsDomainIs(host, "www.kidsastronomy.com") + || dnsDomainIs(host, "www.kidsbank.com") + || dnsDomainIs(host, "www.kidsbookshelf.com") + || dnsDomainIs(host, "www.kidsclick.com") + || dnsDomainIs(host, "www.kidscom.com") + || dnsDomainIs(host, "www.kidscook.com") + || dnsDomainIs(host, "www.kidsdoctor.com") + || dnsDomainIs(host, "www.kidsdomain.com") + || dnsDomainIs(host, "www.kidsfarm.com") + || dnsDomainIs(host, "www.kidsfreeware.com") + || dnsDomainIs(host, "www.kidsfun.tv") + || dnsDomainIs(host, "www.kidsgolf.com") + || dnsDomainIs(host, "www.kidsgowild.com") + || dnsDomainIs(host, "www.kidsjokes.com") + || dnsDomainIs(host, "www.kidsloveamystery.com") + || dnsDomainIs(host, "www.kidsmoneycents.com") + || dnsDomainIs(host, "www.kidsnewsroom.com") + || dnsDomainIs(host, "www.kidsource.com") + || dnsDomainIs(host, "www.kidsparties.com") + || dnsDomainIs(host, "www.kidsplaytown.com") + || dnsDomainIs(host, "www.kidsreads.com") + || dnsDomainIs(host, "www.kidsreport.com") + || dnsDomainIs(host, "www.kidsrunning.com") + || dnsDomainIs(host, "www.kidstamps.com") + || dnsDomainIs(host, "www.kidsvideogames.com") + || dnsDomainIs(host, "www.kidsway.com") + || dnsDomainIs(host, "www.kidswithcancer.com") + || dnsDomainIs(host, "www.kidszone.ourfamily.com") + || dnsDomainIs(host, "www.kidzup.com") + || dnsDomainIs(host, "www.kinderart.com") + || dnsDomainIs(host, "www.kineticcity.com") + || dnsDomainIs(host, "www.kings.k12.ca.us") + || dnsDomainIs(host, "www.kiplinger.com") + || dnsDomainIs(host, "www.kiwirecovery.org.nz") + || dnsDomainIs(host, "www.klipsan.com") + || dnsDomainIs(host, "www.klutz.com") + || dnsDomainIs(host, "www.kn.pacbell.com") + || dnsDomainIs(host, "www.knex.com") + || dnsDomainIs(host, "www.knowledgeadventure.com") + || dnsDomainIs(host, "www.knto.or.kr") + || dnsDomainIs(host, "www.kodak.com") + || dnsDomainIs(host, "www.konica.co.jp") + || dnsDomainIs(host, "www.kraftfoods.com") + || dnsDomainIs(host, "www.kudzukids.com") + || dnsDomainIs(host, "www.kulichki.com") + || dnsDomainIs(host, "www.kuttu.com") + || dnsDomainIs(host, "www.kv5.com") + || dnsDomainIs(host, "www.kyes-world.com") + || dnsDomainIs(host, "www.kyohaku.go.jp") + || dnsDomainIs(host, "www.kyrene.k12.az.us") + || dnsDomainIs(host, "www.kz") + || dnsDomainIs(host, "www.la-hq.org.uk") + || dnsDomainIs(host, "www.labs.net") + || dnsDomainIs(host, "www.labyrinth.net.au") + || dnsDomainIs(host, "www.laffinthedark.com") + || dnsDomainIs(host, "www.lakhota.com") + || dnsDomainIs(host, "www.lakings.com") + || dnsDomainIs(host, "www.lam.mus.ca.us") + || dnsDomainIs(host, "www.lampstras.k12.pa.us") + || dnsDomainIs(host, "www.lams.losalamos.k12.nm.us") + || dnsDomainIs(host, "www.landofcadbury.ca") + || dnsDomainIs(host, "www.larry-boy.com") + || dnsDomainIs(host, "www.lasersite.com") + || dnsDomainIs(host, "www.last-word.com") + || dnsDomainIs(host, "www.latimes.com") + || dnsDomainIs(host, "www.laughon.com") + || dnsDomainIs(host, "www.laurasmidiheaven.com") + || dnsDomainIs(host, "www.lausd.k12.ca.us") + || dnsDomainIs(host, "www.learn2.com") + || dnsDomainIs(host, "www.learn2type.com") + || dnsDomainIs(host, "www.learnfree-hobbies.com") + || dnsDomainIs(host, "www.learningkingdom.com") + || dnsDomainIs(host, "www.learningplanet.com") + || dnsDomainIs(host, "www.leftjustified.com") + || dnsDomainIs(host, "www.legalpadjr.com") + || dnsDomainIs(host, "www.legendarysurfers.com") + || dnsDomainIs(host, "www.legends.dm.net") + || dnsDomainIs(host, "www.legis.state.wi.us") + || dnsDomainIs(host, "www.legis.state.wv.us") + || dnsDomainIs(host, "www.lego.com") + || dnsDomainIs(host, "www.leje.com") + || dnsDomainIs(host, "www.leonardodicaprio.com") + || dnsDomainIs(host, "www.lessonplanspage.com") + || dnsDomainIs(host, "www.letour.fr") + || dnsDomainIs(host, "www.levins.com") + || dnsDomainIs(host, "www.levistrauss.com") + || dnsDomainIs(host, "www.libertystatepark.com") + || dnsDomainIs(host, "www.libraryspot.com") + || dnsDomainIs(host, "www.lifelong.com") + || dnsDomainIs(host, "www.lighthouse.cc") + || dnsDomainIs(host, "www.lightlink.com") + || dnsDomainIs(host, "www.lightspan.com") + || dnsDomainIs(host, "www.lil-fingers.com") + || dnsDomainIs(host, "www.linc.or.jp") + || dnsDomainIs(host, "www.lindsaysbackyard.com") + || dnsDomainIs(host, "www.lindtchocolate.com") + || dnsDomainIs(host, "www.lineone.net") + || dnsDomainIs(host, "www.lionel.com") + || dnsDomainIs(host, "www.lisafrank.com") + || dnsDomainIs(host, "www.lissaexplains.com") + || dnsDomainIs(host, "www.literacycenter.net") + || dnsDomainIs(host, "www.littleartist.com") + || dnsDomainIs(host, "www.littlechiles.com") + || dnsDomainIs(host, "www.littlecritter.com") + || dnsDomainIs(host, "www.littlecrowtoys.com") + || dnsDomainIs(host, "www.littlehousebooks.com") + || dnsDomainIs(host, "www.littlejason.com") + || dnsDomainIs(host, "www.littleplanettimes.com") + || dnsDomainIs(host, "www.liveandlearn.com") + || dnsDomainIs(host, "www.loadstar.prometeus.net") + || dnsDomainIs(host, "www.localaccess.com") + || dnsDomainIs(host, "www.lochness.co.uk") + || dnsDomainIs(host, "www.lochness.scotland.net") + || dnsDomainIs(host, "www.logos.it") + || dnsDomainIs(host, "www.lonelyplanet.com") + || dnsDomainIs(host, "www.looklearnanddo.com") + || dnsDomainIs(host, "www.loosejocks.com") + || dnsDomainIs(host, "www.lost-worlds.com") + || dnsDomainIs(host, "www.love-story.com") + || dnsDomainIs(host, "www.lpga.com") + || dnsDomainIs(host, "www.lsjunction.com") + || dnsDomainIs(host, "www.lucasarts.com") + || dnsDomainIs(host, "www.lucent.com") + || dnsDomainIs(host, "www.lucie.com") + || dnsDomainIs(host, "www.lunaland.co.za") + || dnsDomainIs(host, "www.luth.se") + || dnsDomainIs(host, "www.lyricalworks.com") + || dnsDomainIs(host, "www.infoporium.com") + || dnsDomainIs(host, "www.infostuff.com") + || dnsDomainIs(host, "www.inhandmuseum.com") + || dnsDomainIs(host, "www.inil.com") + || dnsDomainIs(host, "www.inkspot.com") + || dnsDomainIs(host, "www.inkyfingers.com") + || dnsDomainIs(host, "www.innerauto.com") + || dnsDomainIs(host, "www.innerbody.com") + || dnsDomainIs(host, "www.inqpub.com") + || dnsDomainIs(host, "www.insecta-inspecta.com") + || dnsDomainIs(host, "www.insectclopedia.com") + || dnsDomainIs(host, "www.inside-mexico.com") + || dnsDomainIs(host, "www.insiders.com") + || dnsDomainIs(host, "www.insteam.com") + || dnsDomainIs(host, "www.intel.com") + || dnsDomainIs(host, "www.intellicast.com") + || dnsDomainIs(host, "www.interads.co.uk") + || dnsDomainIs(host, "www.intercot.com") + || dnsDomainIs(host, "www.intergraffix.com") + || dnsDomainIs(host, "www.interknowledge.com") + || dnsDomainIs(host, "www.interlog.com") + || dnsDomainIs(host, "www.internet4kids.com") + || dnsDomainIs(host, "www.intersurf.com") + || dnsDomainIs(host, "www.inthe80s.com") + || dnsDomainIs(host, "www.inventorsmuseum.com") + || dnsDomainIs(host, "www.inwap.com") + || dnsDomainIs(host, "www.ioa.com") + || dnsDomainIs(host, "www.ionet.net") + || dnsDomainIs(host, "www.iowacity.com") + || dnsDomainIs(host, "www.ireland-now.com") + || dnsDomainIs(host, "www.ireland.com") + || dnsDomainIs(host, "www.irelandseye.com") + || dnsDomainIs(host, "www.irlgov.ie") + || dnsDomainIs(host, "www.isd.net") + || dnsDomainIs(host, "www.islandnet.com") + || dnsDomainIs(host, "www.isomedia.com") + || dnsDomainIs(host, "www.itftennis.com") + || dnsDomainIs(host, "www.itpi.dpi.state.nc.us") + || dnsDomainIs(host, "www.itskwanzaatime.com") + || dnsDomainIs(host, "www.itss.raytheon.com") + || dnsDomainIs(host, "www.iuma.com") + || dnsDomainIs(host, "www.iwaynet.net") + || dnsDomainIs(host, "www.iwc.com") + || dnsDomainIs(host, "www.iwight.gov.uk") + || dnsDomainIs(host, "www.ixpres.com") + || dnsDomainIs(host, "www.j.b.allen.btinternet.co.uk") + || dnsDomainIs(host, "www.jabuti.com") + || dnsDomainIs(host, "www.jackinthebox.com") + || dnsDomainIs(host, "www.jaffebros.com") + || dnsDomainIs(host, "www.jaguars.com") + || dnsDomainIs(host, "www.jamaica-gleaner.com") + || dnsDomainIs(host, "www.jamm.com") + || dnsDomainIs(host, "www.janbrett.com") + || dnsDomainIs(host, "www.janetstevens.com") + || dnsDomainIs(host, "www.japan-guide.com") + || dnsDomainIs(host, "www.jargon.net") + || dnsDomainIs(host, "www.javelinamx.com") + || dnsDomainIs(host, "www.jayjay.com") + || dnsDomainIs(host, "www.jazclass.aust.com") + + ) + return "PROXY proxy.hclib.org:80"; + else + return "PROXY 172.16.100.20:8080"; +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-89474.js b/js/src/tests/js1_5/Regress/regress-89474.js new file mode 100644 index 000000000..05ead3d4d --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-89474.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 07 July 2001 + * + * SUMMARY: Regression test for Bugzilla bug 89474 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=89474 + * + * This test used to crash the JS shell. This was discovered + * by Darren DeRidder <darren.deridder@icarusproject.com + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 89474; +var summary = "Testing the JS shell doesn't crash on it.item()"; +var cnTest = 'it.item()'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + tryThis(cnTest); // Just testing that we don't crash on this + + reportCompare('No Crash', 'No Crash', ''); + + exitFunc ('test'); +} + + +function tryThis(sEval) +{ + try + { + eval(sEval); + } + catch(e) + { + // If we get here, we didn't crash. + } +} diff --git a/js/src/tests/js1_5/Regress/regress-90445.js b/js/src/tests/js1_5/Regress/regress-90445.js new file mode 100644 index 000000000..c20fb1636 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-90445.js @@ -0,0 +1,295 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-12 + * + * SUMMARY: Regression test for bug 90445 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=90445 + * + * Just seeing if this script will compile without crashing. + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 90445; +var summary = 'Testing this script will compile without crashing'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +// The big function - +function compte() { + var mois = getValueFromOption(document.formtest.mois); + var region = document.formtest.region.options.selectedIndex; + var confort = document.formtest.confort.options.selectedIndex; + var encadrement = document.formtest.encadrement.options.selectedIndex; + var typeVillage = document.formtest.type_village.options.selectedIndex; + var budget = document.formtest.budget.value; + var sport1 = document.formtest.sport1.options.selectedIndex; + var sport2 = document.formtest.sport2.options.selectedIndex; + var sport3 = document.formtest.sport3.options.selectedIndex; + var activite1 = document.formtest.activite1.options.selectedIndex; + var activite2 = document.formtest.activite2.options.selectedIndex; + var activite3 = document.formtest.activite3.options.selectedIndex; + + var ret = 0; + var liste; + var taille; + var bl; + var i; + var j; + V=[ + [1,14,19,1,3,3,3,0,[10,13,17,18,22,23,26,27,29,9],[13,17,18,20,4,5,6,7,8]], + [1,14,18,1,1,3,3,0,[1,11,13,22,23,26,27,28,29,3,4,9],[13,17,18,20,6]], + [1,14,19,1,3,4,3,0,[13,17,18,22,23,25,26,27,4,9],[11,17,12,2,20,3,21,9,6]], + [1,14,19,1,1,3,3,0,[1,10,13,22,23,24,25,26,27,28,4,8,9],[13,17,6,9]], + [1,14,18,1,3,4,3,0,[12,13,22,23,27,28,7,9],[13,17,2,20,6,7,9]], + [1,14,19,5,4,2,3,0,[12,13,17,18,2,21,22,23,24,26,27,28,3,5,8,9],[1,10,13,17,18,19,20,5,21,7,8,9]], + [1,14,20,6,2,2,3,0,[11,13,2,22,23,26,27,3,4,5,8,9],[13,17,18,20,6,9]], + [1,14,19,6,3,4,3,0,[10,13,2,22,23,26,27,3,4,5,8,9],[13,17,18,19,20,21,9,6,5]], + [1,14,19,4,2,4,3,0,[13,17,2,22,26,28,3,5,6,7,8,9],[10,13,15,17,19,2,20,3,5,6,9]], + [1,14,19,8,4,4,3,0,[13,2,22,26,3,28,4,5,6,8,9],[14,15,17,18,19,2,20,21,9,7]], + [1,15,18,6,1,4,3,0,[10,11,13,14,15,2,23,26,27,5,8,9,6],[13,17,2,20,6,9]], + [1,14,19,2,3,5,3,0,[10,13,17,2,22,26,27,28,3,5,6,7,8,9],[1,10,13,15,17,18,19,20,6,7,9,22]], + [1,15,18,6,1,3,3,0,[12,13,15,2,22,23,26,4,5,9],[13,15,6,17,2,21,9]], + [1,19,21,1,4,4,3,0,[11,13,18,22,23,27,28,4],[17,2,20,21,9]], + [1,14,19,4,3,3,3,0,[10,13,17,2,22,23,24,26,27,3,4,6,8,9],[10,13,17,19,20,3,5,6,7,9]], + [1,13,19,6,3,3,3,0,[11,13,15,2,22,23,26,27,28,3,4,8,9],[1,13,17,18,20,6,9,22]], + [1,15,19,6,1,5,3,0,[10,13,2,22,23,26,27,4,5,8,11],[10,13,17,20,5,6,9]], + [1,15,18,6,3,2,1,0,[10,17,21,22,23,25,26,9],[13,16,17,20,21,8,9]], + [1,14,19,8,2,2,3,0,[13,16,21,22,23,24,26,27,3,4,5,6,8,9],[15,17,20,3,6,9]], + [1,14,19,5,3,2,3,0,[10,11,13,16,17,2,21,22,23,24,26,27,3,4,8,9],[1,10,13,17,18,19,20,5,6,7,9]], + [1,14,19,4,4,4,3,0,[10,13,2,22,23,26,27,3,4,5,6,7,8,9],[13,14,17,19,20,21,7,9]], + [1,14,19,1,3,2,3,0,[10,13,22,23,26,27,28,3,4,5,6,8,9],[15,17,18,2,20,6,8,9]], + [1,14,19,6,1,5,3,0,[10,11,13,22,25,26,4,5,7,8,9],[10,13,17,2,20,5,6,9]], + [1,14,19,6,4,4,3,0,[10,13,17,18,22,23,26,27,4,9,5],[1,13,14,17,18,20,3,21,7,8,9]], + [1,12,20,6,3,4,2,0,[10,13,14,17,18,22,23,25,26,27,29,9],[13,14,16,17,20,3,8,7,9]], + [1,14,19,1,3,3,3,0,[10,11,13,17,2,22,23,26,27,29,3,4,8,9],[1,10,13,14,15,17,18,20,5,21,7,8,9,25]], + [1,14,20,1,2,5,3,0,[12,13,17,22,23,26,28,3,4,8,9,27],[10,13,17,18,20,5,6,9,22]], + [1,14,19,1,2,3,3,0,[13,17,22,23,26,27,28,29,3,4,8,19],[13,17,18,20,6,7,8,9]], + [1,14,18,6,1,3,3,0,[12,13,15,2,22,23,26,27,28,4,9],[13,17,6,9]], + [1,14,19,5,3,4,3,0,[13,2,26,27,28,3,4,5,6],[1,10,13,15,17,18,2,20,3,21,7]], + [1,14,18,6,3,3,3,0,[13,2,22,23,26,27,8,3,4,5,9],[1,13,17,18,19,2,20,6,8,9,22]], + [1,14,19,6,4,3,2,0,[10,13,17,18,22,23,25,26,27,29],[13,14,16,17,3,7,8]], + [1,14,18,6,3,3,3,0,[13,22,23,26,27,28,3,4,5,7,8,9],[13,17,18,2,20,3,5,6,9]], + [1,14,20,1,3,2,3,0,[10,13,15,17,19,2,22,23,24,26,27,3,4,8,9],[13,17,18,20,6,7,8,9]], + [1,14,20,6,3,1,3,0,[10,13,16,2,22,23,26,27,3,4,6,8,9],[13,17,20,5,6,9]], + [1,14,19,3,3,3,3,0,[10,12,13,18,21,22,23,24,26,27,29,3,4,8,9],[1,10,17,20,6,8,9]], + [1,14,19,2,3,1,3,0,[12,13,17,2,22,23,24,26,27,28,4,8,9,19],[1,13,17,18,19,20,6,9]], + [1,14,19,5,4,2,3,0,[10,11,13,17,2,21,3,22,23,24,25,26,27,5,6,8,9],[13,17,20,3,21,9]], + [1,14,19,6,2,3,3,0,[13,22,23,26,27,28,3,4,5,7,8,9],[13,17,18,20,5,6,9]], + [1,14,20,6,3,2,3,0,[10,12,13,19,2,22,23,24,25,1,26,27,28,3,4,8,9],[10,13,17,18,20,3,5,6,7,8,9]], + [1,14,19,5,3,4,3,0,[12,13,2,26,27,28,3,4,5,6,8,9],[10,13,17,18,2,20,3,21,7]], + [1,14,19,6,3,4,3,0,[13,16,22,23,26,27,28,3,5,7,8,9],[10,13,17,18,19,2,20,5,6,7,8,9]], + [1,14,19,6,3,2,3,0,[10,13,22,23,24,25,26,27,3,4,7,8,9],[1,13,17,20,5,21,9,23]], + [1,14,18,6,2,2,3,0,[11,13,2,22,23,26,27,3,4,8,9],[1,13,14,15,17,18,19,2,20,6,7,8,5]], + [1,14,19,6,2,3,3,0,[13,17,2,22,23,26,27,4,5,7,9],[13,14,16,17,9,22]], + [1,14,19,8,3,2,3,0,[13,18,22,23,24,27,28,3,4,5,8,9],[15,16,17,18,19,2,20,6,9]], + [1,14,19,1,3,4,2,0,[13,17,18,22,23,26,27,29,9,11,8],[13,17,20,3,21,7,8,9,6]], + [1,15,18,6,4,4,1,0,[13,17,22,25,27,29],[14,16,3,7,8]], + [1,14,18,6,3,1,3,0,[12,13,16,17,18,19,2,22,23,26,27,3,4,9],[13,17,20,3,6,9]], + [1,14,19,6,2,3,2,0,[13,2,22,23,26,27,9],[13,16,17,9]], + [1,14,19,8,3,4,3,0,[13,22,26,5,6,7,8,9],[13,15,17,18,19,2,20,6,9]], + [1,14,20,1,2,2,3,0,[11,13,22,23,26,27,28,29,3,4,9],[13,17,18,20,6,9]], + [1,14,19,6,3,2,2,0,[10,13,17,18,22,23,24,25,26,27,9],[1,13,14,16,17,20,3,6,7,8,9]], + [1,14,18,6,3,5,3,0,[11,13,18,22,23,26,27,4,5,2],[1,10,13,17,2,20,5,6,9,22]], + [1,14,19,1,3,4,2,0,[17,22,23,26,27,13],[13,16,17,18,2,20,11,6,7,8,9]], + [1,15,18,6,1,2,3,0,[13,15,2,22,23,26,3,4,5,6,9],[1,13,17,20,6,9,5]], + [1,14,20,6,3,2,3,0,[10,11,24,13,2,22,23,26,27,3,4,5,7,8,9],[1,10,13,17,18,19,2,20,5,6,7,8,9,23]], + [1,14,19,4,4,4,3,0,[10,13,17,18,2,22,26,27,28,3,4,5,6,8,9,23],[14,15,17,19,2,20,3,21,7,9,10]], + [1,14,19,5,4,3,3,0,[10,13,17,21,22,23,26,27,5,8,9],[10,13,17,18,19,2,20,21,7,9]], + [1,14,19,7,4,4,3,0,[13,17,2,22,23,26,27,18,28,3,4,5,7,9],[10,13,17,18,19,2,20,3,21,9]], + [1,12,20,6,2,2,2,0,[10,11,13,17,18,22,23,25,26,27,29,8,9],[1,13,16,17,3,6,8,9,24]], + [1,14,18,6,3,3,1,0,[13,16,17,22,25,26,27,9],[13,16,17,20,21,8]], + [1,14,19,6,2,5,3,0,[13,17,2,22,23,26,27,4,5,9],[10,13,17,2,20,5,6,9]], + [1,14,19,6,2,3,3,0,[1,13,17,22,23,26,27,28,4,6,9],[13,17,18,20,6,9]], + [1,14,19,4,3,2,3,0,[12,13,17,19,2,22,23,24,26,27,28,3,4,5,8,9],[13,15,17,19,20,21,9,5]], + [1,14,19,5,4,2,3,0,[10,17,2,21,22,23,24,26,27,28,3,4,6,8,9],[1,10,13,14,17,19,20,3,21,7,8,9]], + [1,14,19,3,4,3,3,0,[10,12,13,2,21,22,23,26,27,4,7,8,9],[1,13,17,20,6,8,9]], + [1,14,19,5,3,2,1,0,[13,17,19,21,22,23,24,25,26,27,8,9],[1,14,17,3,6,8,13]], + [1,14,19,2,3,1,3,0,[10,11,13,17,18,19,22,24,26,27,4,7,8,9],[13,17,19,20,3,6,9]], + [1,14,19,6,2,3,3,0,[13,2,22,23,26,27,4,5,9],[1,13,17,18,20,6,9,24]], + [1,14,18,6,2,2,3,0,[11,13,22,23,24,25,26,27,3,4,5,6,8,9],[1,13,17,20,3,5,6,9]], + [1,14,18,1,2,2,3,0,[1,11,13,15,17,2,22,23,26,27,4,9],[1,13,17,18,20,6,9]], + [1,14,19,2,3,4,3,0,[10,13,22,26,27,28,29,3,4,5,6,7,8,9,36],[1,13,15,17,18,19,20,5,6,7,8,9]], + [1,14,19,6,2,1,2,0,[13,17,21,22,26,27,3,8,9],[13,17,20,6]], + [1,15,18,6,4,3,1,0,[10,13,16,17,20,22,25,27],[16,17,3,6,7,8,9]], + [1,14,19,4,3,5,3,0,[10,11,13,17,22,24,26,27,28,3,4,5,6,7,8,9],[10,13,15,17,2,20,3,6,7,9]], + [1,14,20,6,3,1,2,0,[10,11,17,18,19,22,23,25,26,27,29,8,9],[1,10,13,14,16,17,3,4,6,7,8,9]], + [1,15,18,6,3,3,1,0,[13,16,22,26,27,9,23],[13,16,17,20,21,6]], + [1,15,18,1,3,4,3,0,[10,13,17,2,22,23,25,26,27,28,29,4,9,12],[13,17,18,20,6,9,5]], + [1,21,25,6,2,1,4,0,[30,31,34,35],[6,3]], + [1,21,25,6,3,4,4,0,[30,31,34,35],[6,3]], + [1,20,25,1,3,3,3,0,[9,10,13,17,18,22,23,26,27,29],[20,18,17,13,8,7,6,5,4]], + [1,21,25,6,2,5,4,0,[30,31,34,35],[6,3]], + [1,21,25,6,3,3,4,0,[30,31,96,79,34,35],[6,7]], + [1,21,25,1,3,4,3,0,[4,9,13,17,18,22,23,25,26,27],[21,20,17,12,11,9,3,2]], + [1,21,25,6,2,3,4,0,[30,34],[6,3]], + [1,22,25,1,3,4,3,0,[7,9,12,13,22,23,27,28],[20,17,13,9,7,6,2]], + [1,21,25,6,3,3,4,0,[30,31,34,35],[6]], + [1,20,25,5,4,2,3,0,[2,3,5,8,9,12,13,17,18,21,22,23,24,26,27,28],[21,20,19,18,17,13,10,9,8,7,5,1]], + [1,20,25,8,4,4,3,0,[2,3,4,5,6,9,13,22,26,28],[21,20,19,18,17,15,9]], + [1,24,25,6,2,2,3,0,[2,3,4,5,6,8,9,11,13,22,23,26,27,29],[20,18,17,13,9,8,7,6]], + [1,20,25,4,2,4,3,0,[2,3,5,6,7,8,9,12,13,17,22,26,28],[20,19,17,15,13,10,9,6,5,3,2]], + [1,20,25,2,3,5,3,0,[2,3,5,6,7,8,9,10,13,17,22,26,27,28],[20,19,18,17,13,10,9,7,6,1]], + [1,20,25,4,3,3,3,0,[2,3,4,6,8,9,13,17,22,23,24,26,27],[20,19,17,13,10,9,7,6,5,3]], + [1,20,25,1,3,2,3,0,[3,4,5,6,8,9,10,13,22,23,26,27,28],[20,18,17,15,9,8,6,2]], + [1,21,25,2,3,3,4,0,[30,31,34,35],[6,3,7]], + [1,21,25,6,3,2,4,0,[30,34],[6,3]], + [1,20,25,5,3,2,3,0,[8,9,10,11,13,16,17,21,22,23,24,26,27],[20,19,18,17,13,10,9,7,6,5,1]], + [1,20,25,2,2,5,4,0,[30,31,34],[6,3,7]], + [1,20,25,4,4,4,3,0,[2,3,4,5,6,8,9,10,13,22,23,26,27],[21,20,19,17,14,13,9,7]], + [1,24,25,6,3,3,3,0,[2,3,4,8,9,11,13,15,22,23,26,27,28],[20,18,17,13,9,6,1]], + [1,22,25,1,4,4,3,0,[4,11,13,18,22,23,27,28],[21,20,17,9]], + [1,21,25,6,2,1,4,0,[30,34,35],[6,3]], + [1,20,25,6,4,4,3,0,[9,10,13,17,18,22,23,26,27],[21,20,18,17,14,13,9,8,7,3,1]], + [1,24,25,6,3,4,2,0,[9,10,13,17,18,22,23,25,26,27,29],[20,17,16,14,13,9,8,7,3]], + [1,20,25,1,3,3,3,0,[2,3,4,8,9,10,11,13,17,22,23,26,27,29],[21,20,18,17,15,14,13,10,9,8,7,5,1]], + [1,20,25,1,2,3,3,0,[3,4,8,11,13,17,22,23,26,27,28,29],[20,18,17,13,9,8,7,6]], + [1,20,25,5,3,4,3,0,[2,3,4,5,6,13,26,27,28],[21,20,18,17,15,13,10,3,2,1]], + [1,20,25,6,4,3,2,0,[10,13,17,18,22,23,25,26,27,29],[17,16,14,13,8,7,3]], + [1,21,25,6,2,1,4,0,[30,34,35],[6,3]], + [1,21,25,1,3,2,3,0,[2,3,4,8,9,10,13,15,17,19,22,23,24,26,27],[20,18,17,13,8,9,7,6]], + [1,20,25,2,3,3,3,0,[11,13,2,21,22,23,24,26,27,28,29,3,4,5,8,9],[1,13,17,18,19,2,20,3,6,7,9]], + [1,24,25,6,3,1,3,0,[2,3,4,6,8,9,10,13,16,22,23,26,27],[20,17,13,9,6,5]], + [1,20,25,3,3,3,3,0,[3,4,8,9,10,12,13,18,21,22,23,24,26,27,29],[20,17,10,9,8,6,1]], + [1,20,25,2,3,1,3,0,[2,4,8,9,12,13,17,22,23,24,26,27,28],[20,19,18,17,13,9,6,1]], + [1,20,25,5,4,2,3,0,[2,3,5,6,8,9,10,11,13,17,21,22,23,24,25,26,27],[21,20,17,13,9,3]], + [1,24,25,6,3,2,3,0,[2,3,4,8,9,10,13,19,22,23,24,25,26,27,28],[20,18,17,13,10,9,8,7,6,5,3]], + [1,21,25,6,2,1,4,0,[30,31,33,34],[6]], + [1,20,25,8,3,2,3,0,[3,4,5,8,9,13,17,18,22,23,24,27,28],[20,19,18,17,15,9,6]], + [1,21,25,6,4,4,4,0,[30,31,27,10,34],[6,3,7]], + [1,21,25,6,4,4,4,0,[30,31,34],[6,3,7]], + [1,20,25,1,3,4,2,0,[9,13,17,18,22,23,26,27,29],[20,17,13,9,8,7,6,3]], + [1,20,25,7,4,4,3,0,[2,3,4,5,7,9,13,17,18,22,23,26,27,28],[21,20,19,18,17,13,10,9,3,2]], + [1,21,25,6,4,4,4,0,[30,31,34],[6,7]], + [1,21,25,6,3,3,4,0,[30,31,35],[6,3]], + [1,20,25,8,3,4,3,0,[5,6,7,8,9,13,22,26,28],[20,19,18,17,15,13,9,6,2]], + [1,21,25,1,2,2,3,0,[3,4,9,11,13,22,23,26,27,28,29],[20,18,17,13,9,6]], + [1,20,25,6,3,2,2,0,[9,10,13,17,18,22,23,25,26,27],[20,17,16,14,13,9,8,7,6,3,1]], + [1,24,25,6,3,2,3,0,[2,3,4,5,7,8,9,10,11,13,22,23,24,26,27],[20,19,18,17,13,10,9,8,7,6,5,2,1]], + [1,20,25,2,3,5,3,0,[29,24,13,4,5,22,23,16,2,28,9,10],[7,13,5,1,15,3,9,6,17]], + [1,20,25,4,3,2,3,0,[2,3,4,5,6,8,9,12,13,17,19,22,23,24,26,27,28],[20,19,17,13,9]], + [1,20,25,5,4,3,3,0,[3,4,5,8,9,10,13,17,21,22,23,26,27],[21,20,19,18,17,13,10,9,7,2]], + [1,20,25,4,4,4,3,0,[2,3,4,5,6,8,9,10,13,17,18,22,23,26,27,28],[21,20,19,17,15,14,9,7,3,2]], + [1,21,25,6,3,3,4,0,[30,31,10,34],[6,3,7]], + [1,20,25,6,2,3,3,0,[1,4,6,9,13,17,22,23,26,27,28],[20,18,17,13,9,6]], + [1,21,25,6,2,2,2,0,[8,9,10,11,13,17,18,22,23,25,26,27,29],[17,16,13,9,8,6,3,1]], + [1,21,25,6,3,4,4,0,[30,32,33,27,34],[6,7]], + [1,20,25,3,4,3,3,0,[2,4,7,8,9,10,12,13,21,22,23,26,27],[20,17,13,9,8,6,1]], + [1,20,25,6,2,3,3,0,[],[20,18,17,13,9,6,1]], + [1,20,25,2,3,1,3,0,[4,7,8,9,10,11,13,17,18,19,22,24,26,27],[20,19,17,13,9,6,3]], + [1,20,25,5,3,2,4,0,[30,31,96],[6,3,7]], + [1,20,25,2,3,4,3,0,[3,4,5,6,7,8,9,10,13,22,26,27,28,29],[20,19,18,17,13,9,8,7,6,5,1]], + [1,21,25,6,3,3,4,0,[30,31,27,10,34],[6,7]], + [1,21,25,4,3,2,3,0,[3,4,5,6,8,9,10,11,13,18,19,22,23,26,27],[20,17,13,9]], + [1,21,25,6,4,3,4,0,[30,31,27,10,35],[6,7]], + [1,21,25,6,2,2,4,0,[30,34],[6,3]], + [1,24,25,6,2,1,2,0,[3,8,9,13,17,21,22,26,27],[20,17,13,6]], + [1,20,25,4,3,5,3,0,[3,4,5,6,7,8,9,10,11,13,17,22,24,26,27,28],[20,17,15,13,10,9,7,6,3,2]], + [1,20,26,6,4,3,4,0,[30,31,27,10,34,35],[6,3,7]], + [1,21,25,6,2,3,4,0,[30,33,34],[6]], + [1,21,25,6,3,1,2,0,[8,9,10,11,17,18,19,22,23,25,26,27,29],[17,16,14,13,10,9,8,7,6,4,3,1]], + [1,21,25,6,4,4,4,0,[30,31,10,34,35],[6,7]], + [1,21,25,6,3,2,4,0,[30,31,33,34],[6,3]], + [1,21,26,6,3,5,4,0,[30,31],[6,3]], + [1,21,25,6,2,1,4,0,[30,34,35],[6,3]], + [1,21,25,6,3,3,4,0,[30,34],[6]], + [1,20,25,8,2,2,3,0,[3,4,5,6,8,9,13,16,21,22,23,24,26,27],[20,17,15,9,6,3]], + [1,20,25,5,3,4,3,0,[2,3,4,5,6,8,9,12,13,26,27,28],[21,20,18,17,13,10,3,2]], + [1,20,25,5,4,2,3,0,[3,4,6,8,9,10,17,21,22,23,24,26,27,28],[21,20,19,17,14,13,10,9,8,7,3,1]], + [1,13,19,6,2,3,3,0,[2,3,13,22,19,8,9,12,27],[9,6,17,20]], + [1,15,18,2,3,3,1,0,[25,24,13,16,19,8,9,10,17,22,29,23],[16,8,3,21,17,19]], + [1,14,19,2,3,3,3,0,[13,2,21,22,23,24,26,27,28,29,3,4,5,8,9,17],[1,13,17,18,19,2,20,3,6,7,9]], + [1,15,18,6,4,4,1,0,[29,16,17,22,27,10],[16,8,3,14,7]], + [1,14,20,6,3,4,3,0,[3,4,2,5,13,22,23,27,8,9],[20,7,8,2,9,21,17]], + [1,14,19,2,3,5,3,0,[29,24,13,4,5,22,23,16,2,28,9,10],[7,13,5,1,15,3,9,6,17]], + [1,15,18,6,3,2,1,0,[25,13,22,23,17,29,16,9],[16,21,17,20]], + [1,24,25,6,2,3,3,0,[],[]], + [1,21,25,1,2,5,3,0,[],[]], + [1,21,25,6,3,4,3,0,[],[]] + ]; + + var nbVillages = V.length; + + for (i=0; i<nbVillages; i++) { + if ((((mois == 0) && (1==V[i][0])) || ((mois >= V[i][1]) && (mois <= V[i][2]))) && + ((region == 0) || (region == V[i][3] )) && + ((confort == 0) || (confort == V[i][4] )) && + ((encadrement == 0) || + ((encadrement==3)&&((V[i][5]==1)||(V[i][5]==2)||(V[i][5] == 3))) || + ((encadrement==2)&&((V[i][5]==1)||(V[i][5]==2) )) || + ((encadrement==1)&&(encadrement==V[i][5]) ) || + ((encadrement>3)&&(encadrement==V[i][5]) )) && + ((typeVillage == 0) || (typeVillage == V[i][6] )) && + ((budget == 0) || (budget == V[i][7] ))) { + + bl = 1; + if ((sport1 != 0) || (sport2 != 0) || (sport3 != 0)) { + bl = 0; + liste = V[i][8]; + taille = liste.length; + for (j=0; j<taille; j++) { + if ((sport1 == 0) || ((sport1 != 0) && (sport1 == liste[j]))) { + bl = 1; + break; + } + } + if (bl == 1) { + bl = 0; + for (j=0; j<taille; j++) { + if ((sport2 == 0) || ((sport2 != 0) && (sport2 == liste[j]))) { + bl = 1; + break; + } + } + } + if (bl == 1) { + bl = 0; + for (j=0; j<taille; j++) { + if ((sport3 == 0) || ((sport3 != 0) && (sport3 == liste[j]))) { + bl = 1; + break; + } + } + } + } + if ((bl==1) && ((activite1 != 0) || (activite2 != 0) || (activite3 != 0))) { + bl = 0; + liste = V[i][9]; + taille = liste.length; + for (j=0; j<taille; j++) { + if ((activite1 == 0) || ((activite1 != 0) && (activite1 == liste[j]))) { + bl = 1; + break; + } + } + if (bl == 1) { + bl = 0; + for (j=0; j<taille; j++) { + if ((activite2 == 0) || ((activite2 != 0) && (activite2 == liste[j]))) { + bl = 1; + break; + } + } + } + if (bl == 1) { + bl = 0; + for (j=0; j<taille; j++) { + if ((activite3 == 0) || ((activite3 != 0) && (activite3 == liste[j]))) { + bl = 1; + break; + } + } + } + } + if (1 == bl) { + ret++; + } + } + } +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-96128-n.js b/js/src/tests/js1_5/Regress/regress-96128-n.js new file mode 100644 index 000000000..1d503e881 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-96128-n.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 29 Aug 2001 + * + * SUMMARY: Negative test that JS infinite recursion protection works. + * We expect the code here to fail (i.e. exit code 3), but NOT crash. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96128 + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 96128; +var summary = 'Testing that JS infinite recursion protection works'; + + +function objRecurse() +{ + /* + * jband: + * + * Causes a stack overflow crash in debug builds of both the browser + * and the shell. In the release builds this is safely caught by the + * "too much recursion" mechanism. If I remove the 'new' from the code below + * this is safely caught in both debug and release builds. The 'new' causes a + * lookup for the Constructor name and seems to (at least) double the number + * of items on the C stack for the given interpLevel depth. + */ + return new objRecurse(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // we expect this to fail (exit code 3), but NOT crash. - + var obj = new objRecurse(); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Regress/regress-96526-001.js b/js/src/tests/js1_5/Regress/regress-96526-001.js new file mode 100644 index 000000000..d565faffd --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-96526-001.js @@ -0,0 +1,503 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 04 Sep 2002 + * SUMMARY: Just seeing that we don't crash when compiling this script - + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526 + * + */ +//----------------------------------------------------------------------------- +printBugNumber(96526); +printStatus("Just seeing that we don't crash when compiling this script -"); + + +/* + * Function definition with lots of branches, from http://www.newyankee.com + */ +function setaction(jumpto) +{ + if (jumpto == 0) window.location = "http://www.newyankee.com/GetYankees2.cgi?1.jpg"; + else if (jumpto == [0]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ImageName"; + else if (jumpto == [1]) window.location = "http://www.newyankee.com/GetYankees2.cgi?1.jpg"; + else if (jumpto == [2]) window.location = "http://www.newyankee.com/GetYankees2.cgi?arsrferguson.jpg"; + else if (jumpto == [3]) window.location = "http://www.newyankee.com/GetYankees2.cgi?akjamesmartin.jpg"; + else if (jumpto == [4]) window.location = "http://www.newyankee.com/GetYankees2.cgi?aldaverackett.jpg"; + else if (jumpto == [5]) window.location = "http://www.newyankee.com/GetYankees2.cgi?alericbrasher.jpg"; + else if (jumpto == [6]) window.location = "http://www.newyankee.com/GetYankees2.cgi?algeorgewatkins.jpg"; + else if (jumpto == [7]) window.location = "http://www.newyankee.com/GetYankees2.cgi?altoddcruise.jpg"; + else if (jumpto == [8]) window.location = "http://www.newyankee.com/GetYankees2.cgi?arkevinc.jpg"; + else if (jumpto == [9]) window.location = "http://www.newyankee.com/GetYankees2.cgi?arpaulmoore.jpg"; + else if (jumpto == [10]) window.location = "http://www.newyankee.com/GetYankees2.cgi?auphillaird.jpg"; + else if (jumpto == [11]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azbillhensley.jpg"; + else if (jumpto == [12]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azcharleshollandjr.jpg"; + else if (jumpto == [13]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azdaveholland.jpg"; + else if (jumpto == [14]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azdavidholland.jpg"; + else if (jumpto == [15]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azdonaldvogt.jpg"; + else if (jumpto == [16]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azernestortega.jpg"; + else if (jumpto == [17]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azjeromekeller.jpg"; + else if (jumpto == [18]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azjimpegfulton.jpg"; + else if (jumpto == [19]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azjohnbelcher.jpg"; + else if (jumpto == [20]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azmikejordan.jpg"; + else if (jumpto == [21]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azrickemry.jpg"; + else if (jumpto == [22]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azstephensavage.jpg"; + else if (jumpto == [23]) window.location = "http://www.newyankee.com/GetYankees2.cgi?azsteveferguson.jpg"; + else if (jumpto == [24]) window.location = "http://www.newyankee.com/GetYankees2.cgi?aztjhorrall.jpg"; + else if (jumpto == [25]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cabillmeiners.jpg"; + else if (jumpto == [26]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cabobhadley.jpg"; + else if (jumpto == [27]) window.location = "http://www.newyankee.com/GetYankees2.cgi?caboblennox.jpg"; + else if (jumpto == [28]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cabryanshurtz.jpg"; + else if (jumpto == [29]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cabyroncleveland.jpg"; + else if (jumpto == [30]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cacesarjimenez.jpg"; + else if (jumpto == [31]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadalekirstine.jpg"; + else if (jumpto == [32]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadavidlgoeffrion.jpg"; + else if (jumpto == [33]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadennisnocerini.jpg"; + else if (jumpto == [34]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadianemason.jpg"; + else if (jumpto == [35]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadominicpieranunzio.jpg"; + else if (jumpto == [36]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadonaldmotter.jpg"; + else if (jumpto == [37]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cadoncroner.jpg"; + else if (jumpto == [38]) window.location = "http://www.newyankee.com/GetYankees2.cgi?caelizabethwright.jpg"; + else if (jumpto == [39]) window.location = "http://www.newyankee.com/GetYankees2.cgi?caericlew.jpg"; + else if (jumpto == [40]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cafrancissmith.jpg"; + else if (jumpto == [41]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cafranklombano.jpg"; + else if (jumpto == [42]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cajaredweaver.jpg"; + else if (jumpto == [43]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cajerrythompson.jpg"; + else if (jumpto == [44]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cajimjanssen"; + else if (jumpto == [45]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cajohncopolillo.jpg"; + else if (jumpto == [46]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cajohnmessick.jpg"; + else if (jumpto == [47]) window.location = "http://www.newyankee.com/GetYankees2.cgi?calaynedicker.jpg"; + else if (jumpto == [48]) window.location = "http://www.newyankee.com/GetYankees2.cgi?caleeannrucker.jpg"; + else if (jumpto == [49]) window.location = "http://www.newyankee.com/GetYankees2.cgi?camathewsscharch.jpg"; + else if (jumpto == [50]) window.location = "http://www.newyankee.com/GetYankees2.cgi?camikedunn.jpg"; + else if (jumpto == [51]) window.location = "http://www.newyankee.com/GetYankees2.cgi?camikeshay.jpg"; + else if (jumpto == [52]) window.location = "http://www.newyankee.com/GetYankees2.cgi?camikeshepherd.jpg"; + else if (jumpto == [53]) window.location = "http://www.newyankee.com/GetYankees2.cgi?caphillipfreer.jpg"; + else if (jumpto == [54]) window.location = "http://www.newyankee.com/GetYankees2.cgi?carandy.jpg"; + else if (jumpto == [55]) window.location = "http://www.newyankee.com/GetYankees2.cgi?carichardwilliams.jpg"; + else if (jumpto == [56]) window.location = "http://www.newyankee.com/GetYankees2.cgi?carickgruen.jpg"; + else if (jumpto == [57]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cascottbartsch.jpg"; + else if (jumpto == [58]) window.location = "http://www.newyankee.com/GetYankees2.cgi?castevestrapac.jpg"; + else if (jumpto == [59]) window.location = "http://www.newyankee.com/GetYankees2.cgi?catimwest.jpg"; + else if (jumpto == [60]) window.location = "http://www.newyankee.com/GetYankees2.cgi?catomrietveld.jpg"; + else if (jumpto == [61]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnalainpaquette.jpg"; + else if (jumpto == [62]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnalanhill.jpg"; + else if (jumpto == [63]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnalguerette.jpg"; + else if (jumpto == [64]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnbrianhogg.jpg"; + else if (jumpto == [65]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnbrucebeard.jpg"; + else if (jumpto == [66]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cncraigdavey.jpg"; + else if (jumpto == [67]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cndanielpattison.jpg"; + else if (jumpto == [68]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cndenisstjean.jpg"; + else if (jumpto == [69]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnglenngray.jpg"; + else if (jumpto == [70]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnjeansebastienduguay.jpg"; + else if (jumpto == [71]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnjohnbritz.jpg"; + else if (jumpto == [72]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnkevinmclean.jpg"; + else if (jumpto == [73]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnmarcandrecartier.jpg"; + else if (jumpto == [74]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnmarcleblanc.jpg"; + else if (jumpto == [75]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnmatthewgiles.jpg"; + else if (jumpto == [76]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnmichelrauzon.jpg"; + else if (jumpto == [77]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnpierrelalonde.jpg"; + else if (jumpto == [78]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnraytyson.jpg"; + else if (jumpto == [79]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnrichardboucher.jpg"; + else if (jumpto == [80]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnrodbuike.jpg"; + else if (jumpto == [81]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnscottpitkeathly.jpg"; + else if (jumpto == [82]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnshawndavis.jpg"; + else if (jumpto == [83]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnstephanepelletier.jpg"; + else if (jumpto == [84]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cntodddesroches.jpg"; + else if (jumpto == [85]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cntonyharnum.jpg"; + else if (jumpto == [86]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cnwayneconabree.jpg"; + else if (jumpto == [87]) window.location = "http://www.newyankee.com/GetYankees2.cgi?codavidjbarber.jpg"; + else if (jumpto == [88]) window.location = "http://www.newyankee.com/GetYankees2.cgi?codonrandquist.jpg"; + else if (jumpto == [89]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cojeffpalese.jpg"; + else if (jumpto == [90]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cojohnlowell.jpg"; + else if (jumpto == [91]) window.location = "http://www.newyankee.com/GetYankees2.cgi?cotroytorgerson.jpg"; + else if (jumpto == [92]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ctgerrygranatowski.jpg"; + else if (jumpto == [93]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ctjasonklein.jpg"; + else if (jumpto == [94]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ctkevinkiss.jpg"; + else if (jumpto == [95]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ctmikekennedy.jpg"; + else if (jumpto == [96]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flalancanfield.jpg"; + else if (jumpto == [97]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flalbertgonzalez.jpg"; + else if (jumpto == [98]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flbruceloy.jpg"; + else if (jumpto == [99]) window.location = "http://www.newyankee.com/GetYankees2.cgi?fldandevault.jpg"; + else if (jumpto == [100]) window.location = "http://www.newyankee.com/GetYankees2.cgi?fldonstclair.jpg"; + else if (jumpto == [101]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flernestbonnell.jpg"; + else if (jumpto == [102]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flgeorgebarg.jpg"; + else if (jumpto == [103]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flgregslavinski.jpg"; + else if (jumpto == [104]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flgregwaters.jpg"; + else if (jumpto == [105]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flharoldmiller.jpg"; + else if (jumpto == [106]) window.location = "http://www.newyankee.com/GetYankees2.cgi?fljackwelch.jpg"; + else if (jumpto == [107]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flmichaelostrowski.jpg"; + else if (jumpto == [108]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flpauldoman.jpg"; + else if (jumpto == [109]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flpaulsessions.jpg"; + else if (jumpto == [110]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flrandymys.jpg"; + else if (jumpto == [111]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flraysarnowski.jpg"; + else if (jumpto == [112]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flrobertcahill.jpg"; + else if (jumpto == [113]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flstevemorrison.jpg"; + else if (jumpto == [114]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flstevezellner.jpg"; + else if (jumpto == [115]) window.location = "http://www.newyankee.com/GetYankees2.cgi?flterryjennings.jpg"; + else if (jumpto == [116]) window.location = "http://www.newyankee.com/GetYankees2.cgi?fltimmcwilliams.jpg"; + else if (jumpto == [117]) window.location = "http://www.newyankee.com/GetYankees2.cgi?fltomstellhorn.jpg"; + else if (jumpto == [118]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gabobkoch.jpg"; + else if (jumpto == [119]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gabrucekinney.jpg"; + else if (jumpto == [120]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gadickbesemer.jpg"; + else if (jumpto == [121]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gajackclunen.jpg"; + else if (jumpto == [122]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gajayhart.jpg"; + else if (jumpto == [123]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gajjgeller.jpg"; + else if (jumpto == [124]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gakeithlacey.jpg"; + else if (jumpto == [125]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gamargieminutello.jpg"; + else if (jumpto == [126]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gamarvinearnest.jpg"; + else if (jumpto == [127]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gamikeschwarz.jpg"; + else if (jumpto == [128]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gamikeyee.jpg"; + else if (jumpto == [129]) window.location = "http://www.newyankee.com/GetYankees2.cgi?garickdubree.jpg"; + else if (jumpto == [130]) window.location = "http://www.newyankee.com/GetYankees2.cgi?garobimartin.jpg"; + else if (jumpto == [131]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gastevewaddell.jpg"; + else if (jumpto == [132]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gathorwiggins.jpg"; + else if (jumpto == [133]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gawadewylie.jpg"; + else if (jumpto == [134]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gawaynerobinson.jpg"; + else if (jumpto == [135]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gepaulwestbury.jpg"; + else if (jumpto == [136]) window.location = "http://www.newyankee.com/GetYankees2.cgi?grstewartcwolfe.jpg"; + else if (jumpto == [137]) window.location = "http://www.newyankee.com/GetYankees2.cgi?gugregmesa.jpg"; + else if (jumpto == [138]) window.location = "http://www.newyankee.com/GetYankees2.cgi?hibriantokunaga.jpg"; + else if (jumpto == [139]) window.location = "http://www.newyankee.com/GetYankees2.cgi?himatthewgrady.jpg"; + else if (jumpto == [140]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iabobparnell.jpg"; + else if (jumpto == [141]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iadougleonard.jpg"; + else if (jumpto == [142]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iajayharmon.jpg"; + else if (jumpto == [143]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iajohnbevier.jpg"; + else if (jumpto == [144]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iamartywitt.jpg"; + else if (jumpto == [145]) window.location = "http://www.newyankee.com/GetYankees2.cgi?idjasonbartschi.jpg"; + else if (jumpto == [146]) window.location = "http://www.newyankee.com/GetYankees2.cgi?idkellyklaas.jpg"; + else if (jumpto == [147]) window.location = "http://www.newyankee.com/GetYankees2.cgi?idmikegagnon.jpg"; + else if (jumpto == [148]) window.location = "http://www.newyankee.com/GetYankees2.cgi?idrennieheuer.jpg"; + else if (jumpto == [149]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilbenshakman.jpg"; + else if (jumpto == [150]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilcraigstocks.jpg"; + else if (jumpto == [151]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ildaverubini.jpg"; + else if (jumpto == [152]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iledpepin.jpg"; + else if (jumpto == [153]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilfredkirpec.jpg"; + else if (jumpto == [154]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iljoecreed.jpg"; + else if (jumpto == [155]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iljohnknuth.jpg"; + else if (jumpto == [156]) window.location = "http://www.newyankee.com/GetYankees2.cgi?iljoshhill.jpg"; + else if (jumpto == [157]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilkeithrichard.jpg"; + else if (jumpto == [158]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilkrystleweber.jpg"; + else if (jumpto == [159]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilmattmusich.jpg"; + else if (jumpto == [160]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilmichaellane.jpg"; + else if (jumpto == [161]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilrodneyschwandt.jpg"; + else if (jumpto == [162]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilrogeraukerman.jpg"; + else if (jumpto == [163]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilscottbreeden.jpg"; + else if (jumpto == [164]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilscottgerami.jpg"; + else if (jumpto == [165]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilsteveritt.jpg"; + else if (jumpto == [166]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilthomasfollin.jpg"; + else if (jumpto == [167]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ilwaynesmith.jpg"; + else if (jumpto == [168]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inallenwimberly.jpg"; + else if (jumpto == [169]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inbutchmyers.jpg"; + else if (jumpto == [170]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inderrickbentley.jpg"; + else if (jumpto == [171]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inedmeissler.jpg"; + else if (jumpto == [172]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ingarymartin.jpg"; + else if (jumpto == [173]) window.location = "http://www.newyankee.com/GetYankees2.cgi?injasondavis.jpg"; + else if (jumpto == [174]) window.location = "http://www.newyankee.com/GetYankees2.cgi?injeffjones.jpg"; + else if (jumpto == [175]) window.location = "http://www.newyankee.com/GetYankees2.cgi?injeffwilliams.jpg"; + else if (jumpto == [176]) window.location = "http://www.newyankee.com/GetYankees2.cgi?injpreslyharrington.jpg"; + else if (jumpto == [177]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inrichardlouden.jpg"; + else if (jumpto == [178]) window.location = "http://www.newyankee.com/GetYankees2.cgi?inronmorrell.jpg"; + else if (jumpto == [179]) window.location = "http://www.newyankee.com/GetYankees2.cgi?insearsweaver.jpg"; + else if (jumpto == [180]) window.location = "http://www.newyankee.com/GetYankees2.cgi?irpaullaverty.jpg"; + else if (jumpto == [181]) window.location = "http://www.newyankee.com/GetYankees2.cgi?irseamusmcbride.jpg"; + else if (jumpto == [182]) window.location = "http://www.newyankee.com/GetYankees2.cgi?isazrielmorag.jpg"; + else if (jumpto == [183]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ksalankreifels.jpg"; + else if (jumpto == [184]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ksbrianbudden.jpg"; + else if (jumpto == [185]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ksgarypahls.jpg"; + else if (jumpto == [186]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ksmikefarnet.jpg"; + else if (jumpto == [187]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ksmikethomas.jpg"; + else if (jumpto == [188]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kstomzillig.jpg"; + else if (jumpto == [189]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kybillyandrews.jpg"; + else if (jumpto == [190]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kydaveryno.jpg"; + else if (jumpto == [191]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kygreglaramore.jpg"; + else if (jumpto == [192]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kywilliamanderson.jpg"; + else if (jumpto == [193]) window.location = "http://www.newyankee.com/GetYankees2.cgi?kyzachschuyler.jpg"; + else if (jumpto == [194]) window.location = "http://www.newyankee.com/GetYankees2.cgi?laadriankliebert.jpg"; + else if (jumpto == [195]) window.location = "http://www.newyankee.com/GetYankees2.cgi?labarryhumphus.jpg"; + else if (jumpto == [196]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ladennisanders.jpg"; + else if (jumpto == [197]) window.location = "http://www.newyankee.com/GetYankees2.cgi?larichardeckert.jpg"; + else if (jumpto == [198]) window.location = "http://www.newyankee.com/GetYankees2.cgi?laronjames.jpg"; + else if (jumpto == [199]) window.location = "http://www.newyankee.com/GetYankees2.cgi?lasheldonstutes.jpg"; + else if (jumpto == [200]) window.location = "http://www.newyankee.com/GetYankees2.cgi?lastephenstarbuck.jpg"; + else if (jumpto == [201]) window.location = "http://www.newyankee.com/GetYankees2.cgi?latroyestonich.jpg"; + else if (jumpto == [202]) window.location = "http://www.newyankee.com/GetYankees2.cgi?lavaughntrosclair.jpg"; + else if (jumpto == [203]) window.location = "http://www.newyankee.com/GetYankees2.cgi?maalexbrown.jpg"; + else if (jumpto == [204]) window.location = "http://www.newyankee.com/GetYankees2.cgi?maalwencl.jpg"; + else if (jumpto == [205]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mabrentmills.jpg"; + else if (jumpto == [206]) window.location = "http://www.newyankee.com/GetYankees2.cgi?madangodziff.jpg"; + else if (jumpto == [207]) window.location = "http://www.newyankee.com/GetYankees2.cgi?madanielwilusz.jpg"; + else if (jumpto == [208]) window.location = "http://www.newyankee.com/GetYankees2.cgi?madavidreis.jpg"; + else if (jumpto == [209]) window.location = "http://www.newyankee.com/GetYankees2.cgi?madougrecko.jpg"; + else if (jumpto == [210]) window.location = "http://www.newyankee.com/GetYankees2.cgi?majasonhaley.jpg"; + else if (jumpto == [211]) window.location = "http://www.newyankee.com/GetYankees2.cgi?maklausjensen.jpg"; + else if (jumpto == [212]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mamikemarland.jpg"; + else if (jumpto == [213]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mapetersilvestre.jpg"; + else if (jumpto == [214]) window.location = "http://www.newyankee.com/GetYankees2.cgi?maraysweeney.jpg"; + else if (jumpto == [215]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdallenbarnett.jpg"; + else if (jumpto == [216]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdcharleswasson.jpg"; + else if (jumpto == [217]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdedbaranowski.jpg"; + else if (jumpto == [218]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdfranktate.jpg"; + else if (jumpto == [219]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdfredschock.jpg"; + else if (jumpto == [220]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdianstjohn.jpg"; + else if (jumpto == [221]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdjordanevans.jpg"; + else if (jumpto == [222]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mdpaulwjones.jpg"; + else if (jumpto == [223]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mestevesandelier.jpg"; + else if (jumpto == [224]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mewilbertrbrown.jpg"; + else if (jumpto == [225]) window.location = "http://www.newyankee.com/GetYankees2.cgi?midavidkeller.jpg"; + else if (jumpto == [226]) window.location = "http://www.newyankee.com/GetYankees2.cgi?migaryvandenberg.jpg"; + else if (jumpto == [227]) window.location = "http://www.newyankee.com/GetYankees2.cgi?migeorgeberlinger.jpg"; + else if (jumpto == [228]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mijamesstapleton.jpg"; + else if (jumpto == [229]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mijerryhaney.jpg"; + else if (jumpto == [230]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mijohnrybarczyk.jpg"; + else if (jumpto == [231]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mikeithvalliere.jpg"; + else if (jumpto == [232]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mikevinpodsiadlik.jpg"; + else if (jumpto == [233]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mimarkandrews.jpg"; + else if (jumpto == [234]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mimikedecaussin.jpg"; + else if (jumpto == [235]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mimikesegorski.jpg"; + else if (jumpto == [236]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mirobertwolgast.jpg"; + else if (jumpto == [237]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mitimothybruner.jpg"; + else if (jumpto == [238]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mitomweaver.jpg"; + else if (jumpto == [239]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnbobgontarek.jpg"; + else if (jumpto == [240]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnbradbuffington.jpg"; + else if (jumpto == [241]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mndavewilson.jpg"; + else if (jumpto == [242]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mngenerajanen.jpg"; + else if (jumpto == [243]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnjohnkempkes.jpg"; + else if (jumpto == [244]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnkevinhurbanis.jpg"; + else if (jumpto == [245]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnmarklansink.jpg"; + else if (jumpto == [246]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnpaulmayer.jpg"; + else if (jumpto == [247]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnpauloman.jpg"; + else if (jumpto == [248]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mnwoodylobnitz.jpg"; + else if (jumpto == [249]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mocurtkempf.jpg"; + else if (jumpto == [250]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mojerryhenry.jpg"; + else if (jumpto == [251]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mojimfinney.jpg"; + else if (jumpto == [252]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mojimrecamper.jpg"; + else if (jumpto == [253]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mojohntimmons.jpg"; + else if (jumpto == [254]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mojohnvaughan.jpg"; + else if (jumpto == [255]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mokenroberts.jpg"; + else if (jumpto == [256]) window.location = "http://www.newyankee.com/GetYankees2.cgi?momacvoss.jpg"; + else if (jumpto == [257]) window.location = "http://www.newyankee.com/GetYankees2.cgi?momarktemmer.jpg"; + else if (jumpto == [258]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mopaulzerjav.jpg"; + else if (jumpto == [259]) window.location = "http://www.newyankee.com/GetYankees2.cgi?morobtigner.jpg"; + else if (jumpto == [260]) window.location = "http://www.newyankee.com/GetYankees2.cgi?motomantrim.jpg"; + else if (jumpto == [261]) window.location = "http://www.newyankee.com/GetYankees2.cgi?mscharleshahn.jpg"; + else if (jumpto == [262]) window.location = "http://www.newyankee.com/GetYankees2.cgi?msjohnjohnson.jpg"; + else if (jumpto == [263]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncandrelopez.jpg"; + else if (jumpto == [264]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncedorisak.jpg"; + else if (jumpto == [265]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncjimisbell.jpg"; + else if (jumpto == [266]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncjohnnydark.jpg"; + else if (jumpto == [267]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nckevinebert.jpg"; + else if (jumpto == [268]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nckevinulmer.jpg"; + else if (jumpto == [269]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncpeteparis.jpg"; + else if (jumpto == [270]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncstevelindsley.jpg"; + else if (jumpto == [271]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nctimsmith.jpg"; + else if (jumpto == [272]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nctonylawrence.jpg"; + else if (jumpto == [273]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ncwyneaston.jpg"; + else if (jumpto == [274]) window.location = "http://www.newyankee.com/GetYankees2.cgi?neberniedevlin.jpg"; + else if (jumpto == [275]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nebrentesmoil.jpg"; + else if (jumpto == [276]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nescottmccullough.jpg"; + else if (jumpto == [277]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhalantarring.jpg"; + else if (jumpto == [278]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhbjmolinari.jpg"; + else if (jumpto == [279]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhbrianmolinari.jpg"; + else if (jumpto == [280]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhdanhorning.jpg"; + else if (jumpto == [281]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhdonblackden.jpg"; + else if (jumpto == [282]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhjimcalandriello.jpg"; + else if (jumpto == [283]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhjohngunterman.jpg"; + else if (jumpto == [284]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nhjohnmagyar.jpg"; + else if (jumpto == [285]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njbudclarity.jpg"; + else if (jumpto == [286]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njcraigjones.jpg"; + else if (jumpto == [287]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njericrowland.jpg"; + else if (jumpto == [288]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njjimsnyder.jpg"; + else if (jumpto == [289]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njlarrylevinson.jpg"; + else if (jumpto == [290]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njlouisdispensiere.jpg"; + else if (jumpto == [291]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njmarksoloff.jpg"; + else if (jumpto == [292]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njmichaelhalko.jpg"; + else if (jumpto == [293]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njmichaelmalkasian.jpg"; + else if (jumpto == [294]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njnigelmartin.jpg"; + else if (jumpto == [295]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njrjmolinari.jpg"; + else if (jumpto == [296]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njtommurasky.jpg"; + else if (jumpto == [297]) window.location = "http://www.newyankee.com/GetYankees2.cgi?njtomputnam.jpg"; + else if (jumpto == [298]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nmdalepage.jpg"; + else if (jumpto == [299]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nmmikethompson.jpg"; + else if (jumpto == [300]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nvclydekemp.jpg"; + else if (jumpto == [301]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nvharveyklene.jpg"; + else if (jumpto == [302]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nvlonsimons.jpg"; + else if (jumpto == [303]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyabeweisfelner.jpg"; + else if (jumpto == [304]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyanthonygiudice.jpg"; + else if (jumpto == [305]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyaustinpierce.jpg"; + else if (jumpto == [306]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nybrianmonks.jpg"; + else if (jumpto == [307]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nycharlieporter.jpg"; + else if (jumpto == [308]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nycorneliuswoglum.jpg"; + else if (jumpto == [309]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nydennishartwell.jpg"; + else if (jumpto == [310]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nydennissgheerdt.jpg"; + else if (jumpto == [311]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nygeorgepettitt.jpg"; + else if (jumpto == [312]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyjohndrewes.jpg"; + else if (jumpto == [313]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyjohnminichiello.jpg"; + else if (jumpto == [314]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nykevinwoolever.jpg"; + else if (jumpto == [315]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nymartyrubinstein.jpg"; + else if (jumpto == [316]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyraysicina.jpg"; + else if (jumpto == [317]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyrobbartley.jpg"; + else if (jumpto == [318]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nyrobertkosty.jpg"; + else if (jumpto == [319]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nystephenbagnato.jpg"; + else if (jumpto == [320]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nystevegiamundo.jpg"; + else if (jumpto == [321]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nystevekelly.jpg"; + else if (jumpto == [322]) window.location = "http://www.newyankee.com/GetYankees2.cgi?nywayneadelkoph.jpg"; + else if (jumpto == [323]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohbriannimmo.jpg"; + else if (jumpto == [324]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohdavehyman.jpg"; + else if (jumpto == [325]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohdavidconant.jpg"; + else if (jumpto == [326]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohdennismantovani.jpg"; + else if (jumpto == [327]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohgrahambennett.jpg"; + else if (jumpto == [328]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohgregbrunk.jpg"; + else if (jumpto == [329]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohgregfilbrun.jpg"; + else if (jumpto == [330]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohjimreutener.jpg"; + else if (jumpto == [331]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohjimrike.jpg"; + else if (jumpto == [332]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohkeithsparks.jpg"; + else if (jumpto == [333]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohkevindrinan.jpg"; + else if (jumpto == [334]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohmichaelhaines.jpg"; + else if (jumpto == [335]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohmichaelsteele.jpg"; + else if (jumpto == [336]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohpatrickguanciale.jpg"; + else if (jumpto == [337]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohscottkelly.jpg"; + else if (jumpto == [338]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohscottthomas.jpg"; + else if (jumpto == [339]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohstevetuckerman.jpg"; + else if (jumpto == [340]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohtedfigurski.jpg"; + else if (jumpto == [341]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohterrydonald.jpg"; + else if (jumpto == [342]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohtimokeefe.jpg"; + else if (jumpto == [343]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ohtomhaydock.jpg"; + else if (jumpto == [344]) window.location = "http://www.newyankee.com/GetYankees2.cgi?okbillsneller.jpg"; + else if (jumpto == [345]) window.location = "http://www.newyankee.com/GetYankees2.cgi?okbobbulick.jpg"; + else if (jumpto == [346]) window.location = "http://www.newyankee.com/GetYankees2.cgi?okdaryljones.jpg"; + else if (jumpto == [347]) window.location = "http://www.newyankee.com/GetYankees2.cgi?okstevetarchek.jpg"; + else if (jumpto == [348]) window.location = "http://www.newyankee.com/GetYankees2.cgi?okwoodymcelroy.jpg"; + else if (jumpto == [349]) window.location = "http://www.newyankee.com/GetYankees2.cgi?orcoryeells.jpg"; + else if (jumpto == [350]) window.location = "http://www.newyankee.com/GetYankees2.cgi?oredcavasso.jpg"; + else if (jumpto == [351]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ormarkmcculley.jpg"; + else if (jumpto == [352]) window.location = "http://www.newyankee.com/GetYankees2.cgi?orstevekarthauser.jpg"; + else if (jumpto == [353]) window.location = "http://www.newyankee.com/GetYankees2.cgi?paalanpalmieri.jpg"; + else if (jumpto == [354]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pachriscarr.jpg"; + else if (jumpto == [355]) window.location = "http://www.newyankee.com/GetYankees2.cgi?padansigg.jpg"; + else if (jumpto == [356]) window.location = "http://www.newyankee.com/GetYankees2.cgi?padavecalabretta.jpg"; + else if (jumpto == [357]) window.location = "http://www.newyankee.com/GetYankees2.cgi?padennishoffman.jpg"; + else if (jumpto == [358]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pafrankschlipf.jpg"; + else if (jumpto == [359]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pajamesevanson.jpg"; + else if (jumpto == [360]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pajoekrol.jpg"; + else if (jumpto == [361]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pakatecrimmins.jpg"; + else if (jumpto == [362]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pamarshallkrebs.jpg"; + else if (jumpto == [363]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pascottsheaffer.jpg"; + else if (jumpto == [364]) window.location = "http://www.newyankee.com/GetYankees2.cgi?paterrycrippen.jpg"; + else if (jumpto == [365]) window.location = "http://www.newyankee.com/GetYankees2.cgi?patjpera.jpg"; + else if (jumpto == [366]) window.location = "http://www.newyankee.com/GetYankees2.cgi?patoddpatterson.jpg"; + else if (jumpto == [367]) window.location = "http://www.newyankee.com/GetYankees2.cgi?patomrehm.jpg"; + else if (jumpto == [368]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pavicschreck.jpg"; + else if (jumpto == [369]) window.location = "http://www.newyankee.com/GetYankees2.cgi?pawilliamhowen.jpg"; + else if (jumpto == [370]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ricarlruggieri.jpg"; + else if (jumpto == [371]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ripetermccrea.jpg"; + else if (jumpto == [372]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scbillmovius.jpg"; + else if (jumpto == [373]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scbryanrackley.jpg"; + else if (jumpto == [374]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scchrisgoodman.jpg"; + else if (jumpto == [375]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scdarrellmunn.jpg"; + else if (jumpto == [376]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scdonsandusky.jpg"; + else if (jumpto == [377]) window.location = "http://www.newyankee.com/GetYankees2.cgi?scscotalexander.jpg"; + else if (jumpto == [378]) window.location = "http://www.newyankee.com/GetYankees2.cgi?sctimbajuscik.jpg"; + else if (jumpto == [379]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ststuartcoltart.jpg"; + else if (jumpto == [380]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnbilobautista.jpg"; + else if (jumpto == [381]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnbrucebowman.jpg"; + else if (jumpto == [382]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tndavidchipman.jpg"; + else if (jumpto == [383]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tndavidcizunas.jpg"; + else if (jumpto == [384]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tndavidreed.jpg"; + else if (jumpto == [385]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnhankdunkin.jpg"; + else if (jumpto == [386]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnkenwetherington.jpg"; + else if (jumpto == [387]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnrickgodboldt.jpg"; + else if (jumpto == [388]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnroyowen.jpg"; + else if (jumpto == [389]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnsteve.jpg"; + else if (jumpto == [390]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tntommymercks.jpg"; + else if (jumpto == [391]) window.location = "http://www.newyankee.com/GetYankees2.cgi?tnwarrenmonroe.jpg"; + else if (jumpto == [392]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txbillvanpelt.jpg"; + else if (jumpto == [393]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txcarolynmoncivais.jpg"; + else if (jumpto == [394]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txchucksteding.jpg"; + else if (jumpto == [395]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txclintlafont.jpg"; + else if (jumpto == [396]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txcurthackett.jpg"; + else if (jumpto == [397]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txdavidmcneill.jpg"; + else if (jumpto == [398]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txdonowen.jpg"; + else if (jumpto == [399]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txfrankcox.jpg"; + else if (jumpto == [400]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txglenbang.jpg"; + else if (jumpto == [401]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txhowardlaunius.jpg"; + else if (jumpto == [402]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjamienorwood.jpg"; + else if (jumpto == [403]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjimmarkle.jpg"; + else if (jumpto == [404]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjimmcnamara.jpg"; + else if (jumpto == [405]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjoelgulker.jpg"; + else if (jumpto == [406]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjoeveillon.jpg"; + else if (jumpto == [407]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txjohnburns.jpg"; + else if (jumpto == [408]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txkeithmartin.jpg"; + else if (jumpto == [409]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txkennymiller.jpg"; + else if (jumpto == [410]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txkirkconstable.jpg"; + else if (jumpto == [411]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txkylekelley.jpg"; + else if (jumpto == [412]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txlesjones.jpg"; + else if (jumpto == [413]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txlynnlacey.jpg"; + else if (jumpto == [414]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txmarksimmons.jpg"; + else if (jumpto == [415]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txmauriceharris.jpg"; + else if (jumpto == [416]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txmichaelbrown.jpg"; + else if (jumpto == [417]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txrichardthomas.jpg"; + else if (jumpto == [418]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txrickent.jpg"; + else if (jumpto == [419]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txtomlovelace.jpg"; + else if (jumpto == [420]) window.location = "http://www.newyankee.com/GetYankees2.cgi?txvareckwalla.jpg"; + else if (jumpto == [421]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukbrianstainton.jpg"; + else if (jumpto == [422]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukdavegrimwood.jpg"; + else if (jumpto == [423]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukdavidevans.jpg"; + else if (jumpto == [424]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukgeoffbogg.jpg"; + else if (jumpto == [425]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukgordondale.jpg"; + else if (jumpto == [426]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukharborne.jpg"; + else if (jumpto == [427]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukjamesobrian.jpg"; + else if (jumpto == [428]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukjeffjones.jpg"; + else if (jumpto == [429]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukjohnworthington.jpg"; + else if (jumpto == [430]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukkeithrobinson.jpg"; + else if (jumpto == [431]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukkoojanzen.jpg"; + else if (jumpto == [432]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukleewebster.jpg"; + else if (jumpto == [433]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukpaultebbutt.jpg"; + else if (jumpto == [434]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukriaanstrydom.jpg"; + else if (jumpto == [435]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukrickdare.jpg"; + else if (jumpto == [436]) window.location = "http://www.newyankee.com/GetYankees2.cgi?ukterrychadwick.jpg"; + else if (jumpto == [437]) window.location = "http://www.newyankee.com/GetYankees2.cgi?utbobcanestrini.jpg"; + else if (jumpto == [438]) window.location = "http://www.newyankee.com/GetYankees2.cgi?utdonthornock.jpg"; + else if (jumpto == [439]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vaartgreen.jpg"; + else if (jumpto == [440]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vabobheller.jpg"; + else if (jumpto == [441]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vaclintadkins.jpg"; + else if (jumpto == [442]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vadanieltepe.jpg"; + else if (jumpto == [443]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vadanmeier.jpg"; + else if (jumpto == [444]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vadavidminnix.jpg"; + else if (jumpto == [445]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vadavidyoho.jpg"; + else if (jumpto == [446]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vadickthornsberry.jpg"; + else if (jumpto == [447]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vamarksimonds.jpg"; + else if (jumpto == [448]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vamichaelkoch.jpg"; + else if (jumpto == [449]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vamikeperozziello.jpg"; + else if (jumpto == [450]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vamikepingrey.jpg"; + else if (jumpto == [451]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vapatrickkearney.jpg"; + else if (jumpto == [452]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vapaulstreet.jpg"; + else if (jumpto == [453]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vatonydemasi.jpg"; + else if (jumpto == [454]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vatroylong.jpg"; + else if (jumpto == [455]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vatroylong2.jpg"; + else if (jumpto == [456]) window.location = "http://www.newyankee.com/GetYankees2.cgi?vaweslyon.jpg"; + else if (jumpto == [457]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wabryanthomas.jpg"; + else if (jumpto == [458]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wageorgebryan.jpg"; + else if (jumpto == [459]) window.location = "http://www.newyankee.com/GetYankees2.cgi?waglennpiersall.jpg"; + else if (jumpto == [460]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wajoewanjohi.jpg"; + else if (jumpto == [461]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wajohndrapala.jpg"; + else if (jumpto == [462]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wajohnfernstrom.jpg"; + else if (jumpto == [463]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wajohnmickelson.jpg"; + else if (jumpto == [464]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wakeithjohnson.jpg"; + else if (jumpto == [465]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wamarkdenman.jpg"; + else if (jumpto == [466]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wamiketaylor.jpg"; + else if (jumpto == [467]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wascottboyd.jpg"; + else if (jumpto == [468]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wibryanschappel.jpg"; + else if (jumpto == [469]) window.location = "http://www.newyankee.com/GetYankees2.cgi?widenniszuber.jpg"; + else if (jumpto == [470]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wigeorgebregar.jpg"; + else if (jumpto == [471]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wikevinwarren.jpg"; + else if (jumpto == [472]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wirichorde.jpg"; + else if (jumpto == [473]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wistevenricks.jpg"; + else if (jumpto == [474]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wiweswolfrom.jpg"; + else if (jumpto == [475]) window.location = "http://www.newyankee.com/GetYankees2.cgi?wvdannorby.jpg"; +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-96526-002.js b/js/src/tests/js1_5/Regress/regress-96526-002.js new file mode 100644 index 000000000..9242f386a --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-96526-002.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 04 Sep 2002 + * SUMMARY: Just seeing that we don't crash when compiling this script - + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526 + * + */ +//----------------------------------------------------------------------------- +printBugNumber(96526); +printStatus("Just seeing that we don't crash when compiling this script -"); + + +/* + * Tail recursion test by Georgi Guninski + */ +a="[\"b\"]"; +s="g"; +for(i=0;i<20000;i++) + s += a; +try {eval(s);} +catch (e) {}; + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-96526-003.js b/js/src/tests/js1_5/Regress/regress-96526-003.js new file mode 100644 index 000000000..8c4adabd3 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-96526-003.js @@ -0,0 +1,4404 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 04 Sep 2002 + * SUMMARY: Just seeing that we don't crash when compiling this script - + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=133897 + */ +//----------------------------------------------------------------------------- +printBugNumber(96526); +printStatus("Just seeing that we don't crash when compiling this script -"); + + +/* + * This function comes from http://bugzilla.mozilla.org/show_bug.cgi?id=133897 + */ +function validId(IDtext) +{ + var res = ""; + + if(IDText.value==""){ + print("You must enter a valid battery #") + return false + } + else if(IDText.value=="x522"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="x91"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="x92"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="x93"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="x95"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="521"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="522"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="528"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="529"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="539"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e90"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e91"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e92"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e93"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e95"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_consumeroem.htm" + return true + } + else if(IDText.value=="e96"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer_e2/energizer2.htm" + return true + } + else if(IDText.value=="en6"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en22"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en90"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en91"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en92"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en93"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en95"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en529"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en539"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="en715"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="edl4a"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="edl4as"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="edl4ac"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="edl6a"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_industrial.htm" + return true + } + else if(IDText.value=="3-0316"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + else if(IDText.value=="3-0316i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + else if(IDText.value=="3-00411"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + else if(IDText.value=="3-0411i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-312"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + else if(IDText.value=="3-312i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-315"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-315i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-315innc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-315iwc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-315wc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-335"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-335i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-335wc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-335nnci"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-350"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-350i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-3501wc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-350wc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-350nnci"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-361"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="3-361i"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/energizer/alkaline_oem_only.htm" + return true + } + + else if(IDText.value=="a522"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/eveready/value.htm" + return true + } + else if(IDText.value=="a91"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/eveready/value.htm" + return true + } + else if(IDText.value=="a92"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/eveready/value.htm" + return true + } + else if(IDText.value=="a93"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/eveready/value.htm" + return true + } + else if(IDText.value=="a95"){ + //Checks for id entry + res="../batteryinfo/product_offerings/alkaline/eveready/value.htm" + return true + } + + else if(IDText.value=="510s"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1209"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1212"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1215"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1222"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1235"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + + else if(IDText.value=="1250"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_consumeroem.htm" + return true + } + else if(IDText.value=="206"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="246"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="266"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="276"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="411"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + + else if(IDText.value=="412"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="413"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="415"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="416"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="455"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="467"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="489"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="493"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="497"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="504"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="505"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="711"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="732"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="763"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev190"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev115"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev122"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev131"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev135"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="ev150"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="hs14196"){ + //Checks for id entry + res="../batteryinfo/product_offerings/carbon_zinc/carbon_zinc_industrial.htm" + return true + } + + else if(IDText.value=="2l76"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + else if(IDText.value=="el1cr2"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + else if(IDText.value=="crv3"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="el2cr5"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="el123ap"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="el223ap"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="l91"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="l522"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="l544"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithium.htm" + return true + } + + else if(IDText.value=="cr1025"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1216"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1220"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1225"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1616"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1620"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr1632"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2012"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2016"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2025"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2032"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2320"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2430"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + + else if(IDText.value=="cr2450"){ + //Checks for id entry + res="../batteryinfo/product_offerings/lithium/lithiummin.htm" + return true + } + else if(IDText.value=="186"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="189"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="191"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="192"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="193"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="a23"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="a27"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="a76"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="a544"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="e11a"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="e625g"){ + //Checks for id entry + res="../batteryinfo/product_offerings/manganese_dioxide/manganese_dioxide.htm" + return true + } + + else if(IDText.value=="301"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="303"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="309"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="315"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="317"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="319"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="321"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="329"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + else if(IDText.value=="333"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + else if(IDText.value=="335"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="337"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="339"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="341"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="344"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="346"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="350"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="357"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="361"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="362"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="364"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="365"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="366"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="370"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="371"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="373"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="376"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="377"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="379"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="381"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="384"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="386"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="387s"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="389"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="390"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="391"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="392"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="393"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="394"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="395"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="396"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="397"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="399"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + + else if(IDText.value=="epx76"){ + //Checks for id entry + res="../batteryinfo/product_offerings/silver/silver_oxide.htm" + return true + } + + else if(IDText.value=="ac5"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + + else if(IDText.value=="ac10/230"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + else if(IDText.value=="ac10"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + else if(IDText.value=="ac13"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + + else if(IDText.value=="ac146x"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + + else if(IDText.value=="ac312"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + + else if(IDText.value=="ac675"){ + //Checks for id entry + res="../batteryinfo/product_offerings/zinc_air/zinc_air.htm" + return true + } + + else if(IDText.value=="chm24"){ + //Checks for id entry + res="../batteryinfo/product_offerings/accessories/rechargeableaccessories_chrger.htm" + return true + } + + else if(IDText.value=="chm4aa"){ + //Checks for id entry + res="../batteryinfo/product_offerings/accessories/rechargeableaccessories_chrger.htm" + return true + } + + else if(IDText.value=="chsm"){ + //Checks for id entry + res="../batteryinfo/product_offerings/accessories/rechargeableaccessories_chrger.htm" + return true + } + + else if(IDText.value=="chm4fc"){ + //Checks for id entry + res="../batteryinfo/product_offerings/accessories/rechargeableaccessories_chrger.htm" + return true + } + + else if(IDText.value=="cxl1000"){ + //Checks for id entry + res="../batteryinfo/product_offerings/accessories/rechargeableaccessories_chrger.htm" + return true + } + else if(IDText.value=="nh12"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_nimh.htm" + return true + } + else if(IDText.value=="nh15"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_nimh.htm" + return true + } + + else if(IDText.value=="nh22"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_nimh.htm" + return true + } + + else if(IDText.value=="nh35"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_nimh.htm" + return true + } + else if(IDText.value=="nh50"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_nimh.htm" + return true + } + + + else if(IDText.value=="ccm5060"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="ccm5260"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cm1060h"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cm1360"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cm2560"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cm6136"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cv3010"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="cv3012"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="cv3112"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="erc510"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc5160"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc520"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc525"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc530"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc545"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc560"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc570"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="erc580"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc590"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc600"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc610"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc620"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="erc630"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="erc640"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc650"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc660"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc670"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc680"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + else if(IDText.value=="erc700"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscam.htm" + return true + } + + else if(IDText.value=="cp2360"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp3036"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + + else if(IDText.value=="cp3136"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp3336"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp5136"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp5648"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp5748"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp8049"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + else if(IDText.value=="cp8648"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + + else if(IDText.value=="cpv5136"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + + else if(IDText.value=="acp5036"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + + else if(IDText.value=="acp5136"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + + + else if(IDText.value=="acp7160"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw120"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw210"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw220"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw230"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw240"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw305"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw310"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw320"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw400"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw500"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw510"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw520"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw530"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw600"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw610"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw700"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw720"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erw800"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscell.htm" + return true + } + else if(IDText.value=="erp107"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp110"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp240"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp268"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp275"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp290"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp450"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp506"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp509"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp730"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erp9116"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p2312"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p2322m"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p2331"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3201"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3301"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3302"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3303"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3306"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p3391"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p5256"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p7300"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p7301"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="7302"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="7310"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p7320"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p7330"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p7340"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p7350"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + + else if(IDText.value=="p7360"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p7400"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="p7501"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packscord.htm" + return true + } + else if(IDText.value=="erd100"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packsdigicam.htm" + return true + } + else if(IDText.value=="erd110"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packsdigicam.htm" + return true + } + else if(IDText.value=="erd200"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packsdigicam.htm" + return true + } + else if(IDText.value=="erd300"){ + //Checks for id entry + res="../batteryinfo/product_offerings/rechargeable_consumer/rechargeable_consumer_packsdigicam.htm" + return true + } + + + + + + + + + + + + + + else if(IDText.value=="164"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="201"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="216"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="226"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="228"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="311"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="314"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + + else if(IDText.value=="313"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="323"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="325"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="333cz"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="343"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="354"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="355"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="387"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="388"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="417"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="420"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="457"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="460"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="477"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="479"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="482"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="484"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="487"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="490"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="491"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="496"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="509"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="510f"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="520"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="523"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="531"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="532"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="537"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="538"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="544"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="560"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="561"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="563"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="564"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="565"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="646"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="703"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="706"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="714"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="715"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="716"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="717"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="724"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="731"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="735"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="736"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="738"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="742"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="744"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="750"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="762s"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="773"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="778"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="781"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="812"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="815"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="835"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="850"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="904"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="912"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="915"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="935"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="950"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1015"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1035"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1050"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1150"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1231"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1461"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1463"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1562"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="1862"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2356n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2709n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2744n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2745n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2746n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="2780n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ac41e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cc1096"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ccm1460"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ccm2460"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ccm4060a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ccm4060m"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cdc100"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch12"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch15"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch2aa"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch22"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch35"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch4"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ch50"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm1060"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm1560"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm2360"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm4160"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm6036"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm9072"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cm9172"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp2360"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp3336"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp3536"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp3736"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp5036"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp5160"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp5648"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp5960"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp6072"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp6172"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7049"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7072"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7148"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7149"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7160"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7172"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7248"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7261"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7348"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7548"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7661"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp7960"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8049"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8136"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8160"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8172"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8248"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8661"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8748"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + + else if(IDText.value=="cp8948"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp8960"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp9061"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp9148"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp9161"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cp9360"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs3336"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs5036"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs5460"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7048"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7072"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7148"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7149"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7160"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7248"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7261"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7348"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7448"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7548"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs7661"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs8136"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs8648"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs9061"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs9148"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cs9161"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv2012"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv2096"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv3010s"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv3012"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv3060"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv3112"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="cv3212"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e1"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e1n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e3"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e4"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e9"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e12"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e12n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e13e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e41e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e42"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e42n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e89"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e115"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e115n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e126"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e132"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e132n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e133"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e133n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e134"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e134n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e135"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e135n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e136"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e137"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e137n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e146x"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e152"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e163"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e164"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e164n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e165"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e169"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e177"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e233"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e233n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e235n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e236n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e286"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e289"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e312e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e340e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e400"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e400n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e401e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e401n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e450"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e502"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e601"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e625"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e630"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e640"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e640n"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e675e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302157"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302250"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302358"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302435"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302462"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302465"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302478"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302642"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302651"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302702"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302904"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302905"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e302908"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303145"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303236"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303314"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303394"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303496"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="e303996"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ea6"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ea6f"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ea6ft"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ea6st"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en1a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en132a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en133a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en134a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en135a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en136a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en164a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en165a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en175a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en177a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="en640a"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ep175"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ep401e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ep675e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx1"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx4"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx13"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx14"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx23"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx25"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx27"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx29"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx30"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx625"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx640"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx675"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="epx825"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev6"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev9"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev10s"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev15"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev22"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev31"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev35"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev50"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev90"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="ev90hp"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="fcc2"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs6"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs10s"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs15"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs31"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs35"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs50"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs90"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs95"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs150"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="hs6571"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="if6"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="is6"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="is6t"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="p2321m"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="p2322"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="p2326m"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="p7307"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="p7507"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="qcc4"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="s13e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="s312e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="s41e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="s76e"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="t35"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="t50"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="w353"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/contents/discontinued_battery_index.htm" + return true + } + else if(IDText.value=="3251"){ + //Checks for id entry + res="../datasheets/flashlights/eveready.htm" + return true + } + else if(IDText.value=="4212"){ + //Checks for id entry + res="../datasheets/flashlights/eveready.htm" + return true + } + else if(IDText.value=="4251"){ + //Checks for id entry + res="../datasheets/flashlights/eveready.htm" + return true + } + else if(IDText.value=="5109"){ + //Checks for id entry + res="../datasheets/flashlights/eveready.htm" + return true + } + else if(IDText.value=="2251"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="e220"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="e250"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="e251"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="e251rc210"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="erg2c1"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="glo4aa1"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="rc220"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="rc250"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="x112"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="x215"){ + //Checks for id entry + res="../datasheets/flashlights/home.htm" + return true + } + else if(IDText.value=="4215"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="5215"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="6212"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="bas24a"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="db24a1"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="kcbg"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="kccl"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="kcdl"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="kcl2bu1"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="kcwl"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="ltcr"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="lteb"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="ltpt"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="sl240"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="v220"){ + //Checks for id entry + res="../datasheets/flashlights/novelty.htm" + return true + } + else if(IDText.value=="5100"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="8209"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="8215"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="9450"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="f101"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="f220"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="f420"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="fab4dcm"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="fl450"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="k221"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="k251"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="led4aa1"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="sp220"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="tw420"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="tw450"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="wp220"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="wp250"){ + //Checks for id entry + res="../datasheets/flashlights/outdoor.htm" + return true + } + else if(IDText.value=="cfl420"){ + //Checks for id entry + res="../datasheets/flashlights/premium.htm" + return true + } + else if(IDText.value=="d410"){ + //Checks for id entry + res="../datasheets/flashlights/premium.htm" + return true + } + else if(IDText.value=="d420"){ + //Checks for id entry + res="../datasheets/flashlights/premium.htm" + return true + } + else if(IDText.value=="fn450"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="in215"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="in251"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="in351"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="in421"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="k220"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="k250"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="r215"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="r250"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="r450"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="tuf4d1"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="v109"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="v115"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="v215"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="v250"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + else if(IDText.value=="val2dl1"){ + //Checks for id entry + res="../datasheets/flashlights/work.htm" + return true + } + + else if(IDText.value=="459"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="208ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="231ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="1151"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="1251"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="1259"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="1351"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="1359"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="3251r"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="3251wh"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="4212wh"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="4250ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="5109ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="6212wh"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="9101ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="e250y"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="e251y"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="in220"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="in253"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="in420"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="in450"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="indwandr"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="indwandy"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="r215ind"){ + //Checks for id entry + res="../datasheets/flashlights/industrial.htm" + return true + } + else if(IDText.value=="pr2"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr3"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr4"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr6"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr7"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr12"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr13"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="pr35"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="112"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="222"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="243"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="258"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="407"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="425"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="1156"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="1651"){ + //Checks for id entry + res="../datasheets/flashlights/standard.htm" + return true + } + else if(IDText.value=="kpr102"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="kpr103"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="kpr104"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="kpr113"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="kpr116"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="kpr802"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="skpr823"){ + //Checks for id entry + res="../datasheets/flashlights/krypton.htm" + return true + } + else if(IDText.value=="hpr50"){ + //Checks for id entry + res="../datasheets/flashlights/halogenbulb.htm" + return true + } + else if(IDText.value=="hpr51"){ + //Checks for id entry + res="../datasheets/flashlights/halogenbulb.htm" + return true + } + else if(IDText.value=="hpr52"){ + //Checks for id entry + res="../datasheets/flashlights/halogenbulb.htm" + return true + } + else if(IDText.value=="hpr53"){ + //Checks for id entry + res="../datasheets/flashlights/halogenbulb.htm" + return true + } + else if(IDText.value=="f4t5"){ + //Checks for id entry + res="../datasheets/flashlights/fluorescent.htm" + return true + } + else if(IDText.value=="f6t5"){ + //Checks for id entry + res="../datasheets/flashlights/fluorescent.htm" + return true + } + else if(IDText.value=="t1-1"){ + //Checks for id entry + res="../datasheets/flashlights/highintensity.htm" + return true + } + else if(IDText.value=="t1-2"){ + //Checks for id entry + res="../datasheets/flashlights/highintensity.htm" + return true + } + else if(IDText.value=="t2-2"){ + //Checks for id entry + res="../datasheets/flashlights/halogenxenon.htm" + return true + } + else if(IDText.value=="t2-3"){ + //Checks for id entry + res="../datasheets/flashlights/halogenxenon.htm" + return true + } + else if(IDText.value=="t2-4"){ + //Checks for id entry + res="../datasheets/flashlights/halogenxenon.htm" + return true + } + else if(IDText.value=="tx15-2"){ + //Checks for id entry + res="../datasheets/flashlights/halogenxenon.htm" + return true + } + else if(IDText.value=="4546ib"){ + //Checks for id entry + res="../datasheets/flashlights/industrialbulb.htm" + return true + } + else if(IDText.value=="LED"){ + //Checks for id entry + res="../datasheets/flashlights/led.htm" + return true + } + + + + else if(IDText.value=="108"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="209"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="330"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="330y"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="331"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="331y"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="1251bk"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="2253"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="3233"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="3253"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="3415"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="3452"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="4220"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="4453"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="5154"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="5251"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="7369"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="8115"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="8415"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="b170"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="bkc1"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="d620"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="d820"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="e100"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="e252"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="e350"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="e420"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="em290"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="em420"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="f100"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="f215"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="f250"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="f415"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="h100"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="h250"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="h350"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="in25t"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="kcdb"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="kcsg"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="kctw"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="rc100"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="rc251"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="rc290"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="t430"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="v235"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="x250"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + else if(IDText.value=="x350"){ + //Checks for id entry + print("You have entered a Discontinued Product Number") + res="../datasheets/flashlights/discontinued_flashlight_index.htm" + return true + } + + + + else { + print("You have entered an Invalid Product Number...Please try 'Select Product Group' search.") + return false + } + +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/js/src/tests/js1_5/Regress/regress-98901.js b/js/src/tests/js1_5/Regress/regress-98901.js new file mode 100644 index 000000000..e6203e0b6 --- /dev/null +++ b/js/src/tests/js1_5/Regress/regress-98901.js @@ -0,0 +1,3892 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 98901; +var summary = 'Stack overflow concatenating variables'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +UNID=""; +shrg="0"; +EMAL=""; +PASS=""; +PASV=""; +FNAM=""; +LNAM=""; +ADD1=""; +ADD2=""; +CITY=""; +STAT=""; +STATi=0; +ZIPC=""; +PHON=""; +AGE2=""; +AGE2i=0; +AGES=""; +SEXX=""; +SEXXi=-1; +OCCU=""; +OCCUi=0; +OCCO=""; +MODL=""; +SRNU=""; +MNTH=""; +MNTHi=0; +YEAR=""; +YEARi=0; +POPR=""; +POPRi=0; +OPOP=""; +WHEN=""; +WHENi=-1; +INFL=""; +INFLi=0; +HM01=""; +HM02=""; +HM03=""; +HM04=""; +HM05=""; +HM06=""; +HM07=""; +HM08=""; +HM09=""; +HM10=""; +HM11=""; +HM12=""; +HM13=""; +HM14=""; +HM15=""; +HM16=""; +HM17=""; +HM18=""; +HM19=""; +HM20=""; +HM21=""; +HM22=""; +HM23=""; +HM24=""; +HS01=""; +HS02=""; +HS03=""; +HS04=""; +HS05=""; +HS06=""; +HS07=""; +HS08=""; +HS09=""; +HS10=""; +HS11=""; +HS12=""; +HS13=""; +HS14=""; +HS15=""; +HS16=""; +HS17=""; +HS18=""; +HS19=""; +HS20=""; +HS21=""; +HS22=""; +HS23=""; +HS24=""; +PL01=""; +PL01i=-1; +PL02=""; +PL02i=-1; +PL03=""; +PL03i=-1; +PL04=""; +PL04i=-1; +PL05=""; +PL05i=-1; +PL06=""; +PL06i=-1; +PL07=""; +PL07i=-1; +PL08=""; +PL08i=-1; +PL09=""; +PL09i=-1; +PL10=""; +PL10i=-1; +PL11=""; +PL11i=-1; +PL12=""; +PL12i=-1; +PL13=""; +PL13i=-1; +PL14=""; +PL14i=-1; +PL15=""; +PL15i=-1; +PL16=""; +PL16i=-1; +PL17=""; +PL17i=-1; +PL18=""; +PL18i=-1; +PL19=""; +PL19i=-1; +PL20=""; +PL20i=-1; +PL21=""; +PL21i=-1; +PL22=""; +PL22i=-1; +PL23=""; +PL23i=-1; +PL24=""; +PL24i=-1; +TVSO=""; +TVSOi=-1; +FNDS=""; +FNDSi=-1; +WGFT=""; +WGFTi=0; +CE01=""; +CE01i=-1; +CE02=""; +CE02i=-1; +NEMA="Yes"; +NEMAi=0; +PPUR=""; +PPURi=-1; +PPUO=""; +CON1=""; +CON2=""; +CON3=""; +STNM=""; +STNMi=0; +FE01=""; +FE01i=0; +FE02=""; +FE03=""; +FE04=""; +FE05=""; +FE06=""; +FE07=""; +FE08=""; +FE09=""; +FE10=""; +FE11=""; +FE12=""; +FE13=""; +FE14=""; +FE15=""; +FE16=""; +FE17=""; +FE18=""; +FE19=""; +FE20=""; +FE21=""; +FE22=""; +FE23=""; +FE24=""; +FE25=""; +FE26=""; +FE27=""; +FE28=""; +FE29=""; +FE30=""; +FE31=""; +FE32=""; +FE33=""; +FE34=""; +FEOT=""; +NF01=""; +NF02=""; +NF03=""; +NF04=""; +NF05=""; +NF06=""; +NF07=""; +NF08=""; +NF09=""; +NF10=""; +NF11=""; +NF12=""; +NF13=""; +NF14=""; +NF15=""; +NF16=""; +NF17=""; +NF18=""; +NF19=""; +NFOT=""; +OSYS=""; +OSYSi=0; +OSOT=""; +IMGS=""; +PBY1=""; +PBY2=""; +PBY3=""; +PBY4=""; +PBY5=""; +PBY6=""; +PBY7=""; +PBY8=""; +OPBY=""; +OWNC=""; +OWNCi=-1; +CUSE=""; +CUSEi=-1; +OCUS=""; +WCAM=""; +WCAMi=0; +OC01=""; +OC02=""; +OC03=""; +OC04=""; +OC05=""; +OC06=""; +OC07=""; +OC08=""; +OC09=""; +OC10=""; +OC11=""; +CU01=""; +CU02=""; +CU03=""; +CU04=""; +CU05=""; +CU06=""; +CU07=""; +CU08=""; +CU09=""; +CU10=""; +PLYB=""; +PLYBi=0; +CCON=""; +CCONi=0; +BC01=""; +BC02=""; +BC03=""; +BC04=""; +BC05=""; +BC06=""; +IN01=""; +IN02=""; +IN03=""; +IN04=""; +IN05=""; +IN06=""; +IN07=""; +IN08=""; +IN09=""; +IN10=""; +IN11=""; +IN12=""; +IN13=""; +IN14=""; +IN15=""; +FI01=""; +FI02=""; +FI03=""; +FI04=""; +FI05=""; +FI06=""; +FI07=""; +FI08=""; +FI09=""; +FI10=""; +FI11=""; +FI12=""; +FI13=""; +FI14=""; +FI15=""; +FI16=""; +FI17=""; +FI18=""; +FI19=""; +FI20=""; +FI21=""; +FI22=""; +FI23=""; +FI24=""; +FI25=""; +FI26=""; +FI27=""; +FI28=""; +FI29=""; +FI30=""; +FI31=""; +FI32=""; +FI33=""; +FI34=""; +FI35=""; +FI36=""; +FI37=""; +FI38=""; +FI39=""; +FI40=""; +FI41=""; +FI42=""; +FI43=""; +FI44=""; +FI45=""; +FI46=""; +FI47=""; +FI48=""; +FI49=""; +FI50=""; +FI51=""; +FI52=""; +FI53=""; +FI54=""; +FI55=""; +FI56=""; +FI57=""; +FI58=""; +FF01=""; +FF02=""; +FF03=""; +FF04=""; +FF05=""; +FF06=""; +FF07=""; +FF08=""; +FF09=""; +FF10=""; +FF11=""; +FF12=""; +FF13=""; +FF14=""; +FF15=""; +FF16=""; +FF17=""; +FF18=""; +FF19=""; +FF20=""; +FF21=""; +FF22=""; +PPQT=""; +PPQTi=-1; +PSQT=""; +PSQTi=-1; +LCDQ=""; +LCDQi=-1; +NITQ=""; +NITQi=-1; +NTSQ=""; +NTSQi=-1; +GENQ=""; +GENQi=-1; +DSNQ=""; +DSNQi=-1; +OPMQ=""; +OPMQi=-1; +PRCQ=""; +PRCQi=-1; +BATQ=""; +BATQi=-1; +CMPQ=""; +CMPQi=-1; +DSCQ=""; +DSCQi=-1; +MSSQ=""; +MSSQi=-1; +MSIQ=""; +MSIQi=-1; +PGSQ=""; +PGSQi=-1; +PCPQ=""; +PCPQi=-1; +AO01=""; +AO02=""; +AO03=""; +AO04=""; +AO05=""; +AO06=""; +AO07=""; +AO08=""; +AO09=""; +AO10=""; +AO11=""; +AO12=""; +AO13=""; +AO14=""; +AO15=""; +AO16=""; +AO17=""; +AO18=""; +AO19=""; +AO20=""; +AO21=""; +AO22=""; +AO23=""; +AO24=""; +AO25=""; +AO26=""; +AO27=""; +AO28=""; +AO29=""; +AO30=""; +AO31=""; +AO32=""; +AO33=""; +AO34=""; +AO35=""; +IS01=""; +IS02=""; +IS03=""; +IS04=""; +IS05=""; +IS06=""; +IS07=""; +IS08=""; +IS09=""; +IS10=""; +IS11=""; +IS12=""; +IS13=""; +IS14=""; +IS15=""; +IS16=""; +IS17=""; +IS18=""; +IS19=""; +IS20=""; +IS21=""; +IS22=""; +IS23=""; +IS24=""; +IS25=""; +IS26=""; +IS27=""; +IS28=""; +IS29=""; +IS30=""; +IS31=""; +IS32=""; +IS33=""; +IS34=""; +IS35=""; +B601=""; +B602=""; +B603=""; +B604=""; +B605=""; +B606=""; +B607=""; +B608=""; +B609=""; +B610=""; +B611=""; +B612=""; +B613=""; +B614=""; +B615=""; +B616=""; +B617=""; +B618=""; +B619=""; +B620=""; +B621=""; +B622=""; +B623=""; +B624=""; +B625=""; +B626=""; +B627=""; +B628=""; +B629=""; +B630=""; +B631=""; +B632=""; +B633=""; +B634=""; +B635=""; +CTYP=""; +CTYPi=-1; +AO36=""; +AO37=""; +IS36=""; +IS37=""; +B636=""; +B637=""; +FA01=""; +FA02=""; +FA03=""; +FA04=""; +FA05=""; +FA06=""; +FA07=""; +FA08=""; +FA09=""; +FA10=""; +FA11=""; +FA12=""; +FA13=""; +FA14=""; +FA15=""; +FA16=""; +FA17=""; +FA18=""; +FA19=""; +FA20=""; +FA21=""; +FA22=""; +FA23=""; +FA24=""; +FA25=""; +FA26=""; +FA27=""; +SI01=""; +SI02=""; +SI03=""; +SI04=""; +SI05=""; +SI06=""; +SI07=""; +SI08=""; +SI09=""; +SI10=""; +SI11=""; +SI12=""; +SI13=""; +SI14=""; +SI15=""; +SI16=""; +SI17=""; +SI18=""; +SI19=""; +SI20=""; +SI21=""; +SI22=""; +SI23=""; +SI24=""; +SI25=""; +SI26=""; +SI27=""; +SI28=""; +SI29=""; +SI30=""; +SI31=""; +SI32=""; +SI33=""; +SI34=""; +SI35=""; +SI36=""; +SI37=""; +SI38=""; +SI39=""; +SI40=""; +SI41=""; +II01=""; +II02=""; +II03=""; +II04=""; +II05=""; +II06=""; +II07=""; +II08=""; +II09=""; +II10=""; +II11=""; +OB01=""; +OB02=""; +OB03=""; +OB04=""; +PUCO=""; +SF01=""; +SF02=""; +SF03=""; +SF04=""; +SF05=""; +SF06=""; +SF07=""; +SF08=""; +SF09=""; +SF10=""; +SF11=""; +SF12=""; +SF13=""; +SF14=""; +SF15=""; +SF16=""; +SF17=""; +SF18=""; +SF19=""; +SF20=""; +SF21=""; +SF22=""; +SF23=""; +SF24=""; +SF25=""; +SF26=""; +SF27=""; +SF28=""; +SF29=""; +SF30=""; +SF31=""; +SF32=""; +SF33=""; +SF34=""; +SF35=""; +SF36=""; +SF37=""; +SF38=""; +SF39=""; +SF40=""; +SF41=""; +SF42=""; +SF43=""; +SF44=""; +SF45=""; +SF46=""; +SF47=""; +SF48=""; +SF49=""; +FA28=""; +FA29=""; +FA30=""; +FA31=""; +II12=""; +II13=""; +II14=""; +AO38=""; +IS38=""; +B638=""; +PRMU=""; +PRMUi=0; +PRMO=""; +CAMU=""; +CAMUi=0; +CAMO=""; +INDU=""; +INDUi=0; +INDO=""; +INDH=""; +II15=""; +II16=""; +II17=""; +II18=""; +II19=""; +II20=""; +PLYP=""; +PLYPi=0; +WEDT=""; +WEDTi=0; +FM01=""; +FM02=""; +FM03=""; +FM04=""; +FM05=""; +FM06=""; +FM07=""; +FM08=""; +FM09=""; +FM10=""; +FM11=""; +FM12=""; +FM13=""; +FM14=""; +FM15=""; +FM16=""; +FM17=""; +FM18=""; +FM19=""; +FM20=""; +FM21=""; +FM22=""; +FM23=""; +FM24=""; +FM25=""; +FM26=""; +FM27=""; +FL01=""; +FL02=""; +FL03=""; +FL04=""; +FL05=""; +FL06=""; +FL07=""; +FL08=""; +FL09=""; +FL10=""; +FL11=""; +FL12=""; +FL13=""; +FL14=""; +FL15=""; +FL16=""; +FL17=""; +FL18=""; +FL19=""; +FL20=""; +FL21=""; +FL22=""; +FL23=""; +FL24=""; +FL25=""; +FL26=""; +FL27=""; +AE01=""; +AE02=""; +AE03=""; +AE04=""; +AE05=""; +AE06=""; +AE07=""; +AE08=""; +AE09=""; +AE10=""; +AG01=""; +AG02=""; +AG03=""; +AG04=""; +AG05=""; +AG06=""; +AG07=""; +AG08=""; +AG09=""; +AG10=""; +AF01=""; +AF02=""; +AF03=""; +AF04=""; +AF05=""; +AF06=""; +AF07=""; +AF08=""; +AF09=""; +AF10=""; +AP01=""; +AP02=""; +AP03=""; +AP04=""; +AP05=""; +AP06=""; +AP07=""; +AP08=""; +AP09=""; +AP10=""; +BA01=""; +BA02=""; +BA03=""; +BA04=""; +BA05=""; +BA06=""; +BA07=""; +BA08=""; +BA09=""; +BA10=""; +BA11=""; +BA12=""; +BA13=""; +BA14=""; +BA15=""; +CNCT=""; +CNCTi=-1; +TCNT=""; +TCNTi=0; +OCNT=""; +OCNTi=0; +CMNT=""; +PTYP=""; +PTYPi=0; +REPS=""; +REPSi=0; +REPO=""; +SDIS=""; +SDISi=0; +SDSO=""; +WUSE=""; +WUSEi=0; +WUSO=""; +RF01=""; +RF02=""; +RF03=""; +RF04=""; +RF05=""; +RF06=""; +RF07=""; +RF08=""; +RFOT=""; +MOUF=""; +MOUFi=0; +MOFO=""; +CO01=""; +CO02=""; +CO03=""; +CO04=""; +CO05=""; +CO06=""; +CO07=""; +WC01=""; +WC02=""; +WC03=""; +WC04=""; +WC05=""; +WC06=""; +WC07=""; +DVDS=""; +CDDS=""; +MINI=""; +RCRD=""; +TAPE=""; +FDVD=""; +FDVDi=-1; +ODVD=""; +NCHD=""; +NCHDi=0; +INCM=""; +INCMi=0; +HTYP=""; +HTYPi=-1; +AOLE=""; +AOLEi=-1; +COLE=""; +COLEi=-1; +OOLE=""; +HM25=""; +HM26=""; +HM27=""; +HS25=""; +HS26=""; +HS27=""; +PL25=""; +PL25i=-1; +PL26=""; +PL26i=-1; +PL27=""; +PL27i=-1; +IF01=""; +IF01i=0; +IF02=""; +IF03=""; +IF04=""; +IF05=""; +IF06=""; +IF07=""; +IF08=""; +IF09=""; +IF10=""; +IF11=""; +IF12=""; +IF13=""; +IF14=""; +IF15=""; +IF16=""; +IF17=""; +IF18=""; +IF19=""; +IF20=""; +IF21=""; +IF22=""; +IF23=""; +IF24=""; +IF25=""; +IF26=""; +IF27=""; +IF28=""; +IF29=""; +IF30=""; +IF31=""; +IF32=""; +IF33=""; +IF34=""; +IF35=""; +IF36=""; +IF37=""; +IF38=""; +IF39=""; +IF40=""; +IF41=""; +IFOT=""; +MA01=""; +MA02=""; +MA03=""; +MA04=""; +MA05=""; +MA06=""; +MA07=""; +MA08=""; +MA09=""; +MA10=""; +MA11=""; +MA12=""; +MA13=""; +MA14=""; +MA15=""; +MA16=""; +MA17=""; +MA18=""; +MA19=""; +MA20=""; +MA21=""; +MA22=""; +MA23=""; +MA24=""; +MA25=""; +MA26=""; +MAOT=""; +OF01=""; +OF02=""; +OF03=""; +OF04=""; +OF05=""; +OF06=""; +OF07=""; +OF08=""; +OF09=""; +OF10=""; +OF11=""; +OF12=""; +OF13=""; +OF14=""; +OF15=""; +OF16=""; +OF17=""; +OF18=""; +OF19=""; +OS01=""; +OS02=""; +OS03=""; +OS04=""; +OS05=""; +OS06=""; +OS07=""; +OS08=""; +OS09=""; +OS10=""; +OS11=""; +OS12=""; +OS13=""; +OS14=""; +OS15=""; +OS16=""; +OS17=""; +OS18=""; +OS19=""; +BR01=""; +BR02=""; +BR03=""; +BR04=""; +BR05=""; +BR06=""; +BR07=""; +BR08=""; +BR09=""; +BR10=""; +BR11=""; +BR12=""; +BR13=""; +BR14=""; +BR15=""; +BR16=""; +BR17=""; +BR18=""; +BR19=""; +FC01=""; +FC02=""; +FC03=""; +FC04=""; +FC05=""; +FC06=""; +FC07=""; +FC08=""; +FC09=""; +FC10=""; +FC11=""; +FC12=""; +FC13=""; +FC14=""; +FC15=""; +FC16=""; +FC17=""; +FC01i=-1; +FC02i=-1; +FC03i=-1; +FC04i=-1; +FC05i=-1; +FC06i=-1; +FC07i=-1; +FC08i=-1; +FC09i=-1; +FC10i=-1; +FC11i=-1; +FC12i=-1; +FC13i=-1; +FC14i=-1; +FC15i=-1; +FC16i=-1; +FC17i=-1; +UNET=""; +UNETi=-1; +MARS=""; +MARSi=-1; +EWAR=""; +EWARi=-1; +OCOT=""; +CG00=""; +CG00i=-1; +CG01=""; +CG01i=-1; +CG02=""; +CG02i=-1; +CG03=""; +CG03i=-1; +CG04=""; +CG04i=-1; +CG05=""; +CG05i=-1; +CG06=""; +CG06i=-1; +CG07=""; +CG07i=-1; +CG08=""; +CG08i=-1; +CG09=""; +CG09i=-1; +CG10=""; +CG10i=-1; +CG11=""; +CG11i=-1; +COCO=""; +COCOi=0; +MI00=""; +MI01=""; +MI02=""; +MI03=""; +MI04=""; +MI05=""; +MI06=""; +MI07=""; +MI08=""; +MI09=""; +MI10=""; +MI11=""; +MI12=""; +MI13=""; +MI14=""; +MI00i=-1; +MI01i=-1; +MI02i=-1; +MI03i=-1; +MI04i=-1; +MI05i=-1; +MI06i=-1; +MI07i=-1; +MI08i=-1; +MI09i=-1; +MI10i=-1; +MI11i=-1; +MI12i=-1; +MI13i=-1; +MI14i=-1; + +YD01=""; +YD02=""; +YD03=""; +YD04=""; +YD05=""; +YD06=""; +YD07=""; +YD08=""; +YD09=""; +YD10=""; +YD11=""; +YD12=""; +YD13=""; +YD14=""; +YD15=""; +YD16=""; +YD17=""; +YD18=""; +YD19=""; +YD20=""; +YD21=""; +YD22=""; +YD23=""; +YD24=""; +YD25=""; +YD26=""; +YD27=""; +YD28=""; +YD29=""; +YD30=""; +YD31=""; +YD32=""; +YD33=""; +YD34=""; +YD35=""; +YD36=""; +YD37=""; +YD38=""; +YD39=""; +YD40=""; +YD41=""; +YD42=""; +YD43=""; +YD44=""; +YD45=""; +YD46=""; +YD47=""; +YD48=""; +YD49=""; +YD50=""; +YD51=""; +YD52=""; +YD53=""; +YD54=""; +YD55=""; +YD01i=-1; +YD02i=-1; +YD03i=-1; +YD04i=-1; +YD05i=-1; +YD06i=-1; +YD07i=-1; +YD08i=-1; +YD09i=-1; +YD10i=-1; +YD11i=-1; +YD12i=-1; +YD13i=-1; +YD14i=-1; +YD15i=-1; +YD16i=-1; +YD17i=-1; +YD18i=-1; +YD19i=-1; +YD20i=-1; +YD21i=-1; +YD22i=-1; +YD23i=-1; +YD24i=-1; +YD25i=-1; +YD26i=-1; +YD27i=-1; +YD28i=-1; +YD29i=-1; +YD30i=-1; +YD31i=-1; +YD32i=-1; +YD33i=-1; +YD34i=-1; +YD35i=-1; +YD36i=-1; +YD37i=-1; +YD38i=-1; +YD39i=-1; +YD40i=-1; +YD41i=-1; +YD42i=-1; +YD43i=-1; +YD44i=-1; +YD45i=-1; +YD46i=-1; +YD47i=-1; +YD48i=-1; +YD49i=-1; +YD50i=-1; +YD51i=-1; +YD52i=-1; +YD53i=-1; +YD54i=-1; +YD55i=-1; +NI00=""; +NI01=""; +NI02=""; +NI03=""; +NI04=""; +NI05=""; +NI06=""; +NI07=""; +NI08=""; +NI09=""; +NI10=""; +NI11=""; +NI12=""; +NI13=""; +NI14=""; +NI15=""; +NI16=""; +NI17=""; +NI18=""; +NI19=""; +NI20=""; +NI21=""; +NI22=""; +NI23=""; +NI24=""; +NI25=""; +NI26=""; +NI27=""; +NI00i=-1; +NI01i=-1; +NI02i=-1; +NI03i=-1; +NI04i=-1; +NI05i=-1; +NI06i=-1; +NI07i=-1; +NI08i=-1; +NI09i=-1; +NI10i=-1; +NI11i=-1; +NI12i=-1; +NI13i=-1; +NI14i=-1; +NI15i=-1; +NI16i=-1; +NI17i=-1; +NI18i=-1; +NI19i=-1; +NI20i=-1; +NI21i=-1; +NI22i=-1; +NI23i=-1; +NI24i=-1; +NI25i=-1; +NI26i=-1; +NI27i=-1; +NIOT=""; + +AC01=""; +AC02=""; +AC03=""; +AC04=""; +AC05=""; +AC06=""; +AC07=""; +AC08=""; +AC09=""; +AC10=""; +AC11=""; +AC12=""; +AC13=""; +AC14=""; +AC15=""; +AC16=""; +AC17=""; +AC18=""; +AC19=""; +AC20=""; +AC21=""; +AC22=""; +AC23=""; +AC24=""; + +AC01i=-1; +AC02i=-1; +AC03i=-1; +AC04i=-1; +AC05i=-1; +AC06i=-1; +AC07i=-1; +AC08i=-1; +AC09i=-1; +AC10i=-1; +AC11i=-1; +AC12i=-1; +AC13i=-1; +AC14i=-1; +AC15i=-1; +AC16i=-1; +AC17i=-1; +AC18i=-1; +AC19i=-1; +AC20i=-1; +AC21i=-1; +AC22i=-1; +AC23i=-1; +AC24i=-1; + +AO39=""; +IS39=""; +B639=""; +AO40=""; +IS40=""; +B640=""; +AO41=""; +IS41=""; +B641=""; +AO42=""; +IS42=""; +B642=""; +AO43=""; +IS43=""; +B643=""; + +AO39i=-1; +IS39i=-1; +B639i=-1; +AO40i=-1; +IS40i=-1; +B640i=-1; +AO41i=-1; +IS41i=-1; +B641i=-1; +AO42i=-1; +IS42i=-1; +B642i=-1; +AO43i=-1; +IS43i=-1; +B643i=-1; + +EIMG=""; +EIMGi=0; +IC01=""; +IC02=""; +IC03=""; +IC04=""; +IC05=""; +IC06=""; +IC07=""; +IC01i=-1; +IC02i=-1; +IC03i=-1; +IC04i=-1; +IC05i=-1; +IC06i=-1; +IC07i=-1; +ICOT=""; + +SF49=""; +FA32=""; +EISC=""; +EISCi=-1; + +COLR=""; +COLRi="0"; +WPOL=""; +SF50=""; +SF50i="-1"; +SF51=""; +SF51i="-1"; +SF52=""; +SF52i="-1"; +SF53=""; +SF53i="-1"; +SF54=""; +SF54i="-1"; +MDRI=""; +MDRIi="-1"; +MDIR=""; +MDIRi="0"; +OB05=""; +OB05i="-1"; +OB06=""; +OB06i="-1"; +OB07=""; +OB07i="-1"; +OB08=""; +OB08i="-1"; +OB09=""; +OB09i="-1"; +OB10=""; +OB10i="-1"; +OB11=""; +OB11i="-1"; +OB12=""; +OB12i="-1"; +OBFI=""; +OP01=""; +OP01i="-1"; +OP02=""; +OP02i="-1"; +OP03=""; +OP03i="-1"; +OP04=""; +OP04i="-1"; +SMDR=""; +SMDRi="0"; +SMDO=""; +DMFI=""; +DMFIi="-1"; +HMFD=""; +HMFDi="0"; +WSMM=""; +WSMMi="0"; +MMFI=""; +MDFP =""; +MDMP =""; +MDFC =""; +MDMC =""; +SF55 =""; +SF56 =""; +SF57 =""; +SF58 =""; +SF59 =""; +SF60 =""; +SF61 =""; +SF62 =""; +SF63 =""; +SF64 =""; +SF65 =""; +SF55i =0; +SF56i =0; +SF57i =0; +SF58i =0; +SF59i =0; +SF60i =0; +SF61i =0; +SF62i =0; +SF63i =0; +SF64i =0; +SF65i =0; +SFFI =""; +RC01 =""; +RC02 =""; +RC03 =""; +RC04 =""; +RC05 =""; +RC06 =""; +RC07 =""; +RC08 =""; +RC01i =0; +RC02i =0; +RC03i =0; +RC04i =0; +RC05i =0; +RC06i =0; +RC07i =0; +RC08i =0; +RCFI =""; +RH01 =""; +RH02 =""; +RH03 =""; +RH04 =""; +RH05 =""; +RH06 =""; +RH01i =0; +RH02i =0; +RH03i =0; +RH04i =0; +RH05i =0; +RH06i =0; +RHFI =""; +FE35 =""; +FE36 =""; +FE37 =""; +FE38 =""; +FE39 =""; +FE40 =""; +FE41 =""; +FE42 =""; +FE43 =""; +FE44 =""; +FE45 =""; +FE46 =""; +FE47 =""; +FE48 =""; +FE49 =""; +FE50 =""; +FE51 =""; +FE52 =""; +FE53 =""; +FE35i =0; +FE36i =0; +FE37i =0; +FE38i =0; +FE39i =0; +FE40i =0; +FE41i =0; +FE42i =0; +FE43i =0; +FE44i =0; +FE45i =0; +FE46i =0; +FE47i =0; +FE48i =0; +FE49i =0; +FE50i =0; +FE51i =0; +FE52i =0; +FE53i =0; +NCDK =""; +NCDKi =0; +NPRM =""; +NBLM =""; +NVRC =""; +NCTP =""; + +PMDP =""; +PMDR =""; +CRMD =""; +MDDK =""; +PMDPi =-1; +PMDRi =-1; +CRMDi =-1; +MDDKi =-1; +PUSE = ""; +PUSEi =0; +IF42=""; +IF43=""; +IF44=""; +IF45=""; +IF46=""; +IF47=""; +IF48=""; +OF00=""; +OS00=""; +BR00=""; +OB13=""; +OB14=""; + +MO01=""; +MO02=""; +MO03=""; +MO04=""; +MO05=""; +MO06=""; +MO07=""; +MO08=""; +MO09=""; +MO10=""; +MO11=""; +MO12=""; +MO13=""; + +MO01i=-1; +MO02i=-1; +MO03i=-1; +MO04i=-1; +MO05i=-1; +MO06i=-1; +MO07i=-1; +MO08i=-1; +MO09i=-1; +MO10i=-1; +MO11i=-1; +MO12i=-1; +MO13i=-1; + +RF09=""; +RF10=""; +RF11=""; +RF12=""; +RF13=""; +RF14=""; +RF15=""; +RF16=""; +RF17=""; +RF18=""; +RF19=""; +RF20=""; +RF21=""; +RF22=""; +RF23=""; +RF24=""; +RF25=""; +RF26=""; +RF27=""; +RF28=""; +RF29=""; +RF30=""; +RF31=""; +RF32=""; +RF33=""; +RF34=""; +RF35=""; +RF36=""; +RF37=""; +RF38=""; +RF39=""; +RF40=""; +RF41=""; +RF42=""; +RF43=""; +RF44=""; +RF45=""; +RF46=""; +RF47=""; +RF48=""; +RF49=""; +RF50=""; +RF51=""; +RF52=""; +RF53=""; +RF54=""; +RF55=""; +RF56=""; +RF57=""; +RF58=""; +RF59=""; +RF60=""; +RF61=""; +RF62=""; +RF63=""; +RF64=""; +RF65=""; +RF66=""; +RF67=""; + +RF09i=-1; +RF10i=-1; +RF11i=-1; +RF12i=-1; +RF13i=-1; +RF14i=-1; +RF15i=-1; +RF16i=-1; +RF17i=-1; +RF18i=-1; +RF19i=-1; +RF20i=-1; +RF21i=-1; +RF22i=-1; +RF23i=-1; +RF24i=-1; +RF25i=-1; +RF26i=-1; +RF27i=-1; +RF28i=-1; +RF29i=-1; +RF30i=-1; +RF31i=-1; +RF32i=-1; +RF33i=-1; +RF34i=-1; +RF35i=-1; +RF36i=-1; +RF37i=-1; +RF38i=-1; +RF39i=-1; +RF40i=-1; +RF41i=-1; +RF42i=-1; +RF43i=-1; +RF44i=-1; +RF45i=-1; +RF46i=-1; +RF47i=-1; +RF48i=-1; +RF49i=-1; +RF50i=-1; +RF51i=-1; +RF52i=-1; +RF53i=-1; +RF54i=-1; +RF55i=-1; +RF56i=-1; +RF57i=-1; +RF58i=-1; +RF59i=-1; +RF60i=-1; +RF61i=-1; +RF62i=-1; +RF63i=-1; +RF64i=-1; +RF65i=-1; +RF66i=-1; +RF67i=-1; + +CO08=""; +CO09=""; +CO10=""; +CO11=""; +CO12=""; +CO13=""; +CO14=""; +CO15=""; +CO16=""; +CO17=""; +CO18=""; +CO19=""; + +CO08i=-1; +CO09i=-1; +CO10i=-1; +CO11i=-1; +CO12i=-1; +CO13i=-1; +CO14i=-1; +CO15i=-1; +CO16i=-1; +CO17i=-1; +CO18i=-1; +CO19i=-1; + +WUCP=""; +WUCPi=0; + +AVSM=""; +AVSMi=0; + +SD01=""; +SD02=""; +SD03=""; +SD04=""; +SD05=""; +SD06=""; +SD07=""; + +SD01i=-1; +SD02i=-1; +SD03i=-1; +SD04i=-1; +SD05i=-1; +SD06i=-1; +SD07i=-1; + +TP01=""; +TP02=""; +TP03=""; +TP04=""; + +WC08=""; +WC09=""; +WC10=""; +WC11=""; +WC12=""; +WC13=""; +WC14=""; +WC15=""; + +WC08i=-1; +WC09i=-1; +WC10i=-1; +WC11i=-1; +WC12i=-1; +WC13i=-1; +WC14i=-1; +WC15i=-1; + +MD01=""; +MD02=""; +MD03=""; +MD04=""; +MD05=""; +MD06=""; +MD07=""; +MD08=""; +MD09=""; +MD10=""; +MD11=""; +MD12=""; +MD13=""; +MD14=""; +MD15=""; + +MF01=""; +MF02=""; +MF03=""; +MF04=""; +MF05=""; +MF06=""; +MF07=""; +MF08=""; +MF09=""; +MF10=""; +MF11=""; +MF12=""; +MF13=""; +MF14=""; +MF15=""; + +PU01=""; +PU02=""; +PU03=""; +PU04=""; +PU05=""; + +PU01i=-1; +PU02i=-1; +PU03i=-1; +PU04i=-1; +PU05i=-1; + +SF00=""; +SF00i=-1; + +NCDR=""; +AGCT=""; +AGCTi=0; + +MUS1=""; +MUS2=""; +MUS3=""; + +MUS1i=0; +MUS2i=0; +MUS3i=0; + +SF66=""; +SF67=""; +SF68=""; +FA33=""; +FA34=""; +AO44=""; +IS44=""; +B644=""; +AO44i=-1; +IS44i=-1; +B644i=-1; + +IF52=""; +IF53=""; +IF54=""; +IF55=""; +IF56=""; +IF57=""; +IF58=""; +IF59=""; +IF60=""; +IF61=""; +IF62=""; +IF63=""; +IF64=""; +IF65=""; +IF66=""; +IF67=""; +IF68=""; + +IF52i=-1; +IF53i=-1; +IF54i=-1; +IF55i=-1; +IF56i=-1; +IF57i=-1; +IF58i=-1; +IF59i=-1; +IF60i=-1; +IF61i=-1; +IF62i=-1; +IF63i=-1; +IF64i=-1; +IF65i=-1; +IF66i=-1; +IF67i=-1; +IF68i=-1; + +MA28=""; +MA28i=-1; + +NADL=""; +AGCH=""; +LRNA=""; +LRNAi=0; +LROT=""; +WHRM=""; +WHRMi="0"; +WROT=""; +DV01=""; +DV01i="-1"; +DV02=""; +DV02i="-1"; +DV03=""; +DV03i="-1"; +DV04=""; +DV04i="-1"; +DV05=""; +DV05i="-1"; +DV06=""; +DV06i="-1"; +DV07=""; +DV07i="-1"; +DV08=""; +DV08i="-1"; +PVUF=""; +PVUFi="0"; +WDVC=""; +WDVCi="0"; +VCOT=""; +VCPU=""; +VCPUi="0"; +PUCA=""; +PUOT=""; +SCAT=""; +SCATi="-1"; +UCBX=""; +UCBXi="-1"; +CRDS=""; +CRDSi="-1"; +SATP=""; +SATPi="-1"; +BRPS=""; +BRES=""; +HMCC=""; +HMCCi="0"; +MRTV=""; +MRTVi="0"; +WTTV=""; +WTTVi="0"; +WTOT=""; +MASL=""; +MASLi="-1"; +RESL=""; +RESLi="-1"; +OVSL=""; +OVSLi="-1"; +MPNC=""; +MPNCi="0"; +NCOT=""; +MPDC=""; +MPDCi="0"; +DCOT=""; +MPCP=""; +MPCPi="0"; +CPOT=""; + +CA01=""; +CA01i="0"; +CA02=""; +CA02i="0"; +CA03=""; +CA03i="0"; +CA04=""; +CA04i="0"; +CA05=""; +CA05i="0"; +CA06=""; +CA06i="0"; +HMVC=""; +CTVS=""; +CTVSi="0"; +CTVA=""; +CTVAi="0"; +WKCC=""; +WKCCi="0"; +TVBN=""; +VP01=""; +VP01i="-1"; +VP02=""; +VP02i="-1"; +VP03=""; +VP03i="-1"; +VPOT=""; +WWVT=""; +WWVTi="0"; +FKTR=""; +FKTP=""; +FKOP=""; +PKOO=""; +C1AG=""; +C1FV=""; +C2AG=""; +C2FV=""; +C3AG=""; +C3FV=""; +C4AG=""; +C4FV=""; +C1A2=""; +N1HT=""; +N1VT=""; +C2A2=""; +N2HT=""; +N2VT=""; +C3A2=""; +N3HT=""; +N3VT=""; +C4A2=""; +N4HT=""; +N4VT=""; +HECG=""; +HECGi="-1"; +HEIC=""; +HEICi="-1"; +HECC=""; +HECCi="-1"; +HEDV=""; +HEDVi="-1"; +PVPR=""; +PVPRi="0"; +PPOT=""; +BVOV=""; +BVOVi="-1"; +HUVV=""; +HUVVi="0"; +HUOT=""; +RCVC=""; +RCVCi="-1"; +HRVC=""; +HRVCi="0"; +HROT=""; + +NCP1=""; +CD01=""; +CD02=""; +CD03=""; +CD04=""; +CD05=""; +CD01i=-1; +CD02i=-1; +CD03i=-1; +CD04i=-1; +CD05i=-1; +RF73=""; +RF74=""; +RF75=""; +RF76=""; +RF77=""; +RF78=""; +RF79=""; +RF80=""; +RF81=""; +RF82=""; +RF83=""; +RF84=""; +RF85=""; +RF86=""; +RF73i=-1; +RF74i=-1; +RF75i=-1; +RF76i=-1; +RF77i=-1; +RF78i=-1; +RF79i=-1; +RF80i=-1; +RF81i=-1; +RF82i=-1; +RF83i=-1; +RF84i=-1; +RF85i=-1; +RF86i=-1; +YUDC=""; +YUDCi=0; +OCPB=""; +IF49=""; +IF50=""; +MA27=""; + +CP01=""; +CP02=""; +CP03=""; +CP04=""; +CP05=""; +CP06=""; +CP07=""; +CP08=""; +CP09=""; +CP10=""; +CP11=""; +CPFI=""; +OBRN=""; +OMDL=""; +SNQU=""; +SNQUi=0; +TS01=""; +TS02=""; +TS03=""; +TS04=""; +TS05=""; +TS06=""; +TS07=""; +TS08=""; +RPAU=""; +RPAUi=0; +US01=""; +US02=""; +US03=""; +US04=""; +US05=""; +US06=""; +US07=""; +US08=""; +US09=""; +US10=""; +US11=""; +US12=""; +US13=""; +US14=""; +US01i=-1; +US02i=-1; +US03i=-1; +US04i=-1; +US05i=-1; +US06i=-1; +US07i=-1; +US08i=-1; +US09i=-1; +US10i=-1; +US11i=-1; +US12i=-1; +US13i=-1; +US14i=-1; +LK01=""; +LK02=""; +LK03=""; +LK04=""; +LK05=""; +LK06=""; +LK07=""; +LK08=""; +LK09=""; +LK10=""; +LK11=""; +LK12=""; +LK13=""; +LK14=""; +LK01i=-1; +LK02i=-1; +LK03i=-1; +LK04i=-1; +LK05i=-1; +LK06i=-1; +LK07i=-1; +LK08i=-1; +LK09i=-1; +LK10i=-1; +LK11i=-1; +LK12i=-1; +LK13i=-1; +LK14i=-1; +NCID=""; +NCIDi=0; +NP01=""; +NP02=""; +NP03=""; +NP04=""; +NP05=""; +NP06=""; +NP07=""; +NP08=""; +PLPH=""; +PLPHi=0; +LPFI=""; + +POP2=""; +POP2i=0; +OPP2=""; +PULO=""; +PULOi=0; +ARTI=""; +ARTIi=0; +FND2=""; +FND2i=-1; +IWUM=""; +IWUMi=0; +VTPS=""; +VTPSi=0; +VPFI=""; +MART=""; +MARTi=0; + +OB15=""; +IF69=""; +IF70=""; +IF71=""; +OF20=""; +OS20=""; +BR20=""; +OF21=""; +OS21=""; +BR21=""; +FC18=""; +FC18i=-1; + +IF72=""; +IF73=""; +IF74=""; +IF75=""; +IF76=""; +IF77=""; +IF78=""; +MA29=""; +MA30=""; +OF22=""; +OS22=""; +BR22=""; + +IF79=""; +IF80=""; +IF81=""; +MA31=""; +OF23=""; +OS23=""; +BR23=""; +OF24=""; +OS24=""; +BR24=""; +OF25=""; +OS25=""; +BR25=""; +OF26=""; +OS26=""; +BR26=""; +FC19=""; +FC19i=-1; +IF51=""; +SUIN=""; +SUINi=-1; +CBRN=""; +CBRNi=0; +PICW=""; +PICWi=-1; +PICI=""; +PICIi=-1; +WS01=""; +WS02=""; +WS03=""; +WS04=""; +WS05=""; +WS06=""; +WS07=""; +WS08=""; +WS09=""; +WS10=""; +WSOT=""; +WR01=""; +WR02=""; +WR03=""; +WR04=""; +WR05=""; +WR06=""; +WR07=""; +WR08=""; +WR09=""; +WR10=""; +WR11=""; +WR12=""; +WR13=""; +SV01=""; +SV02=""; +SV03=""; +BMOL=""; +BMOLi=-1; +WTBM=""; +WTBMi=0; +WJSU=""; +WJSUi=0; + +OF27=""; +OS27=""; +BR27=""; +OF28=""; +OS28=""; +BR28=""; +IF82=""; +IF83=""; +MA32=""; +MA33=""; +MA34=""; + +SFOT=""; + +A_Reg=0; +DI_Reg_Code=0; + +function formData() { + age_header="19"; + data=""; + data+="&UNID="+UNID + +"&DIstat="+DI_Reg_Code + +"&EMAL="+EMAL + +"&PASS="+PASS + +"&PASV="+PASV + +"&FNAM="+FNAM + +"&LNAM="+LNAM + +"&ADD1="+ADD1 + +"&ADD2="+ADD2 + +"&CITY="+CITY + +"&STAT="+STAT + +"&ZIPC="+ZIPC + +"&PHON="+PHON + +"&AGES="+age_header+AGES + +"&SEXX="+SEXX + +"&OCCU="+OCCU + +"&OCCO="+OCCO + +"&MODL="+MODL + +"&SRNU="+SRNU + +"&MNTH="+MNTH + +"&YEAR="+YEAR + +"&POPR="+POPR + +"&OPOP="+OPOP + +"&WHEN="+WHEN + +"&INFL="+INFL + +"&FNDS="+FNDS + +"&WGFT="+WGFT + +"&HM01="+HM01 + +"&HM02="+HM02 + +"&HM03="+HM03 + +"&HM04="+HM04 + +"&HM05="+HM05 + +"&HM06="+HM06 + +"&HM07="+HM07 + +"&HM08="+HM08 + +"&HM09="+HM09 + +"&HM10="+HM10 + +"&HM11="+HM11 + +"&HM12="+HM12 + +"&HM13="+HM13 + +"&HM14="+HM14 + +"&HM15="+HM15 + +"&HM16="+HM16 + +"&HM17="+HM17 + +"&HM18="+HM18 + +"&HM19="+HM19 + +"&HM20="+HM20 + +"&HM21="+HM21 + +"&HM22="+HM22 + +"&HM23="+HM23 + +"&HM24="+HM24 + +"&HS01="+HS01 + +"&HS02="+HS02 + +"&HS03="+HS03 + +"&HS04="+HS04 + +"&HS05="+HS05 + +"&HS06="+HS06 + +"&HS07="+HS07 + +"&HS08="+HS08 + +"&HS09="+HS09 + +"&HS10="+HS10 + +"&HS11="+HS11 + +"&HS12="+HS12 + +"&HS13="+HS13 + +"&HS14="+HS14 + +"&HS15="+HS15 + +"&HS16="+HS16 + +"&HS17="+HS17 + +"&HS18="+HS18 + +"&HS19="+HS19 + +"&HS20="+HS20 + +"&HS21="+HS21 + +"&HS22="+HS22 + +"&HS23="+HS23 + +"&HS24="+HS24 + +"&PL01="+PL01 + +"&PL02="+PL02 + +"&PL03="+PL03 + +"&PL04="+PL04 + +"&PL05="+PL05 + +"&PL06="+PL06 + +"&PL07="+PL07 + +"&PL08="+PL08 + +"&PL09="+PL09 + +"&PL10="+PL10 + +"&PL11="+PL11 + +"&PL12="+PL12 + +"&PL13="+PL13 + +"&PL14="+PL14 + +"&PL15="+PL15 + +"&PL16="+PL16 + +"&PL17="+PL17 + +"&PL18="+PL18 + +"&PL19="+PL19 + +"&PL20="+PL20 + +"&PL21="+PL21 + +"&PL22="+PL22 + +"&PL23="+PL23 + +"&PL24="+PL24 + +"&TVSO="+TVSO + +"&CE01="+CE01 + +"&CE02="+CE02 + +"&NEMA="+NEMA + +"&PPUR="+PPUR + +"&PPUO="+PPUO + +"&CON1="+CON1 + +"&CON2="+CON2 + +"&CON3="+CON3 + +"&STNM="+STNM + +"&FE01="+FE01 + +"&FE02="+FE02 + +"&FE03="+FE03 + +"&FE04="+FE04 + +"&FE05="+FE05 + +"&FE06="+FE06 + +"&FE07="+FE07 + +"&FE08="+FE08 + +"&FE09="+FE09 + +"&FE10="+FE10 + +"&FE11="+FE11 + +"&FE12="+FE12 + +"&FE13="+FE13 + +"&FE14="+FE14 + +"&FE15="+FE15 + +"&FE16="+FE16 + +"&FE17="+FE17 + +"&FE18="+FE18 + +"&FE19="+FE19 + +"&FE20="+FE20 + +"&FE21="+FE21 + +"&FE22="+FE22 + +"&FE23="+FE23 + +"&FE24="+FE24 + +"&FE25="+FE25 + +"&FE26="+FE26 + +"&FE27="+FE27 + +"&FE28="+FE28 + +"&FE29="+FE29 + +"&FE30="+FE30 + +"&FE31="+FE31 + +"&FE32="+FE32 + +"&FE33="+FE33 + +"&FE34="+FE34 + +"&FEOT="+FEOT + +"&NF01="+NF01 + +"&NF02="+NF02 + +"&NF03="+NF03 + +"&NF04="+NF04 + +"&NF05="+NF05 + +"&NF06="+NF06 + +"&NF07="+NF07 + +"&NF08="+NF08 + +"&NF09="+NF09 + +"&NF10="+NF10 + +"&NF11="+NF11 + +"&NF12="+NF12 + +"&NF13="+NF13 + +"&NF14="+NF14 + +"&NF15="+NF15 + +"&NF16="+NF16 + +"&NF17="+NF17 + +"&NF18="+NF18 + +"&NF19="+NF19 + +"&NFOT="+NFOT + +"&OSYS="+OSYS + +"&OSOT="+OSOT + +"&IMGS="+IMGS + +"&PBY1="+PBY1 + +"&PBY2="+PBY2 + +"&PBY3="+PBY3 + +"&PBY4="+PBY4 + +"&PBY5="+PBY5 + +"&PBY6="+PBY6 + +"&PBY7="+PBY7 + +"&PBY8="+PBY8 + +"&OPBY="+OPBY + +"&OWNC="+OWNC + +"&CUSE="+CUSE + +"&OCUS="+OCUS + +"&WCAM="+WCAM + +"&OC01="+OC01 + +"&OC02="+OC02 + +"&OC03="+OC03 + +"&OC04="+OC04 + +"&OC05="+OC05 + +"&OC06="+OC06 + +"&OC07="+OC07 + +"&OC08="+OC08 + +"&OC09="+OC09 + +"&OC10="+OC10 + +"&OC11="+OC11 + +"&CU01="+CU01 + +"&CU02="+CU02 + +"&CU03="+CU03 + +"&CU04="+CU04 + +"&CU05="+CU05 + +"&CU06="+CU06 + +"&CU07="+CU07 + +"&CU08="+CU08 + +"&CU09="+CU09 + +"&CU10="+CU10 + +"&PLYB="+PLYB + +"&CCON="+CCON + +"&BC01="+BC01 + +"&BC02="+BC02 + +"&BC03="+BC03 + +"&BC04="+BC04 + +"&BC05="+BC05 + +"&BC06="+BC06 + +"&IN01="+IN01 + +"&IN02="+IN02 + +"&IN03="+IN03 + +"&IN04="+IN04 + +"&IN05="+IN05 + +"&IN06="+IN06 + +"&IN07="+IN07 + +"&IN08="+IN08 + +"&IN09="+IN09 + +"&IN10="+IN10 + +"&IN11="+IN11 + +"&IN12="+IN12 + +"&IN13="+IN13 + +"&IN14="+IN14 + +"&IN15="+IN15 + +"&FI01="+FI01 + +"&FI02="+FI02 + +"&FI03="+FI03 + +"&FI04="+FI04 + +"&FI05="+FI05 + +"&FI06="+FI06 + +"&FI07="+FI07 + +"&FI08="+FI08 + +"&FI09="+FI09 + +"&FI10="+FI10 + +"&FI11="+FI11 + +"&FI12="+FI12 + +"&FI13="+FI13 + +"&FI14="+FI14 + +"&FI15="+FI15 + +"&FI16="+FI16 + +"&FI17="+FI17 + +"&FI18="+FI18 + +"&FI19="+FI19 + +"&FI20="+FI20 + +"&FI21="+FI21 + +"&FI22="+FI22 + +"&FI23="+FI23 + +"&FI24="+FI24 + +"&FI25="+FI25 + +"&FI26="+FI26 + +"&FI27="+FI27 + +"&FI28="+FI28 + +"&FI29="+FI29 + +"&FI30="+FI30 + +"&FI31="+FI31 + +"&FI32="+FI32 + +"&FI33="+FI33 + +"&FI34="+FI34 + +"&FI35="+FI35 + +"&FI36="+FI36 + +"&FI37="+FI37 + +"&FI38="+FI38 + +"&FI39="+FI39 + +"&FI40="+FI40 + +"&FI41="+FI41 + +"&FI42="+FI42 + +"&FI43="+FI43 + +"&FI44="+FI44 + +"&FI45="+FI45 + +"&FI46="+FI46 + +"&FI47="+FI47 + +"&FI48="+FI48 + +"&FI49="+FI49 + +"&FI50="+FI50 + +"&FI51="+FI51 + +"&FI52="+FI52 + +"&FI53="+FI53 + +"&FI54="+FI54 + +"&FI55="+FI55 + +"&FI56="+FI56 + +"&FI57="+FI57 + +"&FI58="+FI58 + +"&FF01="+FF01 + +"&FF02="+FF02 + +"&FF03="+FF03 + +"&FF04="+FF04 + +"&FF05="+FF05 + +"&FF06="+FF06 + +"&FF07="+FF07 + +"&FF08="+FF08 + +"&FF09="+FF09 + +"&FF10="+FF10 + +"&FF11="+FF11 + +"&FF12="+FF12 + +"&FF13="+FF13 + +"&FF14="+FF14 + +"&FF15="+FF15 + +"&FF16="+FF16 + +"&FF17="+FF17 + +"&FF18="+FF18 + +"&FF19="+FF19 + +"&FF20="+FF20 + +"&FF21="+FF21 + +"&FF22="+FF22 + +"&PPQT="+PPQT + +"&PSQT="+PSQT + +"&LCDQ="+LCDQ + +"&NITQ="+NITQ + +"&NTSQ="+NTSQ + +"&GENQ="+GENQ + +"&DSNQ="+DSNQ + +"&OPMQ="+OPMQ + +"&PRCQ="+PRCQ + +"&BATQ="+BATQ + +"&CMPQ="+CMPQ + +"&DSCQ="+DSCQ + +"&MSSQ="+MSSQ + +"&MSIQ="+MSIQ + +"&PGSQ="+PGSQ + +"&PCPQ="+PCPQ + +"&AO01="+AO01 + +"&AO02="+AO02 + +"&AO03="+AO03 + +"&AO04="+AO04 + +"&AO05="+AO05 + +"&AO06="+AO06 + +"&AO07="+AO07 + +"&AO08="+AO08 + +"&AO09="+AO09 + +"&AO10="+AO10 + +"&AO11="+AO11 + +"&AO12="+AO12 + +"&AO13="+AO13 + +"&AO14="+AO14 + +"&AO15="+AO15 + +"&AO16="+AO16 + +"&AO17="+AO17 + +"&AO18="+AO18 + +"&AO19="+AO19 + +"&AO20="+AO20 + +"&AO21="+AO21 + +"&AO22="+AO22 + +"&AO23="+AO23 + +"&AO24="+AO24 + +"&AO25="+AO25 + +"&AO26="+AO26 + +"&AO27="+AO27 + +"&AO28="+AO28 + +"&AO29="+AO29 + +"&AO30="+AO30 + +"&AO31="+AO31 + +"&AO32="+AO32 + +"&AO33="+AO33 + +"&AO34="+AO34 + +"&AO35="+AO35 + +"&IS01="+IS01 + +"&IS02="+IS02 + +"&IS03="+IS03 + +"&IS04="+IS04 + +"&IS05="+IS05 + +"&IS06="+IS06 + +"&IS07="+IS07 + +"&IS08="+IS08 + +"&IS09="+IS09 + +"&IS10="+IS10 + +"&IS11="+IS11 + +"&IS12="+IS12 + +"&IS13="+IS13 + +"&IS14="+IS14 + +"&IS15="+IS15 + +"&IS16="+IS16 + +"&IS17="+IS17 + +"&IS18="+IS18 + +"&IS19="+IS19 + +"&IS20="+IS20 + +"&IS21="+IS21 + +"&IS22="+IS22 + +"&IS23="+IS23 + +"&IS24="+IS24 + +"&IS25="+IS25 + +"&IS26="+IS26 + +"&IS27="+IS27 + +"&IS28="+IS28 + +"&IS29="+IS29 + +"&IS30="+IS30 + +"&IS31="+IS31 + +"&IS32="+IS32 + +"&IS33="+IS33 + +"&IS34="+IS34 + +"&IS35="+IS35 + +"&B601="+B601 + +"&B602="+B602 + +"&B603="+B603 + +"&B604="+B604 + +"&B605="+B605 + +"&B606="+B606 + +"&B607="+B607 + +"&B608="+B608 + +"&B609="+B609 + +"&B610="+B610 + +"&B611="+B611 + +"&B612="+B612 + +"&B613="+B613 + +"&B614="+B614 + +"&B615="+B615 + +"&B616="+B616 + +"&B617="+B617 + +"&B618="+B618 + +"&B619="+B619 + +"&B620="+B620 + +"&B621="+B621 + +"&B622="+B622 + +"&B623="+B623 + +"&B624="+B624 + +"&B625="+B625 + +"&B626="+B626 + +"&B627="+B627 + +"&B628="+B628 + +"&B629="+B629 + +"&B630="+B630 + +"&B631="+B631 + +"&B632="+B632 + +"&B633="+B633 + +"&B634="+B634 + +"&B635="+B635 + +"&CTYP="+CTYP + +"&AO36="+AO36 + +"&AO37="+AO37 + +"&IS36="+IS36 + +"&IS37="+IS37 + +"&B636="+B636 + +"&B637="+B637 + +"&FA01="+FA01 + +"&FA02="+FA02 + +"&FA03="+FA03 + +"&FA04="+FA04 + +"&FA05="+FA05 + +"&FA06="+FA06 + +"&FA07="+FA07 + +"&FA08="+FA08 + +"&FA09="+FA09 + +"&FA10="+FA10 + +"&FA11="+FA11 + +"&FA12="+FA12 + +"&FA13="+FA13 + +"&FA14="+FA14 + +"&FA15="+FA15 + +"&FA16="+FA16 + +"&FA17="+FA17 + +"&FA18="+FA18 + +"&FA19="+FA19 + +"&FA20="+FA20 + +"&FA21="+FA21 + +"&FA22="+FA22 + +"&FA23="+FA23 + +"&FA24="+FA24 + +"&FA25="+FA25 + +"&FA26="+FA26 + +"&FA27="+FA27 + +"&SI01="+SI01 + +"&SI02="+SI02 + +"&SI03="+SI03 + +"&SI04="+SI04 + +"&SI05="+SI05 + +"&SI06="+SI06 + +"&SI07="+SI07 + +"&SI08="+SI08 + +"&SI09="+SI09 + +"&SI10="+SI10 + +"&SI11="+SI11 + +"&SI12="+SI12 + +"&SI13="+SI13 + +"&SI14="+SI14 + +"&SI15="+SI15 + +"&SI16="+SI16 + +"&SI17="+SI17 + +"&SI18="+SI18 + +"&SI19="+SI19 + +"&SI20="+SI20 + +"&SI21="+SI21 + +"&SI22="+SI22 + +"&SI23="+SI23 + +"&SI24="+SI24 + +"&SI25="+SI25 + +"&SI26="+SI26 + +"&SI27="+SI27 + +"&II01="+II01 + +"&II02="+II02 + +"&II03="+II03 + +"&II04="+II04 + +"&II05="+II05 + +"&II06="+II06 + +"&II07="+II07 + +"&II08="+II08 + +"&II09="+II09 + +"&II10="+II10 + +"&OB01="+OB01 + +"&OB02="+OB02 + +"&OB03="+OB03 + +"&OB04="+OB04 + +"&PUCO="+PUCO + +"&SI28="+SI28 + +"&SI29="+SI29 + +"&SI30="+SI30 + +"&SI31="+SI31 + +"&SI32="+SI32 + +"&SI33="+SI33 + +"&SI34="+SI34 + +"&SI35="+SI35 + +"&SI36="+SI36 + +"&SI37="+SI37 + +"&SI38="+SI38 + +"&SI39="+SI39 + +"&SI40="+SI40 + +"&SI41="+SI41 + +"&II11="+II11 + +"&II12="+II12 + +"&II13="+II13 + +"&II14="+II14 + +"&SF01="+SF01 + +"&SF02="+SF02 + +"&SF03="+SF03 + +"&SF04="+SF04 + +"&SF05="+SF05 + +"&SF06="+SF06 + +"&SF07="+SF07 + +"&SF08="+SF08 + +"&SF09="+SF09 + +"&SF10="+SF10 + +"&SF11="+SF11 + +"&SF12="+SF12 + +"&SF13="+SF13 + +"&SF14="+SF14 + +"&SF15="+SF15 + +"&SF16="+SF16 + +"&SF17="+SF17 + +"&SF18="+SF18 + +"&SF19="+SF19 + +"&SF20="+SF20 + +"&SF21="+SF21 + +"&SF22="+SF22 + +"&SF23="+SF23 + +"&SF24="+SF24 + +"&SF25="+SF25 + +"&SF26="+SF26 + +"&SF27="+SF27 + +"&SF28="+SF28 + +"&SF29="+SF29 + +"&SF30="+SF30 + +"&SF31="+SF31 + +"&SF32="+SF32 + +"&SF33="+SF33 + +"&SF34="+SF34 + +"&SF35="+SF35 + +"&SF36="+SF36 + +"&SF37="+SF37 + +"&SF38="+SF38 + +"&SF39="+SF39 + +"&SF40="+SF40 + +"&SF41="+SF41 + +"&SF42="+SF42 + +"&SF43="+SF43 + +"&SF44="+SF44 + +"&SF45="+SF45 + +"&SF46="+SF46 + +"&SF47="+SF47 + +"&SF48="+SF48 + +"&SF49="+SF49 + +"&FA28="+FA28 + +"&FA29="+FA29 + +"&FA30="+FA30 + +"&FA31="+FA31 + +"&AO38="+AO38 + +"&IS38="+IS38 + +"&B638="+B638 + +"&PRMU="+PRMU + +"&PRMO="+PRMO + +"&CAMU="+CAMU + +"&CAMO="+CAMO + +"&INDU="+INDU + +"&INDO="+INDO + +"&INDH="+INDH + +"&II15="+II15 + +"&II16="+II16 + +"&II17="+II17 + +"&II18="+II18 + +"&II19="+II19 + +"&II20="+II20 + +"&PLYP="+PLYP + +"&WEDT="+WEDT + +"&FM01="+FM01 + +"&FM02="+FM02 + +"&FM03="+FM03 + +"&FM04="+FM04 + +"&FM05="+FM05 + +"&FM06="+FM06 + +"&FM07="+FM07 + +"&FM08="+FM08 + +"&FM09="+FM09 + +"&FM10="+FM10 + +"&FM11="+FM11 + +"&FM12="+FM12 + +"&FM13="+FM13 + +"&FM14="+FM14 + +"&FM15="+FM15 + +"&FM16="+FM16 + +"&FM17="+FM17 + +"&FM18="+FM18 + +"&FM19="+FM19 + +"&FM20="+FM20 + +"&FM21="+FM21 + +"&FM22="+FM22 + +"&FM23="+FM23 + +"&FM24="+FM24 + +"&FM25="+FM25 + +"&FM26="+FM26 + +"&FM27="+FM27 + +"&FL01="+FL01 + +"&FL02="+FL02 + +"&FL03="+FL03 + +"&FL04="+FL04 + +"&FL05="+FL05 + +"&FL06="+FL06 + +"&FL07="+FL07 + +"&FL08="+FL08 + +"&FL09="+FL09 + +"&FL10="+FL10 + +"&FL11="+FL11 + +"&FL12="+FL12 + +"&FL13="+FL13 + +"&FL14="+FL14 + +"&FL15="+FL15 + +"&FL16="+FL16 + +"&FL17="+FL17 + +"&FL18="+FL18 + +"&FL19="+FL19 + +"&FL20="+FL20 + +"&FL21="+FL21 + +"&FL22="+FL22 + +"&FL23="+FL23 + +"&FL24="+FL24 + +"&FL25="+FL25 + +"&FL26="+FL26 + +"&FL27="+FL27 + +"&AE01="+AE01 + +"&AE02="+AE02 + +"&AE03="+AE03 + +"&AE04="+AE04 + +"&AE05="+AE05 + +"&AE06="+AE06 + +"&AE07="+AE07 + +"&AE08="+AE08 + +"&AE09="+AE09 + +"&AE10="+AE10 + +"&AP01="+AP01 + +"&AP02="+AP02 + +"&AP03="+AP03 + +"&AP04="+AP04 + +"&AP05="+AP05 + +"&AP06="+AP06 + +"&AP07="+AP07 + +"&AP08="+AP08 + +"&AP09="+AP09 + +"&AP10="+AP10 + +"&AG01="+AG01 + +"&AG02="+AG02 + +"&AG03="+AG03 + +"&AG04="+AG04 + +"&AG05="+AG05 + +"&AG06="+AG06 + +"&AG07="+AG07 + +"&AG08="+AG08 + +"&AG09="+AG09 + +"&AG10="+AG10 + +"&AF01="+AF01 + +"&AF02="+AF02 + +"&AF03="+AF03 + +"&AF04="+AF04 + +"&AF05="+AF05 + +"&AF06="+AF06 + +"&AF07="+AF07 + +"&AF08="+AF08 + +"&AF09="+AF09 + +"&AF10="+AF10 + +"&BA01="+BA01 + +"&BA02="+BA02 + +"&BA03="+BA03 + +"&BA04="+BA04 + +"&BA05="+BA05 + +"&BA06="+BA06 + +"&BA07="+BA07 + +"&BA08="+BA08 + +"&BA09="+BA09 + +"&BA10="+BA10 + +"&BA11="+BA11 + +"&BA12="+BA12 + +"&BA13="+BA13 + +"&BA14="+BA14 + +"&BA15="+BA15 + +"&CNCT="+CNCT + +"&TCNT="+TCNT + +"&OCNT="+OCNT + +"&CMNT="+CMNT + +"&PTYP="+PTYP + +"&REPS="+REPS + +"&REPO="+REPO + +"&SDIS="+SDIS + +"&SDSO="+SDSO + +"&WUSE="+WUSE + +"&WUSO="+WUSO + +"&RF01="+RF01 + +"&RF02="+RF02 + +"&RF03="+RF03 + +"&RF04="+RF04 + +"&RF05="+RF05 + +"&RF06="+RF06 + +"&RF07="+RF07 + +"&RF08="+RF08 + +"&RFOT="+RFOT + +"&MOUF="+MOUF + +"&MOFO="+MOFO + +"&CO01="+CO01 + +"&CO02="+CO02 + +"&CO03="+CO03 + +"&CO04="+CO04 + +"&CO05="+CO05 + +"&CO06="+CO06 + +"&CO07="+CO07 + +"&WC01="+WC01 + +"&WC02="+WC02 + +"&WC03="+WC03 + +"&WC04="+WC04 + +"&WC05="+WC05 + +"&WC06="+WC06 + +"&WC07="+WC07 + +"&DVDS="+DVDS + +"&CDDS="+CDDS + +"&MINI="+MINI + +"&RCRD="+RCRD + +"&TAPE="+TAPE + +"&FDVD="+FDVD + +"&ODVD="+ODVD + +"&NCHD="+NCHD + +"&INCM="+INCM + +"&HTYP="+HTYP + +"&AOLE="+AOLE + +"&COLE="+COLE + +"&OOLE="+OOLE + +"&HM25="+HM25 + +"&HM26="+HM26 + +"&HM27="+HM27 + +"&HS25="+HS25 + +"&HS26="+HS26 + +"&HS27="+HS27 + +"&PL25="+PL25 + +"&PL26="+PL26 + +"&PL27="+PL27 + +"&IF01="+IF01 + +"&IF02="+IF02 + +"&IF03="+IF03 + +"&IF04="+IF04 + +"&IF05="+IF05 + +"&IF06="+IF06 + +"&IF07="+IF07 + +"&IF08="+IF08 + +"&IF09="+IF09 + +"&IF10="+IF10 + +"&IF11="+IF11 + +"&IF12="+IF12 + +"&IF13="+IF13 + +"&IF14="+IF14 + +"&IF15="+IF15 + +"&IF16="+IF16 + +"&IF17="+IF17 + +"&IF18="+IF18 + +"&IF19="+IF19 + +"&IF20="+IF20 + +"&IF21="+IF21 + +"&IF22="+IF22 + +"&IF23="+IF23 + +"&IF24="+IF24 + +"&IF25="+IF25 + +"&IF26="+IF26 + +"&IF27="+IF27 + +"&IF28="+IF28 + +"&IF29="+IF29 + +"&IF30="+IF30 + +"&IF31="+IF31 + +"&IF32="+IF32 + +"&IF33="+IF33 + +"&IF34="+IF34 + +"&IF35="+IF35 + +"&IF36="+IF36 + +"&IF37="+IF37 + +"&IF38="+IF38 + +"&IF39="+IF39 + +"&IF40="+IF40 + +"&IF41="+IF41 + +"&IFOT="+IFOT + +"&MA01="+MA01 + +"&MA02="+MA02 + +"&MA03="+MA03 + +"&MA04="+MA04 + +"&MA05="+MA05 + +"&MA06="+MA06 + +"&MA07="+MA07 + +"&MA08="+MA08 + +"&MA09="+MA09 + +"&MA10="+MA10 + +"&MA11="+MA11 + +"&MA12="+MA12 + +"&MA13="+MA13 + +"&MA14="+MA14 + +"&MA15="+MA15 + +"&MA16="+MA16 + +"&MA17="+MA17 + +"&MA18="+MA18 + +"&MA19="+MA19 + +"&MA20="+MA20 + +"&MA21="+MA21 + +"&MA22="+MA22 + +"&MA23="+MA23 + +"&MA24="+MA24 + +"&MA25="+MA25 + +"&MA26="+MA26 + +"&MAOT="+MAOT + +"&OF01="+OF01 + +"&OF02="+OF02 + +"&OF03="+OF03 + +"&OF04="+OF04 + +"&OF05="+OF05 + +"&OF06="+OF06 + +"&OF07="+OF07 + +"&OF08="+OF08 + +"&OF09="+OF09 + +"&OF10="+OF10 + +"&OF11="+OF11 + +"&OF12="+OF12 + +"&OF13="+OF13 + +"&OF14="+OF14 + +"&OF15="+OF15 + +"&OF16="+OF16 + +"&OF17="+OF17 + +"&OF18="+OF18 + +"&OF19="+OF19 + +"&OS01="+OS01 + +"&OS02="+OS02 + +"&OS03="+OS03 + +"&OS04="+OS04 + +"&OS05="+OS05 + +"&OS06="+OS06 + +"&OS07="+OS07 + +"&OS08="+OS08 + +"&OS09="+OS09 + +"&OS10="+OS10 + +"&OS11="+OS11 + +"&OS12="+OS12 + +"&OS13="+OS13 + +"&OS14="+OS14 + +"&OS15="+OS15 + +"&OS16="+OS16 + +"&OS17="+OS17 + +"&OS18="+OS18 + +"&OS19="+OS19 + +"&BR01="+BR01 + +"&BR02="+BR02 + +"&BR03="+BR03 + +"&BR04="+BR04 + +"&BR05="+BR05 + +"&BR06="+BR06 + +"&BR07="+BR07 + +"&BR08="+BR08 + +"&BR09="+BR09 + +"&BR10="+BR10 + +"&BR11="+BR11 + +"&BR12="+BR12 + +"&BR13="+BR13 + +"&BR14="+BR14 + +"&BR15="+BR15 + +"&BR16="+BR16 + +"&BR17="+BR17 + +"&BR18="+BR18 + +"&BR19="+BR19 + +"&FC01="+FC01 + +"&FC02="+FC02 + +"&FC03="+FC03 + +"&FC04="+FC04 + +"&FC05="+FC05 + +"&FC06="+FC06 + +"&FC07="+FC07 + +"&FC08="+FC08 + +"&FC09="+FC09 + +"&FC10="+FC10 + +"&FC11="+FC11 + +"&FC12="+FC12 + +"&FC13="+FC13 + +"&FC14="+FC14 + +"&FC15="+FC15 + +"&FC16="+FC16 + +"&FC17="+FC17 + +"&UNET="+UNET + +"&MARS="+MARS + +"&EWAR="+EWAR + +"&OCOT="+OCOT + +"&CG00="+CG00 + +"&CG01="+CG01 + +"&CG02="+CG02 + +"&CG03="+CG03 + +"&CG04="+CG04 + +"&CG05="+CG05 + +"&CG06="+CG06 + +"&CG07="+CG07 + +"&CG08="+CG08 + +"&CG09="+CG09 + +"&CG10="+CG10 + +"&CG11="+CG11 + +"&COCO="+COCO + +"&MI00="+MI00 + +"&MI01="+MI01 + +"&MI02="+MI02 + +"&MI03="+MI03 + +"&MI04="+MI04 + +"&MI05="+MI05 + +"&MI06="+MI06 + +"&MI07="+MI07 + +"&MI08="+MI08 + +"&MI09="+MI09 + +"&MI10="+MI10 + +"&MI11="+MI11 + +"&MI12="+MI12 + +"&MI13="+MI13 + +"&MI14="+MI14 + +"&YD01="+YD01 + +"&YD02="+YD02 + +"&YD03="+YD03 + +"&YD04="+YD04 + +"&YD05="+YD05 + +"&YD06="+YD06 + +"&YD07="+YD07 + +"&YD08="+YD08 + +"&YD09="+YD09 + +"&YD10="+YD10 + +"&YD11="+YD11 + +"&YD12="+YD12 + +"&YD13="+YD13 + +"&YD14="+YD14 + +"&YD15="+YD15 + +"&YD16="+YD16 + +"&YD17="+YD17 + +"&YD18="+YD18 + +"&YD19="+YD19 + +"&YD20="+YD20 + +"&YD21="+YD21 + +"&YD22="+YD22 + +"&YD23="+YD23 + +"&YD24="+YD24 + +"&YD25="+YD25 + +"&YD26="+YD26 + +"&YD27="+YD27 + +"&YD28="+YD28 + +"&YD29="+YD29 + +"&YD30="+YD30 + +"&YD31="+YD31 + +"&YD32="+YD32 + +"&YD33="+YD33 + +"&YD34="+YD34 + +"&YD35="+YD35 + +"&YD36="+YD36 + +"&YD37="+YD37 + +"&YD38="+YD38 + +"&YD39="+YD39 + +"&YD40="+YD40 + +"&YD41="+YD41 + +"&YD42="+YD42 + +"&YD43="+YD43 + +"&YD44="+YD44 + +"&YD45="+YD45 + +"&YD46="+YD46 + +"&YD47="+YD47 + +"&YD48="+YD48 + +"&YD49="+YD49 + +"&YD50="+YD50 + +"&YD51="+YD51 + +"&YD52="+YD52 + +"&YD53="+YD53 + +"&YD54="+YD54 + +"&YD55="+YD55 + +"&NI00="+NI00 + +"&NI01="+NI01 + +"&NI02="+NI02 + +"&NI03="+NI03 + +"&NI04="+NI04 + +"&NI05="+NI05 + +"&NI06="+NI06 + +"&NI07="+NI07 + +"&NI08="+NI08 + +"&NI09="+NI09 + +"&NI10="+NI10 + +"&NI11="+NI11 + +"&NI12="+NI12 + +"&NI13="+NI13 + +"&NI14="+NI14 + +"&NI15="+NI15 + +"&NI16="+NI16 + +"&NI17="+NI17 + +"&NI18="+NI18 + +"&NI19="+NI19 + +"&NI20="+NI20 + +"&NI21="+NI21 + +"&NI22="+NI22 + +"&NI23="+NI23 + +"&NI24="+NI24 + +"&NI25="+NI25 + +"&NI26="+NI26 + +"&NI27="+NI27 + +"&NIOT="+NIOT + +"&AC01="+AC01 + +"&AC02="+AC02 + +"&AC03="+AC03 + +"&AC04="+AC04 + +"&AC05="+AC05 + +"&AC06="+AC06 + +"&AC07="+AC07 + +"&AC08="+AC08 + +"&AC09="+AC09 + +"&AC10="+AC10 + +"&AC11="+AC11 + +"&AC12="+AC12 + +"&AC13="+AC13 + +"&AC14="+AC14 + +"&AC15="+AC15 + +"&AC16="+AC16 + +"&AC17="+AC17 + +"&AC18="+AC18 + +"&AC19="+AC19 + +"&AC20="+AC20 + +"&AC21="+AC21 + +"&AC22="+AC22 + +"&AC23="+AC23 + +"&AC24="+AC24 + +"&AO39="+AO39 + +"&IS39="+IS39 + +"&B639="+B639 + +"&AO40="+AO40 + +"&IS40="+IS40 + +"&B640="+B640 + +"&AO41="+AO41 + +"&IS41="+IS41 + +"&B641="+B641 + +"&AO42="+AO42 + +"&IS42="+IS42 + +"&B642="+B642 + +"&AO43="+AO43 + +"&IS43="+IS43 + +"&B643="+B643 + +"&EIMG="+EIMG + +"&IC01="+IC01 + +"&IC02="+IC02 + +"&IC03="+IC03 + +"&IC04="+IC04 + +"&IC05="+IC05 + +"&IC06="+IC06 + +"&IC07="+IC07 + +"&ICOT="+ICOT + +"&FA32="+FA32 + +"&EISC="+EISC + +"&COLR="+COLR + +"&WPOL="+WPOL + +"&SF50="+SF50 + +"&SF51="+SF51 + +"&SF52="+SF52 + +"&SF53="+SF53 + +"&SF54="+SF54 + +"&MDRI="+MDRI + +"&MDIR="+MDIR + +"&OB05="+OB05 + +"&OB06="+OB06 + +"&OB07="+OB07 + +"&OB08="+OB08 + +"&OB09="+OB09 + +"&OB10="+OB10 + +"&OB11="+OB11 + +"&OB12="+OB12 + +"&OBFI="+OBFI + +"&OP01="+OP01 + +"&OP02="+OP02 + +"&OP03="+OP03 + +"&OP04="+OP04 + +"&SMDR="+SMDR + +"&SMDO="+SMDO + +"&DMFI="+DMFI + +"&HMFD="+HMFD + +"&WSMM="+WSMM + +"&MMFI="+MMFI + +"&MDFP="+MDFP + +"&MDMP="+MDMP + +"&MDFC="+MDFC + +"&MDMC="+MDMC + +"&SF55="+SF55 + +"&SF56="+SF56 + +"&SF57="+SF57 + +"&SF58="+SF58 + +"&SF59="+SF59 + +"&SF60="+SF60 + +"&SF61="+SF61 + +"&SF62="+SF62 + +"&SF63="+SF63 + +"&SF64="+SF64 + +"&SF65="+SF65 + +"&SFFI="+SFFI + +"&RC01="+RC01 + +"&RC02="+RC02 + +"&RC03="+RC03 + +"&RC04="+RC04 + +"&RC05="+RC05 + +"&RC06="+RC06 + +"&RC07="+RC07 + +"&RC08="+RC08 + +"&RCFI="+RCFI + +"&RH01="+RH01 + +"&RH02="+RH02 + +"&RH03="+RH03 + +"&RH04="+RH04 + +"&RH05="+RH05 + +"&RH06="+RH06 + +"&RHFI="+RHFI + +"&FE35="+FE35 + +"&FE36="+FE36 + +"&FE37="+FE37 + +"&FE38="+FE38 + +"&FE39="+FE39 + +"&FE40="+FE40 + +"&FE41="+FE41 + +"&FE42="+FE42 + +"&FE43="+FE43 + +"&FE44="+FE44 + +"&FE45="+FE45 + +"&FE46="+FE46 + +"&FE47="+FE47 + +"&FE48="+FE48 + +"&FE49="+FE49 + +"&FE50="+FE50 + +"&FE51="+FE51 + +"&FE52="+FE52 + +"&FE53="+FE53 + +"&NCDK="+NCDK + +"&NPRM="+NPRM + +"&NBLM="+NBLM + +"&NVRC="+NVRC + +"&NCTP="+NCTP + +"&PMDP="+PMDP + +"&PMDR="+PMDR + +"&CRMD="+CRMD + +"&MDDK="+MDDK + +"&PUSE="+PUSE + +"&IF42="+IF42 + +"&IF43="+IF43 + +"&IF44="+IF44 + +"&IF45="+IF45 + +"&IF46="+IF46 + +"&IF47="+IF47 + +"&IF48="+IF48 + +"&OF00="+OF00 + +"&OS00="+OS00 + +"&BR00="+BR00 + +"&OB13="+OB13 + +"&OB14="+OB14 + +"&MO01="+MO01 + +"&MO02="+MO02 + +"&MO03="+MO03 + +"&MO04="+MO04 + +"&MO05="+MO05 + +"&MO06="+MO06 + +"&MO07="+MO07 + +"&MO08="+MO08 + +"&MO09="+MO09 + +"&MO10="+MO10 + +"&MO11="+MO11 + +"&MO12="+MO12 + +"&MO13="+MO13 + +"&RF09="+RF09 + +"&RF10="+RF10 + +"&RF11="+RF11 + +"&RF12="+RF12 + +"&RF13="+RF13 + +"&RF14="+RF14 + +"&RF15="+RF15 + +"&RF16="+RF16 + +"&RF17="+RF17 + +"&RF18="+RF18 + +"&RF19="+RF19 + +"&RF20="+RF20 + +"&RF21="+RF21 + +"&RF22="+RF22 + +"&RF23="+RF23 + +"&RF24="+RF24 + +"&RF25="+RF25 + +"&RF26="+RF26 + +"&RF27="+RF27 + +"&RF28="+RF28 + +"&RF29="+RF29 + +"&RF30="+RF30 + +"&RF31="+RF31 + +"&RF32="+RF32 + +"&RF33="+RF33 + +"&RF34="+RF34 + +"&RF35="+RF35 + +"&RF36="+RF36 + +"&RF37="+RF37 + +"&RF38="+RF38 + +"&RF39="+RF39 + +"&RF40="+RF40 + +"&RF41="+RF41 + +"&RF42="+RF42 + +"&RF43="+RF43 + +"&RF44="+RF44 + +"&RF45="+RF45 + +"&RF46="+RF46 + +"&RF47="+RF47 + +"&RF48="+RF48 + +"&RF49="+RF49 + +"&RF50="+RF50 + +"&RF51="+RF51 + +"&RF52="+RF52 + +"&RF53="+RF53 + +"&RF54="+RF54 + +"&RF55="+RF55 + +"&RF56="+RF56 + +"&RF57="+RF57 + +"&RF58="+RF58 + +"&RF59="+RF59 + +"&RF60="+RF60 + +"&RF61="+RF61 + +"&RF62="+RF62 + +"&RF63="+RF63 + +"&RF64="+RF64 + +"&RF65="+RF65 + +"&RF66="+RF66 + +"&RF67="+RF67 + +"&CO08="+CO08 + +"&CO09="+CO09 + +"&CO10="+CO10 + +"&CO11="+CO11 + +"&CO12="+CO12 + +"&CO13="+CO13 + +"&CO14="+CO14 + +"&CO15="+CO15 + +"&CO16="+CO16 + +"&CO17="+CO17 + +"&CO18="+CO18 + +"&CO19="+CO19 + +"&WUCP="+WUCP + +"&AVSM="+AVSM + +"&SD01="+SD01 + +"&SD02="+SD02 + +"&SD03="+SD03 + +"&SD04="+SD04 + +"&SD05="+SD05 + +"&SD06="+SD06 + +"&SD07="+SD07 + +"&TP01="+TP01 + +"&TP02="+TP02 + +"&TP03="+TP03 + +"&TP04="+TP04 + +"&WC08="+WC08 + +"&WC09="+WC09 + +"&WC10="+WC10 + +"&WC11="+WC11 + +"&WC12="+WC12 + +"&WC13="+WC13 + +"&WC14="+WC14 + +"&WC15="+WC15 + +"&MD01="+MD01 + +"&MD02="+MD02 + +"&MD03="+MD03 + +"&MD04="+MD04 + +"&MD05="+MD05 + +"&MD06="+MD06 + +"&MD07="+MD07 + +"&MD08="+MD08 + +"&MD09="+MD09 + +"&MD10="+MD10 + +"&MD11="+MD11 + +"&MD12="+MD12 + +"&MD13="+MD13 + +"&MD14="+MD14 + +"&MD15="+MD15 + +"&MF01="+MF01 + +"&MF02="+MF02 + +"&MF03="+MF03 + +"&MF04="+MF04 + +"&MF05="+MF05 + +"&MF06="+MF06 + +"&MF07="+MF07 + +"&MF08="+MF08 + +"&MF09="+MF09 + +"&MF10="+MF10 + +"&MF11="+MF11 + +"&MF12="+MF12 + +"&MF13="+MF13 + +"&MF14="+MF14 + +"&MF15="+MF15 + +"&PU01="+PU01 + +"&PU02="+PU02 + +"&PU03="+PU03 + +"&PU04="+PU04 + +"&PU05="+PU05 + +"&SF00="+SF00 + +"&NCDR="+NCDR + +"&AGCT="+AGCT + +"&MUS1="+MUS1 + +"&MUS2="+MUS2 + +"&MUS3="+MUS3 + +"&SF66="+SF66 + +"&SF67="+SF67 + +"&SF68="+SF68 + +"&FA33="+FA33 + +"&FA34="+FA34 + +"&AO44="+AO44 + +"&IS44="+IS44 + +"&B644="+B644 + +"&IF52="+IF52 + +"&IF53="+IF53 + +"&IF54="+IF54 + +"&IF55="+IF55 + +"&IF56="+IF56 + +"&IF57="+IF57 + +"&IF58="+IF58 + +"&IF59="+IF59 + +"&IF60="+IF60 + +"&IF61="+IF61 + +"&IF62="+IF62 + +"&IF63="+IF63 + +"&IF64="+IF64 + +"&IF65="+IF65 + +"&IF66="+IF66 + +"&IF67="+IF67 + +"&IF68="+IF68 + +"&MA28="+MA28 + +"&NADL="+NADL + +"&AGCH="+AGCH + +"&LRNA="+LRNA + +"&LROT="+LROT + +"&WHRM="+WHRM + +"&WROT="+WROT + +"&DV01="+DV01 + +"&DV02="+DV02 + +"&DV03="+DV03 + +"&DV04="+DV04 + +"&DV05="+DV05 + +"&DV06="+DV06 + +"&DV07="+DV07 + +"&DV08="+DV08 + +"&PVUF="+PVUF + +"&WDVC="+WDVC + +"&VCOT="+VCOT + +"&VCPU="+VCPU + +"&PUCA="+PUCA + +"&PUOT="+PUOT + +"&SCAT="+SCAT + +"&UCBX="+UCBX + +"&CRDS="+CRDS + +"&SATP="+SATP + +"&BRPS="+BRPS + +"&BRES="+BRES + +"&HMCC="+HMCC + +"&MRTV="+MRTV + +"&WTTV="+WTTV + +"&WTOT="+WTOT + +"&MASL="+MASL + +"&RESL="+RESL + +"&OVSL="+OVSL + +"&MPNC="+MPNC + +"&NCOT="+NCOT + +"&MPCP="+MPCP + +"&CPOT="+CPOT + +"&CA01="+CA01 + +"&CA02="+CA02 + +"&CA03="+CA03 + +"&CA04="+CA04 + +"&CA05="+CA05 + +"&CA06="+CA06 + +"&HMVC="+HMVC + +"&CTVS="+CTVS + +"&CTVA="+CTVA + +"&WKCC="+WKCC + +"&TVBN="+TVBN + +"&VP01="+VP01 + +"&VP02="+VP02 + +"&VP03="+VP03 + +"&VPOT="+VPOT + +"&WWVT="+WWVT + +"&FKTR="+FKTR + +"&FKTP="+FKTP + +"&FKOP="+FKOP + +"&PKOO="+PKOO + +"&C1AG="+C1AG + +"&C1FV="+C1FV + +"&C2AG="+C2AG + +"&C2FV="+C2FV + +"&C3AG="+C3AG + +"&C3FV="+C3FV + +"&C4AG="+C4AG + +"&C4FV="+C4FV + +"&C1A2="+C1A2 + +"&N1HT="+N1HT + +"&N1VT="+N1VT + +"&C2A2="+C2A2 + +"&N2HT="+N2HT + +"&N2VT="+N2VT + +"&C3A2="+C3A2 + +"&N3HT="+N3HT + +"&N3VT="+N3VT + +"&C4A2="+C4A2 + +"&N4HT="+N4HT + +"&N4VT="+N4VT + +"&HECG="+HECG + +"&HEIC="+HEIC + +"&HECC="+HECC + +"&HEDV="+HEDV + +"&PVPR="+PVPR + +"&PPOT="+PPOT + +"&BVOV="+BVOV + +"&HUVV="+HUVV + +"&HUOT="+HUOT + +"&RCVC="+RCVC + +"&HRVC="+HRVC + +"&HROT="+HROT + +"&NCP1="+NCP1 + +"&CD01="+CD01 + +"&CD02="+CD02 + +"&CD03="+CD03 + +"&CD04="+CD04 + +"&CD05="+CD05 + +"&RF73="+RF73 + +"&RF74="+RF74 + +"&RF75="+RF75 + +"&RF76="+RF76 + +"&RF77="+RF77 + +"&RF78="+RF78 + +"&RF79="+RF79 + +"&RF80="+RF80 + +"&RF81="+RF81 + +"&RF82="+RF82 + +"&RF83="+RF83 + +"&RF84="+RF84 + +"&RF85="+RF85 + +"&RF86="+RF86 + +"&YUDC="+YUDC + +"&OCPB="+OCPB + +"&IF49="+IF49 + +"&IF50="+IF50 + +"&MA27="+MA27 + +"&CP01="+CP01 + +"&CP02="+CP02 + +"&CP03="+CP03 + +"&CP04="+CP04 + +"&CP05="+CP05 + +"&CP06="+CP06 + +"&CP07="+CP07 + +"&CP08="+CP08 + +"&CP09="+CP09 + +"&CP10="+CP10 + +"&CP11="+CP11 + +"&CPFI="+CPFI + +"&OBRN="+OBRN + +"&OMDL="+OMDL + +"&SNQU="+SNQU + +"&TS01="+TS01 + +"&TS02="+TS02 + +"&TS03="+TS03 + +"&TS04="+TS04 + +"&TS05="+TS05 + +"&TS06="+TS06 + +"&TS07="+TS07 + +"&TS08="+TS08 + +"&RPAU="+RPAU + +"&US01="+US01 + +"&US02="+US02 + +"&US03="+US03 + +"&US04="+US04 + +"&US05="+US05 + +"&US06="+US06 + +"&US07="+US07 + +"&US08="+US08 + +"&US09="+US09 + +"&US10="+US10 + +"&US11="+US11 + +"&US12="+US12 + +"&US13="+US13 + +"&US14="+US14 + +"&LK01="+LK01 + +"&LK02="+LK02 + +"&LK03="+LK03 + +"&LK04="+LK04 + +"&LK05="+LK05 + +"&LK06="+LK06 + +"&LK07="+LK07 + +"&LK08="+LK08 + +"&LK09="+LK09 + +"&LK10="+LK10 + +"&LK11="+LK11 + +"&LK12="+LK12 + +"&LK13="+LK13 + +"&LK14="+LK14 + +"&NCID="+NCID + +"&NP01="+NP01 + +"&NP02="+NP02 + +"&NP03="+NP03 + +"&NP04="+NP04 + +"&NP05="+NP05 + +"&NP06="+NP06 + +"&NP07="+NP07 + +"&NP08="+NP08 + +"&PLPH="+PLPH + +"&LPFI="+LPFI + +"&POP2="+POP2 + +"&OPP2="+OPP2 + +"&PULO="+PULO + +"&ARTI="+ARTI + +"&FND2="+FND2 + +"&IWUM="+IWUM + +"&VTPS="+VTPS + +"&VPFI="+VPFI + +"&MART="+MART + +"&OB15="+OB15 + +"&IF69="+IF69 + +"&IF70="+IF70 + +"&IF71="+IF71 + +"&OF20="+OF20 + +"&OS20="+OS20 + +"&BR20="+BR20 + +"&OF21="+OF21 + +"&OS21="+OS21 + +"&BR21="+BR21 + +"&FC18="+FC18 + +"&IF72="+IF72 + +"&IF73="+IF73 + +"&IF74="+IF74 + +"&IF75="+IF75 + +"&IF76="+IF76 + +"&IF77="+IF77 + +"&IF78="+IF78 + +"&MA29="+MA29 + +"&MA30="+MA30 + +"&OF22="+OF22 + +"&OS22="+OS22 + +"&BR22="+BR22 + +"&IF79="+IF79 + +"&IF80="+IF80 + +"&IF81="+IF81 + +"&MA31="+MA31 + +"&OF23="+OF23 + +"&OS23="+OS23 + +"&BR23="+BR23 + +"&OF24="+OF24 + +"&OS24="+OS24 + +"&BR24="+BR24 + +"&OF25="+OF25 + +"&OS25="+OS25 + +"&BR25="+BR25 + +"&OF26="+OF26 + +"&OS26="+OS26 + +"&BR26="+BR26 + +"&FC19="+FC19 + +"&IF51="+IF51 + +"&SUIN="+SUIN + +"&CBRN="+CBRN + +"&PICW="+PICW + +"&PICI="+PICI + +"&WS01="+WS01 + +"&WS02="+WS02 + +"&WS03="+WS03 + +"&WS04="+WS04 + +"&WS05="+WS05 + +"&WS06="+WS06 + +"&WS07="+WS07 + +"&WS08="+WS08 + +"&WS09="+WS09 + +"&WS10="+WS10 + +"&WSOT="+WSOT + +"&WR01="+WR01 + +"&WR02="+WR02 + +"&WR03="+WR03 + +"&WR04="+WR04 + +"&WR05="+WR05 + +"&WR06="+WR06 + +"&WR07="+WR07 + +"&WR08="+WR08 + +"&WR09="+WR09 + +"&WR10="+WR10 + +"&WR11="+WR11 + +"&WR12="+WR12 + +"&WR13="+WR13 + +"&SV01="+SV01 + +"&SV02="+SV02 + +"&SV03="+SV03 + +"&BMOL="+BMOL + +"&WTBM="+WTBM + +"&WJSU="+WJSU + +"&OF27="+OF27 + +"&OS27="+OS27 + +"&BR27="+BR27 + +"&OF28="+OF28 + +"&OS28="+OS28 + +"&BR28="+BR28 + +"&IF82="+IF82 + +"&IF83="+IF83 + +"&MA32="+MA32 + +"&MA33="+MA33 + +"&MA34="+MA34 + +"&SFOT="+SFOT + +"&MPDC="+MPDC + +"&DCOT="+DCOT + ; + return data; +} + +formData(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Regress/shell.js b/js/src/tests/js1_5/Regress/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Regress/shell.js diff --git a/js/src/tests/js1_5/Scope/browser.js b/js/src/tests/js1_5/Scope/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Scope/browser.js diff --git a/js/src/tests/js1_5/Scope/regress-154693.js b/js/src/tests/js1_5/Scope/regress-154693.js new file mode 100644 index 000000000..10f8c1409 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-154693.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 26 Nov 2002 + * SUMMARY: Testing scope + * See http://bugzilla.mozilla.org/show_bug.cgi?id=154693 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 154693; +var summary = 'Testing scope'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() +{ + function nested() {} + return nested; +} +var f1 = f(); +var f2 = f(); + +status = inSection(1); +actual = (f1 != f2); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-181834.js b/js/src/tests/js1_5/Scope/regress-181834.js new file mode 100644 index 000000000..311ae2e9a --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-181834.js @@ -0,0 +1,149 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 25 November 2002 + * SUMMARY: Testing scope + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181834 + * + * This bug only bit in Rhino interpreted mode, when the + * 'compile functions with dynamic scope' feature was set. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 181834; +var summary = 'Testing scope'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * If N<=0, |outer_d| just gets incremented once, + * so the return value should be 1 in this case. + * + * If N>0, we end up calling inner() N+1 times: + * inner(N), inner(N-1), ... , inner(0). + * + * Each call to inner() increments |outer_d| by 1. + * The last call, inner(0), returns the final value + * of |outer_d|, which should be N+1. + */ +function outer(N) +{ + var outer_d = 0; + return inner(N); + + function inner(level) + { + outer_d++; + + if (level > 0) + return inner(level - 1); + else + return outer_d; + } +} + + +/* + * This only has meaning in Rhino - + */ +setDynamicScope(true); + +/* + * Recompile the function |outer| via eval() in order to + * feel the effect of the dynamic scope mode we have set. + */ +var s = outer.toString(); +eval(s); + +status = inSection(1); +actual = outer(-5); +expect = 1; +addThis(); + +status = inSection(2); +actual = outer(0); +expect = 1; +addThis(); + +status = inSection(3); +actual = outer(5); +expect = 6; +addThis(); + + +/* + * Sanity check: do same steps with the dynamic flag off + */ +setDynamicScope(false); + +/* + * Recompile the function |outer| via eval() in order to + * feel the effect of the dynamic scope mode we have set. + */ +eval(s); + +status = inSection(4); +actual = outer(-5); +expect = 1; +addThis(); + +status = inSection(5); +actual = outer(0); +expect = 1; +addThis(); + +status = inSection(6); +actual = outer(5); +expect = 6; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function setDynamicScope(flag) +{ + if (this.Packages) + { + var cx = this.Packages.org.mozilla.javascript.Context.getCurrentContext(); + cx.setCompileFunctionsWithDynamicScope(flag); + } +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-184107.js b/js/src/tests/js1_5/Scope/regress-184107.js new file mode 100644 index 000000000..ede6f42e9 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-184107.js @@ -0,0 +1,93 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 December 2002 + * SUMMARY: with(...) { function f ...} should set f in the global scope + * See http://bugzilla.mozilla.org/show_bug.cgi?id=184107 + * + * In fact, any variable defined in a with-block should be created + * in global scope, i.e. should be a property of the global object. + * + * The with-block syntax allows existing local variables to be SET, + * but does not allow new local variables to be CREATED. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=159849#c11 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 184107; +var summary = 'with(...) { function f ...} should set f in the global scope'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var obj = {y:10}; +with (obj) +{ + // function statement + function f() + { + return y; + } + + // function expression + g = function() {return y;} +} + +status = inSection(1); +actual = obj.f; +expect = undefined; +addThis(); + +status = inSection(2); +actual = f(); +expect = obj.y; +addThis(); + +status = inSection(3); +actual = obj.g; +expect = undefined; +addThis(); + +status = inSection(4); +actual = g(); +expect = obj.y; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-185485.js b/js/src/tests/js1_5/Scope/regress-185485.js new file mode 100644 index 000000000..19d190eea --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-185485.js @@ -0,0 +1,129 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 16 Dec 2002 + * SUMMARY: Testing |with (x) {function f() {}}| when |x.f| already exists + * See http://bugzilla.mozilla.org/show_bug.cgi?id=185485 + * + * The idea is this: if |x| does not already have a property named |f|, + * a |with| statement cannot be used to define one. See, for example, + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=159849#c11 + * http://bugzilla.mozilla.org/show_bug.cgi?id=184107 + * + * + * However, if |x| already has a property |f|, a |with| statement can be + * used to modify the value it contains: + * + * with (x) {f = 1;} + * + * This should work even if we use a |var| statement, like this: + * + * with (x) {var f = 1;} + * + * However, it should NOT work if we use a |function| statement, like this: + * + * with (x) {function f() {}} + * + * Instead, this should newly define a function f in global scope. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=185485 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 185485; +var summary = 'Testing |with (x) {function f() {}}| when |x.f| already exists'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +var x = { f:0, g:0 }; + +with (x) +{ + f = 1; +} +status = inSection(1); +actual = x.f; +expect = 1; +addThis(); + +with (x) +{ + var f = 2; +} +status = inSection(2); +actual = x.f; +expect = 2; +addThis(); + +/* + * Use of a function statement under the with-block should not affect + * the local property |f|, but define a function |f| in global scope - + */ +with (x) +{ + function f() {} +} +status = inSection(3); +actual = x.f; +expect = 2; +addThis(); + +status = inSection(4); +actual = typeof this.f; +expect = 'function'; +addThis(); + + +/* + * Compare use of function expression instead of function statement. + * Note it is important that |x.g| already exists. Otherwise, this + * would newly define |g| in global scope - + */ +with (x) +{ + var g = function() {} +} +status = inSection(5); +actual = x.g.toString(); +expect = (function () {}).toString(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-191276.js b/js/src/tests/js1_5/Scope/regress-191276.js new file mode 100644 index 000000000..e1685ea34 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-191276.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 January 2003 + * SUMMARY: Testing |this[name]| via Function.prototype.call(), apply() + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=191276 + * + * Igor: "This script fails when run in Rhino compiled mode, but passes in + * interpreted mode. Note that presence of the never-called |unused_function| + * with |f('a')| line is essential; the script works OK without it." + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 191276; +var summary = 'Testing |this[name]| via Function.prototype.call(), apply()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function F(name) +{ + return this[name]; +} + +function unused_function() +{ + F('a'); +} + +status = inSection(1); +actual = F.call({a: 'aaa'}, 'a'); +expect = 'aaa'; +addThis(); + +status = inSection(2); +actual = F.apply({a: 'aaa'}, ['a']); +expect = 'aaa'; +addThis(); + +/* + * Try the same things with an object variable instead of a literal + */ +var obj = {a: 'aaa'}; + +status = inSection(3); +actual = F.call(obj, 'a'); +expect = 'aaa'; +addThis(); + +status = inSection(4); +actual = F.apply(obj, ['a']); +expect = 'aaa'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-192226.js b/js/src/tests/js1_5/Scope/regress-192226.js new file mode 100644 index 000000000..1bbf64329 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-192226.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 07 February 2003 + * SUMMARY: Testing a nested function call under |with| or |catch| + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=192226 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 192226; +var summary = 'Testing a nested function call under |with| or |catch|'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var counter = 0; + + +function f() +{ + try + { + with (Math) + { + test0(); + test1(sin); + } + throw 1; + } + catch (e) + { + test0(); + test1(e); + } +} + +function test0() +{ + ++counter; +} + +function test1(arg) +{ + ++counter; +} + + +status = inSection(1); +f(); // sets |counter| +actual = counter; +expect = 4; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-202678-001.js b/js/src/tests/js1_5/Scope/regress-202678-001.js new file mode 100644 index 000000000..6ba1cd27a --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-202678-001.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 April 2003 + * SUMMARY: Testing nested function scope capture + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=202678 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 202678; +var summary = 'Testing nested function scope capture'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var self = this; + + +function myFunc() +{ + var hidden = 'aaa'; + insideFunc(); + + if (!self.runOnce) + { + var hidden = 'bbb'; + self.outSideFunc = insideFunc; + self.runOnce = true; + } + else + { + var hidden = 'ccc'; + } + + + function insideFunc() + { + actual = hidden; + } +} + + + +status = inSection(1); +myFunc(); // this sets |actual| +expect = 'aaa'; +addThis(); + +status = inSection(2); +outSideFunc(); // sets |actual| +expect = 'bbb'; +addThis(); + +status = inSection(3); +myFunc(); // sets |actual| +expect = 'aaa'; +addThis(); + +status = inSection(4); +outSideFunc(); // sets |actual| +expect = 'bbb'; // NOT 'ccc' +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-202678-002.js b/js/src/tests/js1_5/Scope/regress-202678-002.js new file mode 100644 index 000000000..9638cc18c --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-202678-002.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 April 2003 + * SUMMARY: Testing nested function scope capture + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=202678 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 202678; +var summary = 'Testing nested function scope capture'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var self = this; + + +function myFunc() +{ + var hidden = 'aaa'; + insideFunc(); + + if (!self.runOnce) + { + var hidden = 'bbb'; + self.outSideFunc = insideFunc; + self.runOnce = true; + } + else + { + var hidden = 'ccc'; + self.outSideFunc = insideFunc; + } + + + function insideFunc() + { + actual = hidden; + } +} + + + +status = inSection(1); +myFunc(); // this sets |actual| +expect = 'aaa'; +addThis(); + +status = inSection(2); +outSideFunc(); // sets |actual| +expect = 'bbb'; +addThis(); + +status = inSection(3); +myFunc(); // sets |actual| +expect = 'aaa'; +addThis(); + +status = inSection(4); +outSideFunc(); // sets |actual| +expect = 'ccc'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-208496-001.js b/js/src/tests/js1_5/Scope/regress-208496-001.js new file mode 100644 index 000000000..f25693f30 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-208496-001.js @@ -0,0 +1,140 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 05 June 2003 + * SUMMARY: Testing |with (f)| inside the definition of |function f()| + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=208496 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 208496; +var summary = 'Testing |with (f)| inside the definition of |function f()|'; +var status = ''; +var statusitems = []; +var actual = '(TEST FAILURE)'; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * GLOBAL SCOPE + */ +function f(par) +{ + var a = par; + + with(f) + { + var b = par; + actual = b; + } +} + +status = inSection(1); +f('abc'); // this sets |actual| +expect = 'abc'; +addThis(); + +status = inSection(2); +f(111 + 222); // sets |actual| +expect = 333; +addThis(); + + +/* + * EVAL SCOPE + */ +var s = ''; +s += 'function F(par)'; +s += '{'; +s += ' var a = par;'; + +s += ' with(F)'; +s += ' {'; +s += ' var b = par;'; +s += ' actual = b;'; +s += ' }'; +s += '}'; + +s += 'status = inSection(3);'; +s += 'F("abc");'; // sets |actual| +s += 'expect = "abc";'; +s += 'addThis();'; + +s += 'status = inSection(4);'; +s += 'F(111 + 222);'; // sets |actual| +s += 'expect = 333;'; +s += 'addThis();'; +eval(s); + + +/* + * FUNCTION SCOPE + */ +function g(par) +{ + // Add outer variables to complicate the scope chain - + var a = '(TEST FAILURE)'; + var b = '(TEST FAILURE)'; + h(par); + + function h(par) + { + var a = par; + + with(h) + { + var b = par; + actual = b; + } + } +} + +status = inSection(5); +g('abc'); // sets |actual| +expect = 'abc'; +addThis(); + +status = inSection(6); +g(111 + 222); // sets |actual| +expect = 333; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-208496-002.js b/js/src/tests/js1_5/Scope/regress-208496-002.js new file mode 100644 index 000000000..8de1ecbf5 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-208496-002.js @@ -0,0 +1,132 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 05 June 2003 + * SUMMARY: Testing |with (f)| inside the definition of |function f()| + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=208496 + * + * In this test, we check that static function properties of + * of |f| are read correctly from within the |with(f)| block. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 208496; +var summary = 'Testing |with (f)| inside the definition of |function f()|'; +var STATIC_VALUE = 'read the static property'; +var status = ''; +var statusitems = []; +var actual = '(TEST FAILURE)'; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f(par) +{ + with(f) + { + actual = par; + } + + return par; +} +f.par = STATIC_VALUE; + + +status = inSection(1); +f('abc'); // this sets |actual| inside |f| +expect = STATIC_VALUE; +addThis(); + +// test the return: should be the dynamic value +status = inSection(2); +actual = f('abc'); +expect = 'abc'; +addThis(); + +status = inSection(3); +f(111 + 222); // sets |actual| inside |f| +expect = STATIC_VALUE; +addThis(); + +// test the return: should be the dynamic value +status = inSection(4); +actual = f(111 + 222); +expect = 333; +addThis(); + + +/* + * Add a level of indirection via |x| + */ +function g(par) +{ + with(g) + { + var x = par; + actual = x; + } + + return par; +} +g.par = STATIC_VALUE; + + +status = inSection(5); +g('abc'); // this sets |actual| inside |g| +expect = STATIC_VALUE; +addThis(); + +// test the return: should be the dynamic value +status = inSection(6); +actual = g('abc'); +expect = 'abc'; +addThis(); + +status = inSection(7); +g(111 + 222); // sets |actual| inside |g| +expect = STATIC_VALUE; +addThis(); + +// test the return: should be the dynamic value +status = inSection(8); +actual = g(111 + 222); +expect = 333; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-220362.js b/js/src/tests/js1_5/Scope/regress-220362.js new file mode 100644 index 000000000..5977098a5 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-220362.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 27 Sep 2003 + * SUMMARY: Calling a local function from global scope + * See http://bugzilla.mozilla.org/show_bug.cgi?id=220362 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 220362; +var summary = 'Calling a local function from global scope'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// creates a local function and calls it immediately +function a() +{ + var x = 'A'; + var f = function() {return x;}; + return f(); +} + +// creates and returns a local function +function b() +{ + var x = 'B'; + var f = function() {return x;}; + return f; +} + + +status = inSection(1); +actual = a(); +expect = 'A'; +addThis(); + +status = inSection(2); +var f = b(); +actual = f(); +expect = 'B'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/regress-446026-01.js b/js/src/tests/js1_5/Scope/regress-446026-01.js new file mode 100644 index 000000000..fa108b444 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-446026-01.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 446026; +var summary = 'brian loves eval(s, o)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var b = 45; + +// Getting "private" variables + var obj = (function() { + var a = 21; + return { + // public function must reference 'a' + fn: function() {a;} + }; + })(); + +expect = 'ReferenceError: a is not defined | undefined | 45'; +actual = ''; + +var foo; + +try { + eval('bar = b; foo=a', obj.fn); +} catch (e) { + actual = e; +} +print(actual += " | " + foo + " | " + bar); // 21 +reportCompare(expect, actual, summary); + +expect = 'No Error'; +actual = 'No Error'; + +try +{ + eval("", {print:1}); + print(1); +} +catch(ex) +{ + actual = ex + ''; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Scope/regress-446026-02.js b/js/src/tests/js1_5/Scope/regress-446026-02.js new file mode 100644 index 000000000..1a15b25e0 --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-446026-02.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 446026; +var summary = 'brian loves eval(s, o)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'locallocal'; + +var x = "global"; +(function() { + var x = "local"; + (function() { + actual = x; + eval("", {}); + actual += x; + })(); +})(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Scope/regress-77578-001.js b/js/src/tests/js1_5/Scope/regress-77578-001.js new file mode 100644 index 000000000..cafa54cce --- /dev/null +++ b/js/src/tests/js1_5/Scope/regress-77578-001.js @@ -0,0 +1,150 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-11 + * + * SUMMARY: Testing eval scope inside a function. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=77578 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 77578; +var summary = 'Testing eval scope inside a function'; +var cnEquals = '='; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// various versions of JavaScript - +var JS_VER = [100, 110, 120, 130, 140, 150]; + +// Note contrast with local variables i,j,k defined below - +var i = 999; +var j = 999; +var k = 999; + + +//-------------------------------------------------- +test(); +//-------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // Run tests A,B,C on each version of JS and store results + for (var n=0; n!=JS_VER.length; n++) + { + testA(JS_VER[n]); + } + for (var n=0; n!=JS_VER.length; n++) + { + testB(JS_VER[n]); + } + for (var n=0; n!=JS_VER.length; n++) + { + testC(JS_VER[n]); + } + + + // Compare actual values to expected values - + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function testA(ver) +{ + // Set the version of JS to test - + if (typeof version == 'function') + { + version(ver); + } + + // eval the test, so it compiles AFTER version() has executed - + var sTestScript = ""; + + // Define a local variable i + sTestScript += "status = 'Section A of test; JS ' + ver/100;"; + sTestScript += "var i=1;"; + sTestScript += "actual = eval('i');"; + sTestScript += "expect = 1;"; + sTestScript += "captureThis('i');"; + + eval(sTestScript); +} + + +function testB(ver) +{ + // Set the version of JS to test - + if (typeof version == 'function') + { + version(ver); + } + + // eval the test, so it compiles AFTER version() has executed - + var sTestScript = ""; + + // Define a local for-loop iterator j + sTestScript += "status = 'Section B of test; JS ' + ver/100;"; + sTestScript += "for(var j=1; j<2; j++)"; + sTestScript += "{"; + sTestScript += " actual = eval('j');"; + sTestScript += "};"; + sTestScript += "expect = 1;"; + sTestScript += "captureThis('j');"; + + eval(sTestScript); +} + + +function testC(ver) +{ + // Set the version of JS to test - + if (typeof version == 'function') + { + version(ver); + } + + // eval the test, so it compiles AFTER version() has executed - + var sTestScript = ""; + + // Define a local variable k in a try-catch block - + sTestScript += "status = 'Section C of test; JS ' + ver/100;"; + sTestScript += "try"; + sTestScript += "{"; + sTestScript += " var k=1;"; + sTestScript += " actual = eval('k');"; + sTestScript += "}"; + sTestScript += "catch(e)"; + sTestScript += "{"; + sTestScript += "};"; + sTestScript += "expect = 1;"; + sTestScript += "captureThis('k');"; + + eval(sTestScript); +} + + +function captureThis(varName) +{ + statusitems[UBound] = status; + actualvalues[UBound] = varName + cnEquals + actual; + expectedvalues[UBound] = varName + cnEquals + expect; + UBound++; +} diff --git a/js/src/tests/js1_5/Scope/scope-002.js b/js/src/tests/js1_5/Scope/scope-002.js new file mode 100644 index 000000000..ebe39e68f --- /dev/null +++ b/js/src/tests/js1_5/Scope/scope-002.js @@ -0,0 +1,108 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-02 + * + * SUMMARY: Testing visibility of outer function from inner function. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing visibility of outer function from inner function'; +var cnCousin = 'Fred'; +var cnColor = 'red'; +var cnMake = 'Toyota'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// TEST 1 +function Outer() +{ + + function inner() + { + Outer.cousin = cnCousin; + return Outer.cousin; + } + + status = 'Section 1 of test'; + actual = inner(); + expect = cnCousin; + addThis(); +} + + +Outer(); +status = 'Section 2 of test'; +actual = Outer.cousin; +expect = cnCousin; +addThis(); + + + +// TEST 2 +function Car(make) +{ + this.make = make; + Car.prototype.paint = paint; + + function paint() + { + Car.color = cnColor; + Car.prototype.color = Car.color; + } +} + + +var myCar = new Car(cnMake); +status = 'Section 3 of test'; +actual = myCar.make; +expect = cnMake; +addThis(); + + +myCar.paint(); +status = 'Section 4 of test'; +actual = myCar.color; +expect = cnColor; +addThis(); + + + +//-------------------------------------------------- +test(); +//-------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/scope-003.js b/js/src/tests/js1_5/Scope/scope-003.js new file mode 100644 index 000000000..e2d4f77f5 --- /dev/null +++ b/js/src/tests/js1_5/Scope/scope-003.js @@ -0,0 +1,109 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-03 + * + * SUMMARY: Testing scope with nested functions + * + * From correspondence with Christopher Oliver <coliver@mminternet.com>: + * + * > Running this test with Rhino produces the following exception: + * > + * > uncaught JavaScript exception: undefined: Cannot find default value for + * > object. (line 3) + * > + * > This is due to a bug in org.mozilla.javascript.NativeCall which doesn't + * > implement toString or valueOf or override getDefaultValue. + * > However, even after I hacked in an implementation of getDefaultValue in + * > NativeCall, Rhino still produces a different result then SpiderMonkey: + * > + * > [object Call] + * > [object Object] + * > [object Call] + * + * Note the results should be: + * + * [object global] + * [object Object] + * [object global] + * + * This is what we are checking for in this testcase - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing scope with nested functions'; +var statprefix = 'Section '; +var statsuffix = ' of test -'; +var self = this; // capture a reference to the global object; +var cnGlobal = self.toString(); +var cnObject = (new Object).toString(); +var statusitems = []; +var actualvalues = []; +var expectedvalues = []; + + +function a() +{ + function b() + { + capture(this.toString()); + } + + this.c = function() + { + capture(this.toString()); + b(); + } + + b(); +} + + +var obj = new a(); // captures actualvalues[0] +obj.c(); // captures actualvalues[1], actualvalues[2] + + +// The values we expect - see introduction above - +expectedvalues[0] = cnGlobal; +expectedvalues[1] = cnObject; +expectedvalues[2] = cnGlobal; + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function capture(val) +{ + actualvalues[UBound] = val; + statusitems[UBound] = getStatus(UBound); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + i + statsuffix; +} diff --git a/js/src/tests/js1_5/Scope/scope-004.js b/js/src/tests/js1_5/Scope/scope-004.js new file mode 100644 index 000000000..06b94a9c4 --- /dev/null +++ b/js/src/tests/js1_5/Scope/scope-004.js @@ -0,0 +1,191 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-16 + * + * SUMMARY: Testing visiblity of variables from within a with block. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=90325 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 90325; +var summary = 'Testing visiblity of variables from within a with block'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +// (compare local definitions which follow) - +var A = 'global A'; +var B = 'global B'; +var C = 'global C'; +var D = 'global D'; + +// an object with 'C' and 'D' properties - +var objTEST = new Object(); +objTEST.C = C; +objTEST.D = D; + + +status = 'Section 1 of test'; +with (new Object()) +{ + actual = A; + expect = 'global A'; +} +addThis(); + + +status = 'Section 2 of test'; +with (Function) +{ + actual = B; + expect = 'global B'; +} +addThis(); + + +status = 'Section 3 of test'; +with (this) +{ + actual = C; + expect = 'global C'; +} +addThis(); + + +status = 'Section 4 of test'; +localA(); +addThis(); + +status = 'Section 5 of test'; +localB(); +addThis(); + +status = 'Section 6 of test'; +localC(); +addThis(); + +status = 'Section 7 of test'; +localC(new Object()); +addThis(); + +status = 'Section 8 of test'; +localC.apply(new Object()); +addThis(); + +status = 'Section 9 of test'; +localC.apply(new Object(), [objTEST]); +addThis(); + +status = 'Section 10 of test'; +localC.apply(objTEST, [objTEST]); +addThis(); + +status = 'Section 11 of test'; +localD(new Object()); +addThis(); + +status = 'Section 12 of test'; +localD.apply(new Object(), [objTEST]); +addThis(); + +status = 'Section 13 of test'; +localD.apply(objTEST, [objTEST]); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +// contains a with(new Object()) block - +function localA() +{ + var A = 'local A'; + + with(new Object()) + { + actual = A; + expect = 'local A'; + } +} + + +// contains a with(Number) block - +function localB() +{ + var B = 'local B'; + + with(Number) + { + actual = B; + expect = 'local B'; + } +} + + +// contains a with(this) block - +function localC(obj) +{ + var C = 'local C'; + + with(this) + { + actual = C; + } + + if ('C' in this) + expect = this.C; + else + expect = 'local C'; +} + + +// contains a with(obj) block - +function localD(obj) +{ + var D = 'local D'; + + with(obj) + { + actual = D; + } + + if ('D' in obj) + expect = obj.D; + else + expect = 'local D'; +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Scope/shell.js b/js/src/tests/js1_5/Scope/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Scope/shell.js diff --git a/js/src/tests/js1_5/String/browser.js b/js/src/tests/js1_5/String/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/String/browser.js diff --git a/js/src/tests/js1_5/String/regress-107771.js b/js/src/tests/js1_5/String/regress-107771.js new file mode 100644 index 000000000..b335abb03 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-107771.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 31 October 2001 + * + * SUMMARY: Regression test for bug 107771 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=107771 + * + * The bug: Section 1 passed, but Sections 2-5 all failed with |actual| == 12 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 107771; +var summary = "Regression test for bug 107771"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var str = ''; +var k = -9999; + + +status = inSection(1); +str = "AAA//BBB/CCC/"; +k = str.lastIndexOf('/'); +actual = k; +expect = 12; + +status = inSection(2); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 8; +addThis(); + +status = inSection(3); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 4; +addThis(); + +status = inSection(4); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 3; +addThis(); + +status = inSection(5); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = -1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/String/regress-112626.js b/js/src/tests/js1_5/String/regress-112626.js new file mode 100644 index 000000000..74df1c956 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-112626.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 112626; +var summary = 'Do not crash String.split(regexp) when regexp contains parens'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var _cs='2001-01-01'; +var curTime = _cs.split(/([- :])/); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/String/regress-179068.js b/js/src/tests/js1_5/String/regress-179068.js new file mode 100644 index 000000000..35b9d3a32 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-179068.js @@ -0,0 +1,125 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 November 2002 + * SUMMARY: Test that interpreter can handle string literals exceeding 64K + * See http://bugzilla.mozilla.org/show_bug.cgi?id=179068 + * + * Test that the interpreter can handle string literals exceeding 64K limit. + * For that the script passes to eval() "str ='LONG_STRING_LITERAL';" where + * LONG_STRING_LITERAL is a string with 200K chars. + * + * Igor Bukanov explains the technique used below: + * + * > Philip Schwartau wrote: + * >... + * > Here is the heart of the testcase: + * > + * > // Generate 200K long string + * > var long_str = duplicate(LONG_STR_SEED, N); + * > var str = ""; + * > eval("str='".concat(long_str, "';")); + * > var test_is_ok = (str.length == LONG_STR_SEED.length * N); + * > + * > + * > The testcase creates two identical strings, |long_str| and |str|. It + * > uses eval() simply to assign the value of |long_str| to |str|. Why is + * > it necessary to have the variable |str|, then? Why not just create + * > |long_str| and test it? Wouldn't this be enough: + * > + * > // Generate 200K long string + * > var long_str = duplicate(LONG_STR_SEED, N); + * > var test_is_ok = (long_str.length == LONG_STR_SEED.length * N); + * > + * > Or do we specifically need to test eval() to exercise the interpreter? + * + * The reason for eval is to test string literals like in 'a string literal + * with 100 000 characters...', Rhino deals fine with strings generated at + * run time where lengths > 64K. Without eval it would be necessary to have + * a test file excedding 64K which is not that polite for CVS and then a + * special treatment for the compiled mode in Rhino should be added. + * + * + * > + * > If so, is it important to use the concat() method in the assignment, as + * > you have done: |eval("str='".concat(long_str, "';"))|, or can we simply + * > do |eval("str = long_str;")| ? + * + * The concat is a replacement for eval("str='"+long_str+"';"), but as + * long_str is huge, this leads to constructing first a new string via + * "str='"+long_str and then another one via ("str='"+long_str) + "';" + * which takes time under JDK 1.1 on a something like StrongArm 200MHz. + * Calling concat makes less copies, that is why it is used in the + * duplicate function and this is faster then doing recursion like in the + * test case to test that 64K different string literals can be handled. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 179068; +var summary = 'Test that interpreter can handle string literals exceeding 64K'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var LONG_STR_SEED = "0123456789"; +var N = 20 * 1024; +var str = ""; + + +// Generate 200K long string and assign it to |str| via eval() +var long_str = duplicate(LONG_STR_SEED, N); +eval("str='".concat(long_str, "';")); + +status = inSection(1); +actual = str.length == LONG_STR_SEED.length * N + expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function duplicate(str, count) +{ + var tmp = new Array(count); + + while (count != 0) + tmp[--count] = str; + + return String.prototype.concat.apply("", tmp); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/String/replace-flags.js b/js/src/tests/js1_5/String/replace-flags.js new file mode 100644 index 000000000..34b9475a3 --- /dev/null +++ b/js/src/tests/js1_5/String/replace-flags.js @@ -0,0 +1,25 @@ +var BUGNUMBER = 1108382; +var summary = 'Remove non-standard flag argument from String.prototype.{search,match,replace}.'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var result = "bbbAa".match("a", "i"); +assertEq(result.index, 4); +assertEq(result.length, 1); +assertEq(result[0], "a"); + +result = "bbbA".match("a", "i"); +assertEq(result, null); + +result = "bbbAa".search("a", "i"); +assertEq(result, 4); + +result = "bbbA".search("a", "i"); +assertEq(result, -1); + +result = "bbbAaa".replace("a", "b", "g"); +assertEq(result, "bbbAba"); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/js/src/tests/js1_5/String/shell.js b/js/src/tests/js1_5/String/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/String/shell.js diff --git a/js/src/tests/js1_5/browser.js b/js/src/tests/js1_5/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/browser.js diff --git a/js/src/tests/js1_5/extensions/browser.js b/js/src/tests/js1_5/extensions/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/extensions/browser.js diff --git a/js/src/tests/js1_5/extensions/catchguard-001-n.js b/js/src/tests/js1_5/extensions/catchguard-001-n.js new file mode 100644 index 000000000..a0ff8d40c --- /dev/null +++ b/js/src/tests/js1_5/extensions/catchguard-001-n.js @@ -0,0 +1,43 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = " the non-guarded catch should HAVE to appear last"; +EXPECTED = "error"; + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) /* the non-guarded catch should HAVE to appear last */ + { + + } + catch (e if true) + { + + } + catch (e if false) + { + + } + + reportCompare('PASS', 'FAIL', + "Illegally constructed catchguard should have thrown " + + "an exception."); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/extensions/catchguard-001.js b/js/src/tests/js1_5/extensions/catchguard-001.js new file mode 100644 index 000000000..d79f88b3f --- /dev/null +++ b/js/src/tests/js1_5/extensions/catchguard-001.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e = "foo"; + var caught = false; + + printStatus ("Basic catchguard test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if true) + { + caught = true; + e = "this change should not propagate outside of this scope"; + } + catch (e if false) + { + reportCompare('PASS', 'FAIL', "Catch block (e if false) should not have executed."); + } + catch (e) + { + reportCompare('PASS', 'FAIL', "Catch block (e) should not have executed."); + } + + if (!caught) + reportCompare('PASS', 'FAIL', "Exception was never caught."); + + if (e != "foo") + reportCompare('PASS', 'FAIL', "Exception data modified inside catch() scope should " + + "not be visible in the function scope (e = '" + + e + "'.)"); + + reportCompare('PASS', 'PASS', ''); + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/extensions/catchguard-002.js b/js/src/tests/js1_5/extensions/catchguard-002.js new file mode 100644 index 000000000..a6068f6fc --- /dev/null +++ b/js/src/tests/js1_5/extensions/catchguard-002.js @@ -0,0 +1,43 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + var caught = false; + + printStatus ("Basic catchguard test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if true) + { + caught = true; + } + catch (e if true) + { + reportCompare('PASS', 'FAIL', + "Second (e if true) catch block should not have executed."); + } + catch (e) + { + reportCompare('PASS', 'FAIL', "Catch block (e) should not have executed."); + } + + if (!caught) + reportCompare('PASS', 'FAIL', "Exception was never caught."); + + reportCompare('PASS', 'PASS', 'Basic catchguard test'); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/extensions/catchguard-003.js b/js/src/tests/js1_5/extensions/catchguard-003.js new file mode 100644 index 000000000..4aee3a21d --- /dev/null +++ b/js/src/tests/js1_5/extensions/catchguard-003.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e = "foo", x = "foo"; + var caught = false; + + printStatus ("Catchguard 'Common Scope' test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if ((x = 1) && false)) + { + reportCompare('PASS', 'FAIL', + "Catch block (e if ((x = 1) && false) should not " + + "have executed."); + } + catch (e if (x == 1)) + { + caught = true; + } + catch (e) + { + reportCompare('PASS', 'FAIL', + "Same scope should be used across all catchguards."); + } + + if (!caught) + reportCompare('PASS', 'FAIL', + "Exception was never caught."); + + if (e != "foo") + reportCompare('PASS', 'FAIL', + "Exception data modified inside catch() scope should " + + "not be visible in the function scope (e ='" + + e + "'.)"); + + if (x != 1) + reportCompare('PASS', 'FAIL', + "Data modified in 'catchguard expression' should " + + "be visible in the function scope (x = '" + + x + "'.)"); + + reportCompare('PASS', 'PASS', 'Catchguard Common Scope test'); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/extensions/getset-001.js b/js/src/tests/js1_5/extensions/getset-001.js new file mode 100644 index 000000000..29191cdfe --- /dev/null +++ b/js/src/tests/js1_5/extensions/getset-001.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +function TestObject () +{ + /* A warm, dry place for properties and methods to live */ +} + +TestObject.prototype._y = "<initial y>"; + +Object.defineProperty(TestObject.prototype, "y", +{ + enumerable: true, configurable: true, + get: function get_y () + { + var rv; + if (typeof this._y == "string") + rv = "got " + this._y; + else + rv = this._y; + return rv; + }, + set: function set_y (newVal) { this._y = newVal; } +}); + + +test(new TestObject()); + +function test(t) +{ + enterFunc ("test"); + + printStatus ("Basic Getter/ Setter test"); + reportCompare ("<initial y>", t._y, "y prototype check"); + + reportCompare ("got <initial y>", t.y, "y getter, before set"); + + t.y = "new y"; + reportCompare ("got new y", t.y, "y getter, after set"); + + t.y = 2; + reportCompare (2, t.y, "y getter, after numeric set"); + + var d = new Date(); + t.y = d; + reportCompare (d, t.y, "y getter, after date set"); + +} diff --git a/js/src/tests/js1_5/extensions/getset-003.js b/js/src/tests/js1_5/extensions/getset-003.js new file mode 100644 index 000000000..7aec7fcfd --- /dev/null +++ b/js/src/tests/js1_5/extensions/getset-003.js @@ -0,0 +1,189 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 April 2001 + * + * SUMMARY: Testing obj.prop getter/setter + * Note: this is a non-ECMA extension to the language. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing obj.prop getter/setter'; +var statprefix = 'Status: '; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var cnDEFAULT = 'default name'; +var cnFRED = 'Fred'; +var obj = {}; +var obj2 = {}; +var s = ''; + + +// SECTION1: define getter/setter directly on an object (not its prototype) +obj = new Object(); +obj.nameSETS = 0; +obj.nameGETS = 0; +Object.defineProperty(obj, "name", +{ + enumerable: true, configurable: true, + set: function(newValue) {this._name=newValue; this.nameSETS++;}, + get: function() {this.nameGETS++; return this._name;} +}); + + status = 'In SECTION1 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION1 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION1 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION1 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION2: define getter/setter in Object.prototype +Object.prototype.nameSETS = 0; +Object.prototype.nameGETS = 0; +Object.defineProperty(Object.prototype, "name", +{ + enumerable: true, configurable: true, + set: function(newValue) {this._name=newValue; this.nameSETS++;}, + get: function() {this.nameGETS++; return this._name;} +}); + + obj = new Object(); +status = 'In SECTION2 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION2 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION2 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION2 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION 3: define getter/setter in prototype of user-defined constructor +function TestObject() +{ +} +TestObject.prototype.nameSETS = 0; +TestObject.prototype.nameGETS = 0; +Object.defineProperty(TestObject.prototype, "name", +{ + enumerable: true, configurable: true, + set: function(newValue) {this._name=newValue; this.nameSETS++;}, + get: function() {this.nameGETS++; return this._name;} +}); + TestObject.prototype.name = cnDEFAULT; + +obj = new TestObject(); +status = 'In SECTION3 of test after 1 set, 0 gets'; // (we set a default value in the prototype) +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,0]; +addThis(); + +s = obj.name; +status = 'In SECTION3 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION3 of test after 2 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION3 of test after 3 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,2]; +addThis(); + +obj2 = new TestObject(); +status = 'obj2 = new TestObject() after 1 set, 0 gets'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [1,0]; // we set a default value in the prototype - +addThis(); + +// Use both obj and obj2 - +obj2.name = obj.name + obj2.name; +status = 'obj2 = new TestObject() after 2 sets, 1 get'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [2,1]; +addThis(); + +status = 'In SECTION3 of test after 3 sets, 3 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,3]; // we left off at [3,2] above - +addThis(); + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual.toString(); + expectedvalues[UBound] = expect.toString(); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusitems[i]; +} diff --git a/js/src/tests/js1_5/extensions/getset-004.js b/js/src/tests/js1_5/extensions/getset-004.js new file mode 100644 index 000000000..30e134819 --- /dev/null +++ b/js/src/tests/js1_5/extensions/getset-004.js @@ -0,0 +1,177 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 April 2001 + * + * SUMMARY: Testing obj.__defineSetter__(), obj.__defineGetter__() + * Note: this is a non-ECMA language extension + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing obj.__defineSetter__(), obj.__defineGetter__()'; +var statprefix = 'Status: '; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var cnDEFAULT = 'default name'; +var cnFRED = 'Fred'; +var obj = {}; +var obj2 = {}; +var s = ''; + + +// SECTION1: define getter/setter directly on an object (not its prototype) +obj = new Object(); +obj.nameSETS = 0; +obj.nameGETS = 0; +obj.__defineSetter__('name', function(newValue) {this._name=newValue; this.nameSETS++;}); +obj.__defineGetter__('name', function() {this.nameGETS++; return this._name;}); + +status = 'In SECTION1 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION1 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION1 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION1 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION2: define getter/setter in Object.prototype +Object.prototype.nameSETS = 0; +Object.prototype.nameGETS = 0; +Object.prototype.__defineSetter__('name', function(newValue) {this._name=newValue; this.nameSETS++;}); +Object.prototype.__defineGetter__('name', function() {this.nameGETS++; return this._name;}); + +obj = new Object(); +status = 'In SECTION2 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION2 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION2 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION2 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION 3: define getter/setter in prototype of user-defined constructor +function TestObject() +{ +} +TestObject.prototype.nameSETS = 0; +TestObject.prototype.nameGETS = 0; +TestObject.prototype.__defineSetter__('name', function(newValue) {this._name=newValue; this.nameSETS++;}); +TestObject.prototype.__defineGetter__('name', function() {this.nameGETS++; return this._name;}); +TestObject.prototype.name = cnDEFAULT; + +obj = new TestObject(); +status = 'In SECTION3 of test after 1 set, 0 gets'; // (we set a default value in the prototype) +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,0]; +addThis(); + +s = obj.name; +status = 'In SECTION3 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION3 of test after 2 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION3 of test after 3 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,2]; +addThis(); + +obj2 = new TestObject(); +status = 'obj2 = new TestObject() after 1 set, 0 gets'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [1,0]; // we set a default value in the prototype - +addThis(); + +// Use both obj and obj2 - +obj2.name = obj.name + obj2.name; +status = 'obj2 = new TestObject() after 2 sets, 1 get'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [2,1]; +addThis(); + +status = 'In SECTION3 of test after 3 sets, 3 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,3]; // we left off at [3,2] above - +addThis(); + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual.toString(); + expectedvalues[UBound] = expect.toString(); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusitems[i]; +} diff --git a/js/src/tests/js1_5/extensions/getset-005.js b/js/src/tests/js1_5/extensions/getset-005.js new file mode 100644 index 000000000..da55105de --- /dev/null +++ b/js/src/tests/js1_5/extensions/getset-005.js @@ -0,0 +1,186 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 April 2001 + * + * SUMMARY: Testing obj.__defineSetter__(), obj.__defineGetter__() + * Note: this is a non-ECMA language extension + * + * This test is the same as getset-004.js, except that here we + * store the getter/setter functions in global variables. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing obj.__defineSetter__(), obj.__defineGetter__()'; +var statprefix = 'Status: '; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var cnName = 'name'; +var cnDEFAULT = 'default name'; +var cnFRED = 'Fred'; +var obj = {}; +var obj2 = {}; +var s = ''; + + +// The getter/setter functions we'll use in all three sections below - +var cnNameSetter = function(newValue) {this._name=newValue; this.nameSETS++;}; +var cnNameGetter = function() {this.nameGETS++; return this._name;}; + + +// SECTION1: define getter/setter directly on an object (not its prototype) +obj = new Object(); +obj.nameSETS = 0; +obj.nameGETS = 0; +obj.__defineSetter__(cnName, cnNameSetter); +obj.__defineGetter__(cnName, cnNameGetter); + +status = 'In SECTION1 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION1 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION1 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION1 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION2: define getter/setter in Object.prototype +Object.prototype.nameSETS = 0; +Object.prototype.nameGETS = 0; +Object.prototype.__defineSetter__(cnName, cnNameSetter); +Object.prototype.__defineGetter__(cnName, cnNameGetter); + +obj = new Object(); +status = 'In SECTION2 of test after 0 sets, 0 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,0]; +addThis(); + +s = obj.name; +status = 'In SECTION2 of test after 0 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [0,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION2 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION2 of test after 2 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,2]; +addThis(); + + +// SECTION 3: define getter/setter in prototype of user-defined constructor +function TestObject() +{ +} +TestObject.prototype.nameSETS = 0; +TestObject.prototype.nameGETS = 0; +TestObject.prototype.__defineSetter__(cnName, cnNameSetter); +TestObject.prototype.__defineGetter__(cnName, cnNameGetter); +TestObject.prototype.name = cnDEFAULT; + +obj = new TestObject(); +status = 'In SECTION3 of test after 1 set, 0 gets'; // (we set a default value in the prototype) +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,0]; +addThis(); + +s = obj.name; +status = 'In SECTION3 of test after 1 set, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [1,1]; +addThis(); + +obj.name = cnFRED; +status = 'In SECTION3 of test after 2 sets, 1 get'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [2,1]; +addThis(); + +obj.name = obj.name; +status = 'In SECTION3 of test after 3 sets, 2 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,2]; +addThis(); + +obj2 = new TestObject(); +status = 'obj2 = new TestObject() after 1 set, 0 gets'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [1,0]; // we set a default value in the prototype - +addThis(); + +// Use both obj and obj2 - +obj2.name = obj.name + obj2.name; +status = 'obj2 = new TestObject() after 2 sets, 1 get'; +actual = [obj2.nameSETS,obj2.nameGETS]; +expect = [2,1]; +addThis(); + +status = 'In SECTION3 of test after 3 sets, 3 gets'; +actual = [obj.nameSETS,obj.nameGETS]; +expect = [3,3]; // we left off at [3,2] above - +addThis(); + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual.toString(); + expectedvalues[UBound] = expect.toString(); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusitems[i]; +} diff --git a/js/src/tests/js1_5/extensions/getset-006.js b/js/src/tests/js1_5/extensions/getset-006.js new file mode 100644 index 000000000..b6ece3a77 --- /dev/null +++ b/js/src/tests/js1_5/extensions/getset-006.js @@ -0,0 +1,160 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 April 2001 + * + * SUMMARY: Testing obj.__lookupGetter__(), obj.__lookupSetter__() + * See http://bugzilla.mozilla.org/show_bug.cgi?id=71992 + * + * Brendan: "I see no need to provide more than the minimum: + * o.__lookupGetter__('p') returns the getter function for o.p, + * or undefined if o.p has no getter. Users can wrap and layer." + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 71992; +var summary = 'Testing obj.__lookupGetter__(), obj.__lookupSetter__()'; +var statprefix = 'Status: '; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var cnName = 'name'; +var cnColor = 'color'; +var cnNonExistingProp = 'ASDF_#_$%'; +var cnDEFAULT = 'default name'; +var cnFRED = 'Fred'; +var cnRED = 'red'; +var obj = {}; +var obj2 = {}; +var s; + + +// The only setter and getter functions we'll use in the three sections below - +var cnNameSetter = function(newValue) {this._name=newValue; this.nameSETS++;}; +var cnNameGetter = function() {this.nameGETS++; return this._name;}; + + + +// SECTION1: define getter/setter directly on an object (not its prototype) +obj = new Object(); +obj.nameSETS = 0; +obj.nameGETS = 0; +obj.__defineSetter__(cnName, cnNameSetter); +obj.__defineGetter__(cnName, cnNameGetter); +obj.name = cnFRED; +obj.color = cnRED; + +status ='In SECTION1 of test; looking up extant getter/setter'; +actual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)]; +expect = [cnNameSetter, cnNameGetter]; +addThis(); + +status = 'In SECTION1 of test; looking up nonexistent getter/setter'; +actual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)]; +expect = [undefined, undefined]; +addThis(); + +status = 'In SECTION1 of test; looking up getter/setter on nonexistent property'; +actual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)]; +expect = [undefined, undefined]; +addThis(); + + + +// SECTION2: define getter/setter in Object.prototype +Object.prototype.nameSETS = 0; +Object.prototype.nameGETS = 0; +Object.prototype.__defineSetter__(cnName, cnNameSetter); +Object.prototype.__defineGetter__(cnName, cnNameGetter); + +obj = new Object(); +obj.name = cnFRED; +obj.color = cnRED; + +status = 'In SECTION2 of test looking up extant getter/setter'; +actual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)]; +expect = [cnNameSetter, cnNameGetter]; +addThis(); + +status = 'In SECTION2 of test; looking up nonexistent getter/setter'; +actual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)]; +expect = [undefined, undefined]; +addThis(); + +status = 'In SECTION2 of test; looking up getter/setter on nonexistent property'; +actual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)]; +expect = [undefined, undefined]; +addThis(); + + + +// SECTION 3: define getter/setter in prototype of user-defined constructor +function TestObject() +{ +} +TestObject.prototype.nameSETS = 0; +TestObject.prototype.nameGETS = 0; +TestObject.prototype.__defineSetter__(cnName, cnNameSetter); +TestObject.prototype.__defineGetter__(cnName, cnNameGetter); +TestObject.prototype.name = cnDEFAULT; + +obj = new TestObject(); +obj.name = cnFRED; +obj.color = cnRED; + +status = 'In SECTION3 of test looking up extant getter/setter'; +actual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)]; +expect = [cnNameSetter, cnNameGetter]; +addThis(); + +status = 'In SECTION3 of test; looking up nonexistent getter/setter'; +actual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)]; +expect = [undefined, undefined]; +addThis(); + +status = 'In SECTION3 of test; looking up getter/setter on nonexistent property'; +actual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)]; +expect = [undefined, undefined]; +addThis(); + + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual.toString(); + expectedvalues[UBound] = expect.toString(); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusitems[i]; +} diff --git a/js/src/tests/js1_5/extensions/regress-104077.js b/js/src/tests/js1_5/extensions/regress-104077.js new file mode 100644 index 000000000..218459de0 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-104077.js @@ -0,0 +1,196 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 October 2001 + * SUMMARY: Regression test for Bugzilla bug 104077 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=104077 + * "JS crash: with/finally/return" + * + * Also http://bugzilla.mozilla.org/show_bug.cgi?id=120571 + * "JS crash: try/catch/continue." + * + * SpiderMonkey crashed on this code - it shouldn't. + * + * NOTE: the finally-blocks below should execute even if their try-blocks + * have return or throw statements in them: + * + * ------- Additional Comment #76 From Mike Shaver 2001-12-07 01:21 ------- + * finally trumps return, and all other control-flow constructs that cause + * program execution to jump out of the try block: throw, break, etc. Once you + * enter a try block, you will execute the finally block after leaving the try, + * regardless of what happens to make you leave the try. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 104077; +var summary = "Just testing that we don't crash on with/finally/return -"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function addValues_3(obj) +{ + var sum = 0; + + with (obj) + { + try + { + sum = arg1 + arg2; + with (arg3) + { + while (sum < 10) + { + try + { + if (sum > 5) + return sum; + sum += 1; + } + catch (e) + { + sum += 1; + } + } + } + } + finally + { + try + { + sum +=1; + print("In finally block of addValues_3() function: sum = " + sum); + } + catch (e if e == 42) + { + sum +=1; + print('In finally catch block of addValues_3() function: sum = ' + sum + ', e = ' + e); + } + finally + { + sum +=1; + print("In finally finally block of addValues_3() function: sum = " + sum); + return sum; + } + } + } +} + +status = inSection(9); +obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +obj.arg3 = new Object(); +obj.arg3.a = 10; +obj.arg3.b = 20; +actual = addValues_3(obj); +expect = 8; +captureThis(); + + + + +function addValues_4(obj) +{ + var sum = 0; + + with (obj) + { + try + { + sum = arg1 + arg2; + with (arg3) + { + while (sum < 10) + { + try + { + if (sum > 5) + return sum; + sum += 1; + } + catch (e) + { + sum += 1; + } + } + } + } + finally + { + try + { + sum += 1; + print("In finally block of addValues_4() function: sum = " + sum); + } + catch (e if e == 42) + { + sum += 1; + print("In 1st finally catch block of addValues_4() function: sum = " + sum + ", e = " + e); + } + catch (e if e == 43) + { + sum += 1; + print("In 2nd finally catch block of addValues_4() function: sum = " + sum + ", e = " + e); + } + finally + { + sum += 1; + print("In finally finally block of addValues_4() function: sum = " + sum); + return sum; + } + } + } +} + +status = inSection(10); +obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +obj.arg3 = new Object(); +obj.arg3.a = 10; +obj.arg3.b = 20; +actual = addValues_4(obj); +expect = 8; +captureThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-178722.js b/js/src/tests/js1_5/extensions/regress-178722.js new file mode 100644 index 000000000..428bcf79d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-178722.js @@ -0,0 +1,93 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 November 2002 + * SUMMARY: arr.sort() should not output |undefined| when |arr| is empty + * See http://bugzilla.mozilla.org/show_bug.cgi?id=178722 + * + * ECMA-262 Ed.3: 15.4.4.11 Array.prototype.sort (comparefn) + * + * 1. Call the [[Get]] method of this object with argument "length". + * 2. Call ToUint32(Result(1)). + * 3. Perform an implementation-dependent sequence of calls to the [[Get]], + * [[Put]], and [[Delete]] methods of this object, etc. etc. + * 4. Return this object. + * + * + * Note that sort() is done in-place on |arr|. In other words, sort() is a + * "destructive" method rather than a "functional" method. The return value + * of |arr.sort()| and |arr| are the same object. + * + * If |arr| is an empty array, the return value of |arr.sort()| should be + * an empty array, not the value |undefined| as was occurring in bug 178722. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 178722; +var summary = 'arr.sort() should not output |undefined| when |arr| is empty'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var arr; + + +// create empty array or pseudo-array objects in various ways +function f () {return arguments}; +var arr5 = f(); +arr5.__proto__ = Array.prototype; + + +status = inSection(5); +arr = arr5.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr5; +expect = true; +addThis(); + + +// now do the same thing, with non-default sorting: +function g() {return 1;} + +status = inSection('5a'); +arr = arr5.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr5; +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-192465.js b/js/src/tests/js1_5/extensions/regress-192465.js new file mode 100644 index 000000000..4999a2408 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-192465.js @@ -0,0 +1,123 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 February 2003 + * SUMMARY: Object.toSource() recursion should check stack overflow + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=192465 + * + * MODIFIED: 27 February 2003 + * + * We are adding an early return to this testcase, since it is causing + * big problems on Linux RedHat8! For a discussion of this issue, see + * http://bugzilla.mozilla.org/show_bug.cgi?id=174341#c24 and following. + * + * + * MODIFIED: 20 March 2003 + * + * Removed the early return and changed |N| below from 1000 to 90. + * Note |make_deep_nest(N)| returns an object graph of length N(N+1). + * So the graph has now been reduced from 1,001,000 to 8190. + * + * With this reduction, the bug still manifests on my WinNT and Linux + * boxes (crash due to stack overflow). So the testcase is again of use + * on those boxes. At the same time, Linux RedHat8 boxes can now run + * the test in a reasonable amount of time. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 192465; +var summary = 'Object.toSource() recursion should check stack overflow'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * We're just testing that this script will compile and run. + * Set both |actual| and |expect| to a dummy value. + */ +status = inSection(1); +var N = 90; +try +{ + make_deep_nest(N); +} +catch (e) +{ + // An exception is OK, as the runtime can throw one in response to too deep + // recursion. We haven't crashed; good! Continue on to set the dummy values - +} +actual = 1; +expect = 1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +/* + * EXAMPLE: + * + * If the global variable |N| is 2, then for |level| == 0, 1, 2, the return + * value of this function will be toSource() of these objects, respectively: + * + * {next:{next:END}} + * {next:{next:{next:{next:END}}}} + * {next:{next:{next:{next:{next:{next:END}}}}}} + * + */ +function make_deep_nest(level) +{ + var head = {}; + var cursor = head; + + for (var i=0; i!=N; ++i) + { + cursor.next = {}; + cursor = cursor.next; + } + + cursor.toSource = function() + { + if (level != 0) + return make_deep_nest(level - 1); + return "END"; + } + + return head.toSource(); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-225831.js b/js/src/tests/js1_5/extensions/regress-225831.js new file mode 100644 index 000000000..3330c7178 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-225831.js @@ -0,0 +1,162 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 15 Nov 2003 + * SUMMARY: Stressing the byte code generator + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=225831 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 225831; +var summary = 'Stressing the byte code generator'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() { return {x: 0}; } + +var N = 300; +var a = new Array(N + 1); +a[N] = 10; +a[0] = 100; + + +status = inSection(1); + +// build string of the form ++(a[++f().x + ++f().x + ... + ++f().x]) which +// gives ++a[N] +var str = "".concat("++(a[", repeat_str("++f().x + ", (N - 1)), "++f().x])"); + +// Use Script constructor instead of simple eval to test Rhino optimizer mode +// because in Rhino, eval always uses interpreted mode. +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + var script = new Script(str); + script(); + + actual = a[N]; + expect = 11; +} +addThis(); + +status = inSection(2); + + +// build string of the form (a[f().x-- + f().x-- + ... + f().x--])-- +// which should give (a[0])-- +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + str = "".concat("(a[", repeat_str("f().x-- + ", (N - 1)), "f().x--])--"); + script = new Script(str); + script(); + + actual = a[0]; + expect = 99; +} +addThis(); + + +status = inSection(3); + +// build string of the form [[1], [1], ..., [1]] +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + str = "".concat("[", repeat_str("[1], ", (N - 1)), "[1]]"); + script = new Script(str); + script(); + + actual = uneval(script()); + expect = str; +} +addThis(); + + +status = inSection(4); + +// build string of the form ({1:{a:1}, 2:{a:1}, ... N:{a:1}}) +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + str = function() { + var arr = new Array(N+1); + arr[0] = "({"; + for (var i = 1; i < N; ++i) { + arr[i] = i+":{a:1}, "; + } + arr[N] = N+":{a:1}})"; + return "".concat.apply("", arr); + }(); + + script = new Script(str); + script(); + + actual = uneval(script()); + expect = str; +} +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function repeat_str(str, repeat_count) +{ + var arr = new Array(--repeat_count); + while (repeat_count != 0) + arr[--repeat_count] = str; + return str.concat.apply(str, arr); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-226078.js b/js/src/tests/js1_5/extensions/regress-226078.js new file mode 100644 index 000000000..178d0a11f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-226078.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 226078; +var summary = 'Do not Crash @ js_Interpret 3127f864'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function SetLangHead(l){ + with(p){ + for(var i in x) + if(getElementById("TxtH"+i)!=undefined) + printStatus('huh'); + } +} +x=[0,1,2,3]; +p={getElementById: function (id){printStatus(uneval(this), id); return undefined;}}; +SetLangHead(1); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-226507.js b/js/src/tests/js1_5/extensions/regress-226507.js new file mode 100644 index 000000000..8d4fc0dd7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-226507.js @@ -0,0 +1,153 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 24 Nov 2003 + * SUMMARY: Testing for recursion check in js_EmitTree + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=226507 + * Igor's comments: + * + * "For example, with N in the test set to 35, I got on my RedHat + * Linux 10 box a segmentation fault from js after setting the stack limit + * to 100K. When I set the stack limit to 20K I still got the segmentation fault. + * Only after -s was changed to 15K, too-deep recursion was detected: + * + + ~/w/js/x> ulimit -s + 100 + ~/w/js/x> js fintest.js + Segmentation fault + ~/w/js/x> js -S $((20*1024)) fintest.js + Segmentation fault + ~/w/js/x> js -S $((15*1024)) fintest.js + fintest.js:19: InternalError: too much recursion + + * + * After playing with numbers it seems that while processing try/finally the + * recursion in js_Emit takes 10 times more space the corresponding recursion + * in the parser." + * + * + * Note the use of the new -S option to the JS shell to limit stack size. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=225061. This in turn + * can be passed to the JS shell by the test driver's -o option, as in: + * + * perl jsDriver.pl -e smdebug -fTEST.html -o "-S 100" -l js1_5/Regress + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 226507; +var summary = 'Testing for recursion check in js_EmitTree'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * With stack limit 100K on Linux debug build even N=30 already can cause + * stack overflow; use 35 to trigger it for sure. + */ +var N = 350; + +var counter = 0; +function f() +{ + ++counter; +} + + +/* + * Example: if N were 3, this is what |source| + * would end up looking like: + * + * try { f(); } finally { + * try { f(); } finally { + * try { f(); } finally { + * f(1,1,1,1); + * }}} + * + */ +var source = "".concat( + repeat_str("try { f(); } finally {\n", N), + "f(", + repeat_str("1,", N), + "1);\n", + repeat_str("}", N)); + +// Repeat it for additional stress testing +source += source; + +/* + * In Rhino, eval() always uses interpreted mode. + * To use compiled mode, use Script.exec() instead. + */ +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); + expect = actual = 0; +} +else +{ + try + { + var script = Script(source); + script(); + + + status = inSection(1); + actual = counter; + expect = (N + 1) * 2; + } + catch(ex) + { + actual = ex + ''; + } +} +addThis(); + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function repeat_str(str, repeat_count) +{ + var arr = new Array(--repeat_count); + while (repeat_count != 0) + arr[--repeat_count] = str; + return str.concat.apply(str, arr); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-231518.js b/js/src/tests/js1_5/extensions/regress-231518.js new file mode 100644 index 000000000..12419da36 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-231518.js @@ -0,0 +1,101 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 231518; +var summary = 'decompiler must quote keywords and non-identifier property names'; +var actual = ''; +var expect = 'no error'; +var status; +var object; +var result; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +if (typeof uneval != 'undefined') +{ + status = inSection(1) + ' eval(uneval({"if": false}))'; + + try + { + object = {'if': false }; + result = uneval(object); + printStatus('uneval returns ' + result); + eval(result); + actual = 'no error'; + } + catch(e) + { + actual = 'error'; + } + + reportCompare(expect, actual, status); + + status = inSection(2) + ' eval(uneval({"if": "then"}))'; + + try + { + object = {'if': "then" }; + result = uneval(object); + printStatus('uneval returns ' + result); + eval(result); + actual = 'no error'; + } + catch(e) + { + actual = 'error'; + } + + reportCompare(expect, actual, status); + + status = inSection(3) + ' eval(uneval(f))'; + + try + { + result = uneval(f); + printStatus('uneval returns ' + result); + eval(result); + actual = 'no error'; + } + catch(e) + { + actual = 'error'; + } + + reportCompare(expect, actual, status); + + status = inSection(2) + ' eval(uneval(g))'; + + try + { + result = uneval(g); + printStatus('uneval returns ' + result); + eval(result); + actual = 'no error'; + } + catch(e) + { + actual = 'error'; + } + + reportCompare(expect, actual, status); +} + +function f() +{ + var obj = new Object(); + + obj['name'] = 'Just a name'; + obj['if'] = false; + obj['some text'] = 'correct'; +} + +function g() +{ + return {'if': "then"}; +} + diff --git a/js/src/tests/js1_5/extensions/regress-237461.js b/js/src/tests/js1_5/extensions/regress-237461.js new file mode 100644 index 000000000..c079d5f1f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-237461.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 237461; +var summary = 'don\'t crash with nested function collides with var'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function g() +{ + var core = {}; + core.js = {}; + core.js.init = function() + { + var loader = null; + + function loader() {} + }; + return core; +} + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + var s = new Script(""+g.toString()); + try + { + var frozen = s.freeze(); // crash. + printStatus("len:" + frozen.length); + } + catch(e) + { + } +} +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-245148.js b/js/src/tests/js1_5/extensions/regress-245148.js new file mode 100644 index 000000000..0b4ca051b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-245148.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245148; +var summary = '[null].toSource() == "[null]"'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Array.prototype.toSource != 'undefined') +{ + expect = '[null]'; + actual = [null].toSource(); + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-245795.js b/js/src/tests/js1_5/extensions/regress-245795.js new file mode 100644 index 000000000..a823fc2f6 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-245795.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245795; +var summary = 'eval(uneval(function)) should be round-trippable'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function a() +{ + b = function() {}; +} + +var r = "function a() { b = function() {}; }"; +eval(uneval(a)); + +var v = a.toString().replace(/[ \n]+/g, ' '); +print(v) + +printStatus("[" + v + "]"); + +expect = r; +actual = v; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-254375.js b/js/src/tests/js1_5/extensions/regress-254375.js new file mode 100644 index 000000000..26972900d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-254375.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 254375; +var summary = 'Object.toSource for negative number property names'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof uneval != 'undefined') +{ + try + { + expect = 'no error'; + eval(uneval({'-1':true})); + actual = 'no error'; + } + catch(e) + { + actual = 'error'; + } + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-255245.js b/js/src/tests/js1_5/extensions/regress-255245.js new file mode 100644 index 000000000..0138fe435 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-255245.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 255245; +var summary = 'Function.prototype.toSource/.toString show "setrval" instead of "return"'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { + try { + } catch (e) { + return false; + } + finally { + } +} + +if (typeof f.toSource != 'undefined') +{ + expect = -1; + actual = f.toSource().indexOf('setrval'); + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-291213.js b/js/src/tests/js1_5/extensions/regress-291213.js new file mode 100644 index 000000000..d3c61a042 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-291213.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 291213; +var summary = 'Do not crash in args_resolve enumerating |arguments|'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var scriptCode = "var result = \"\" + arguments; " + + "for (i in arguments) " + + "result += \"\\\n \" + i + \" \" + arguments[i]; result;"; +var scripts = {}; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + scripts["A"] = new Script(scriptCode); + + scripts["B"] = (function() { + return new Script(scriptCode); + })(); + + scripts["C"] = (function() { + function x() { "a"; } + return new Script(scriptCode); + })(); + +// any Object (window, document, new Array(), ...) + var anyObj = new Object(); + scripts["D"] = (function() { + function x() { anyObj; } + return new Script(scriptCode); + })(); + + var result; + for (var i in scripts) { + try { result = scripts[i].exec(); } + catch (e) { result = e; } + printStatus(i + ") " + result); + } +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-300079.js b/js/src/tests/js1_5/extensions/regress-300079.js new file mode 100644 index 000000000..7d671b602 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-300079.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 300079; +var summary = "precompiled functions should inherit from current window's Function.prototype"; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof clone == 'undefined') { + expect = 'SKIPPED'; + actual = 'SKIPPED'; + } + else { + expect = 'PASSED'; + + f = evaluate("(function () { return a * a; })"); + g = clone(f, {a: 3}); + f = null; + gc(); + try { + a_squared = g(2); + if (a_squared != 9) + throw "Unexpected return from g: a_squared == " + a_squared; + actual = "PASSED"; + } catch (e) { + actual = "FAILED: " + e; + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-303277.js b/js/src/tests/js1_5/extensions/regress-303277.js new file mode 100644 index 000000000..319d9a2ed --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-303277.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 303277; +var summary = 'Do not crash with crash with a watchpoint for __proto__ property '; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {}; +o.watch("__proto__", function(){return null;}); +o.__proto__ = null; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-304897.js b/js/src/tests/js1_5/extensions/regress-304897.js new file mode 100644 index 000000000..940cba79c --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-304897.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 304897; +var summary = 'uneval("\\t"), uneval("\\x09")'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = '"\\t"'; +actual = uneval('\t'); +reportCompare(expect, actual, summary); + +actual = uneval('\x09'); +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-306738.js b/js/src/tests/js1_5/extensions/regress-306738.js new file mode 100644 index 000000000..0493e0714 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-306738.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306738; +var summary = 'uneval() on objects with getter or setter'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +actual = uneval( + { + get foo() + { + return "foo"; + } + }); + +expect = '({get foo() {return "foo";}})'; + +compareSource(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-311161.js b/js/src/tests/js1_5/extensions/regress-311161.js new file mode 100644 index 000000000..049d8eb2e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-311161.js @@ -0,0 +1,1438 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311161; +var summary = 'toSource exposes random memory or crashes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var commands = + [{origCount:1, fun:(function anonymous() {allElements[2].style.background = "#fcd";})}, +{origCount:2, fun:(function anonymous() {allElements[9].style.width = "20em";})}, +{origCount:3, fun:(function anonymous() {allElements[4].style.width = "200%";})}, +{origCount:4, fun:(function anonymous() {allElements[6].style.clear = "right";})}, +{origCount:5, fun:(function anonymous() {allElements[8].style.visibility = "hidden";})}, +{origCount:6, fun:(function anonymous() {allElements[1].style.overflow = "visible";})}, +{origCount:7, fun:(function anonymous() {allElements[4].style.position = "fixed";})}, +{origCount:8, fun:(function anonymous() {allElements[10].style.display = "-moz-inline-stack";})}, +{origCount:9, fun:(function anonymous() {allElements[10].style.overflow = "auto";})}, +{origCount:10, fun:(function anonymous() {allElements[11].style.color = "red";})}, +{origCount:11, fun:(function anonymous() {allElements[4].style.height = "2em";})}, +{origCount:12, fun:(function anonymous() {allElements[9].style.height = "100px";})}, +{origCount:13, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:14, fun:(function anonymous() {allElements[9].style.color = "blue";})}, +{origCount:15, fun:(function anonymous() {allElements[2].style.clear = "right";})}, +{origCount:16, fun:(function anonymous() {allElements[1].style.height = "auto";})}, +{origCount:17, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:18, fun:(function anonymous() {allElements[4].style.display = "table-row-group";})}, +{origCount:19, fun:(function anonymous() {allElements[4].style.overflow = "auto";})}, +{origCount:20, fun:(function anonymous() {allElements[7].style.height = "100px";})}, +{origCount:21, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:22, fun:(function anonymous() {allElements[3].style.display = "-moz-grid-group";})}, +{origCount:23, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:24, fun:(function anonymous() {allElements[10].style.position = "static";})}, +{origCount:25, fun:(function anonymous() {allElements[3].style['float'] = "none";})}, +{origCount:26, fun:(function anonymous() {allElements[4].style['float'] = "none";})}, +{origCount:27, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:28, fun:(function anonymous() {allElements[5].style.visibility = "collapse";})}, +{origCount:29, fun:(function anonymous() {allElements[1].style.position = "static";})}, +{origCount:30, fun:(function anonymous() {allElements[2].style.color = "black";})}, +{origCount:31, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:32, fun:(function anonymous() {allElements[0].style.display = "table-row-group";})}, +{origCount:33, fun:(function anonymous() {allElements[9].style.position = "relative";})}, +{origCount:34, fun:(function anonymous() {allElements[5].style.position = "static";})}, +{origCount:35, fun:(function anonymous() {allElements[6].style.background = "transparent";})}, +{origCount:36, fun:(function anonymous() {allElements[6].style.color = "blue";})}, +{origCount:37, fun:(function anonymous() {allElements[9].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:38, fun:(function anonymous() {allElements[8].style.display = "-moz-grid";})}, +{origCount:39, fun:(function anonymous() {allElements[9].style.color = "black";})}, +{origCount:40, fun:(function anonymous() {allElements[4].style.position = "static";})}, +{origCount:41, fun:(function anonymous() {allElements[10].style.height = "auto";})}, +{origCount:42, fun:(function anonymous() {allElements[9].style.color = "green";})}, +{origCount:43, fun:(function anonymous() {allElements[4].style.height = "auto";})}, +{origCount:44, fun:(function anonymous() {allElements[2].style.clear = "both";})}, +{origCount:45, fun:(function anonymous() {allElements[8].style.width = "1px";})}, +{origCount:46, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:47, fun:(function anonymous() {allElements[1].style.clear = "left";})}, +{origCount:48, fun:(function anonymous() {allElements[11].style.overflow = "auto";})}, +{origCount:49, fun:(function anonymous() {allElements[11].style['float'] = "left";})}, +{origCount:50, fun:(function anonymous() {allElements[8].style['float'] = "left";})}, +{origCount:51, fun:(function anonymous() {allElements[6].style.height = "10%";})}, +{origCount:52, fun:(function anonymous() {allElements[11].style.display = "-moz-inline-stack";})}, +{origCount:53, fun:(function anonymous() {allElements[3].style.clear = "left";})}, +{origCount:54, fun:(function anonymous() {allElements[11].style.visibility = "hidden";})}, +{origCount:55, fun:(function anonymous() {allElements[4].style['float'] = "right";})}, +{origCount:56, fun:(function anonymous() {allElements[0].style.width = "1px";})}, +{origCount:57, fun:(function anonymous() {allElements[3].style.height = "200%";})}, +{origCount:58, fun:(function anonymous() {allElements[7].style.height = "10%";})}, +{origCount:59, fun:(function anonymous() {allElements[4].style.clear = "none";})}, +{origCount:60, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:61, fun:(function anonymous() {allElements[9].style['float'] = "left";})}, +{origCount:62, fun:(function anonymous() {allElements[4].style.overflow = "scroll";})}, +{origCount:63, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:64, fun:(function anonymous() {allElements[2].style.color = "green";})}, +{origCount:65, fun:(function anonymous() {allElements[3].style['float'] = "none";})}, +{origCount:66, fun:(function anonymous() {allElements[10].style.background = "transparent";})}, +{origCount:67, fun:(function anonymous() {allElements[0].style.height = "auto";})}, +{origCount:68, fun:(function anonymous() {allElements[6].style.clear = "left";})}, +{origCount:69, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:70, fun:(function anonymous() {allElements[8].style.display = "-moz-popup";})}, +{origCount:71, fun:(function anonymous() {allElements[2].style.height = "10%";})}, +{origCount:72, fun:(function anonymous() {allElements[7].style.display = "table-cell";})}, +{origCount:73, fun:(function anonymous() {allElements[3].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:74, fun:(function anonymous() {allElements[8].style.color = "red";})}, +{origCount:75, fun:(function anonymous() {allElements[1].style.overflow = "auto";})}, +{origCount:76, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:77, fun:(function anonymous() {allElements[0].style.color = "red";})}, +{origCount:78, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:79, fun:(function anonymous() {allElements[5].style.position = "static";})}, +{origCount:80, fun:(function anonymous() {allElements[8].style.clear = "both";})}, +{origCount:81, fun:(function anonymous() {allElements[7].style.clear = "both";})}, +{origCount:82, fun:(function anonymous() {allElements[5].style.clear = "both";})}, +{origCount:83, fun:(function anonymous() {allElements[10].style.display = "-moz-grid-group";})}, +{origCount:84, fun:(function anonymous() {allElements[12].style.clear = "right";})}, +{origCount:85, fun:(function anonymous() {allElements[5].style['float'] = "left";})}, +{origCount:86, fun:(function anonymous() {allElements[8].style.position = "absolute";})}, +{origCount:87, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:88, fun:(function anonymous() {allElements[9].style.position = "relative";})}, +{origCount:89, fun:(function anonymous() {allElements[5].style.width = "20em";})}, +{origCount:90, fun:(function anonymous() {allElements[6].style.position = "absolute";})}, +{origCount:91, fun:(function anonymous() {allElements[5].style.overflow = "scroll";})}, +{origCount:92, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:93, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:94, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:95, fun:(function anonymous() {allElements[0].style.visibility = "hidden";})}, +{origCount:96, fun:(function anonymous() {allElements[0].style.color = "blue";})}, +{origCount:97, fun:(function anonymous() {allElements[3].style['float'] = "left";})}, +{origCount:98, fun:(function anonymous() {allElements[3].style.height = "200%";})}, +{origCount:99, fun:(function anonymous() {allElements[4].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:100, fun:(function anonymous() {allElements[12].style.width = "10%";})}, +{origCount:101, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:102, fun:(function anonymous() {allElements[5].style.width = "auto";})}, +{origCount:103, fun:(function anonymous() {allElements[1].style.position = "static";})}, +{origCount:104, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:105, fun:(function anonymous() {allElements[5].style['float'] = "right";})}, +{origCount:106, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:107, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:108, fun:(function anonymous() {allElements[9].style.width = "20em";})}, +{origCount:109, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:110, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:111, fun:(function anonymous() {allElements[6].style.visibility = "collapse";})}, +{origCount:112, fun:(function anonymous() {allElements[11].style.height = "200%";})}, +{origCount:113, fun:(function anonymous() {allElements[3].style.visibility = "visible";})}, +{origCount:114, fun:(function anonymous() {allElements[12].style.width = "200%";})}, +{origCount:115, fun:(function anonymous() {allElements[5].style.height = "10%";})}, +{origCount:116, fun:(function anonymous() {allElements[1].style['float'] = "left";})}, +{origCount:117, fun:(function anonymous() {allElements[5].style.overflow = "scroll";})}, +{origCount:118, fun:(function anonymous() {allElements[9].style.width = "10%";})}, +{origCount:119, fun:(function anonymous() {allElements[6].style.position = "static";})}, +{origCount:120, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:121, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:122, fun:(function anonymous() {allElements[7].style.width = "1px";})}, +{origCount:123, fun:(function anonymous() {allElements[3].style.color = "blue";})}, +{origCount:124, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:125, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:126, fun:(function anonymous() {allElements[1].style.overflow = "auto";})}, +{origCount:127, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:128, fun:(function anonymous() {allElements[12].style.color = "green";})}, +{origCount:129, fun:(function anonymous() {allElements[0].style.color = "black";})}, +{origCount:130, fun:(function anonymous() {allElements[1].style.position = "relative";})}, +{origCount:131, fun:(function anonymous() {allElements[9].style.overflow = "auto";})}, +{origCount:132, fun:(function anonymous() {allElements[1].style.display = "table-row";})}, +{origCount:133, fun:(function anonymous() {allElements[10].style['float'] = "right";})}, +{origCount:134, fun:(function anonymous() {allElements[2].style.visibility = "hidden";})}, +{origCount:135, fun:(function anonymous() {allElements[9].style.overflow = "auto";})}, +{origCount:136, fun:(function anonymous() {allElements[9].style.clear = "none";})}, +{origCount:137, fun:(function anonymous() {allElements[9].style.position = "absolute";})}, +{origCount:138, fun:(function anonymous() {allElements[0].style.width = "10%";})}, +{origCount:139, fun:(function anonymous() {allElements[1].style.height = "10%";})}, +{origCount:140, fun:(function anonymous() {allElements[5].style.height = "auto";})}, +{origCount:141, fun:(function anonymous() {allElements[4].style.position = "fixed";})}, +{origCount:142, fun:(function anonymous() {allElements[3].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:143, fun:(function anonymous() {allElements[7].style.display = "table-header-group";})}, +{origCount:144, fun:(function anonymous() {allElements[10].style.position = "fixed";})}, +{origCount:145, fun:(function anonymous() {allElements[4].style.background = "transparent";})}, +{origCount:146, fun:(function anonymous() {allElements[6].style.position = "relative";})}, +{origCount:147, fun:(function anonymous() {allElements[10].style.clear = "both";})}, +{origCount:148, fun:(function anonymous() {allElements[8].style.display = "table-header-group";})}, +{origCount:149, fun:(function anonymous() {allElements[5].style.height = "200%";})}, +{origCount:150, fun:(function anonymous() {allElements[7].style.height = "2em";})}, +{origCount:151, fun:(function anonymous() {allElements[6].style.position = "relative";})}, +{origCount:152, fun:(function anonymous() {allElements[7].style.height = "2em";})}, +{origCount:153, fun:(function anonymous() {allElements[3].style.width = "10%";})}, +{origCount:154, fun:(function anonymous() {allElements[12].style.color = "blue";})}, +{origCount:155, fun:(function anonymous() {allElements[2].style.color = "green";})}, +{origCount:156, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:157, fun:(function anonymous() {allElements[6].style['float'] = "right";})}, +{origCount:158, fun:(function anonymous() {allElements[6].style.visibility = "collapse";})}, +{origCount:159, fun:(function anonymous() {allElements[8].style.position = "absolute";})}, +{origCount:160, fun:(function anonymous() {allElements[3].style.height = "2em";})}, +{origCount:161, fun:(function anonymous() {allElements[10].style.display = "-moz-grid-line";})}, +{origCount:162, fun:(function anonymous() {allElements[9].style.color = "red";})}, +{origCount:163, fun:(function anonymous() {allElements[6].style.overflow = "hidden";})}, +{origCount:164, fun:(function anonymous() {allElements[4].style.overflow = "scroll";})}, +{origCount:165, fun:(function anonymous() {allElements[11].style.height = "100px";})}, +{origCount:166, fun:(function anonymous() {allElements[5].style.display = "table-footer-group";})}, +{origCount:167, fun:(function anonymous() {allElements[5].style.color = "red";})}, +{origCount:168, fun:(function anonymous() {allElements[3].style.width = "20em";})}, +{origCount:169, fun:(function anonymous() {allElements[4].style['float'] = "right";})}, +{origCount:170, fun:(function anonymous() {allElements[2].style.background = "transparent";})}, +{origCount:171, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:172, fun:(function anonymous() {allElements[6].style.visibility = "hidden";})}, +{origCount:173, fun:(function anonymous() {allElements[11].style['float'] = "right";})}, +{origCount:174, fun:(function anonymous() {allElements[8].style.height = "200%";})}, +{origCount:175, fun:(function anonymous() {allElements[1].style.position = "relative";})}, +{origCount:176, fun:(function anonymous() {allElements[11].style.width = "auto";})}, +{origCount:177, fun:(function anonymous() {allElements[2].style.background = "#fcd";})}, +{origCount:178, fun:(function anonymous() {allElements[6].style.position = "absolute";})}, +{origCount:179, fun:(function anonymous() {allElements[3].style.position = "absolute";})}, +{origCount:180, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:181, fun:(function anonymous() {allElements[11].style.background = "transparent";})}, +{origCount:182, fun:(function anonymous() {allElements[6].style.height = "200%";})}, +{origCount:183, fun:(function anonymous() {allElements[2].style['float'] = "none";})}, +{origCount:184, fun:(function anonymous() {allElements[5].style.position = "absolute";})}, +{origCount:185, fun:(function anonymous() {allElements[8].style.color = "blue";})}, +{origCount:186, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:187, fun:(function anonymous() {allElements[6].style.height = "200%";})}, +{origCount:188, fun:(function anonymous() {allElements[0].style.width = "20em";})}, +{origCount:189, fun:(function anonymous() {allElements[1].style.display = "table-row-group";})}, +{origCount:190, fun:(function anonymous() {allElements[3].style.visibility = "hidden";})}, +{origCount:191, fun:(function anonymous() {allElements[11].style.width = "10%";})}, +{origCount:192, fun:(function anonymous() {allElements[4].style.width = "200%";})}, +{origCount:193, fun:(function anonymous() {allElements[0].style['float'] = "right";})}, +{origCount:194, fun:(function anonymous() {allElements[5].style.background = "#fcd";})}, +{origCount:195, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:196, fun:(function anonymous() {allElements[0].style.display = "table-column";})}, +{origCount:197, fun:(function anonymous() {allElements[0].style.width = "auto";})}, +{origCount:198, fun:(function anonymous() {allElements[4].style.color = "green";})}, +{origCount:199, fun:(function anonymous() {allElements[6].style.clear = "none";})}, +{origCount:200, fun:(function anonymous() {allElements[10].style.overflow = "hidden";})}, +{origCount:201, fun:(function anonymous() {allElements[9].style.visibility = "collapse";})}, +{origCount:202, fun:(function anonymous() {allElements[9].style.height = "100px";})}, +{origCount:203, fun:(function anonymous() {allElements[1].style.width = "auto";})}, +{origCount:204, fun:(function anonymous() {allElements[4].style.position = "fixed";})}, +{origCount:205, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:206, fun:(function anonymous() {allElements[1].style.clear = "right";})}, +{origCount:207, fun:(function anonymous() {allElements[5].style.display = "-moz-stack";})}, +{origCount:208, fun:(function anonymous() {allElements[3].style.color = "black";})}, +{origCount:209, fun:(function anonymous() {allElements[1].style.background = "transparent";})}, +{origCount:210, fun:(function anonymous() {allElements[3].style['float'] = "left";})}, +{origCount:211, fun:(function anonymous() {allElements[2].style.height = "2em";})}, +{origCount:212, fun:(function anonymous() {allElements[4].style.width = "auto";})}, +{origCount:213, fun:(function anonymous() {allElements[0].style['float'] = "none";})}, +{origCount:214, fun:(function anonymous() {allElements[10].style.display = "table-caption";})}, +{origCount:215, fun:(function anonymous() {allElements[0].style.overflow = "auto";})}, +{origCount:216, fun:(function anonymous() {allElements[0].style.color = "green";})}, +{origCount:217, fun:(function anonymous() {allElements[5].style.background = "#fcd";})}, +{origCount:218, fun:(function anonymous() {allElements[5].style.visibility = "hidden";})}, +{origCount:219, fun:(function anonymous() {allElements[7].style.width = "200%";})}, +{origCount:220, fun:(function anonymous() {allElements[2].style.background = "transparent";})}, +{origCount:221, fun:(function anonymous() {allElements[10].style.visibility = "hidden";})}, +{origCount:222, fun:(function anonymous() {allElements[10].style['float'] = "right";})}, +{origCount:223, fun:(function anonymous() {allElements[6].style.position = "absolute";})}, +{origCount:224, fun:(function anonymous() {allElements[5].style.background = "transparent";})}, +{origCount:225, fun:(function anonymous() {allElements[12].style.overflow = "hidden";})}, +{origCount:226, fun:(function anonymous() {allElements[7].style.clear = "left";})}, +{origCount:227, fun:(function anonymous() {allElements[7].style.height = "200%";})}, +{origCount:228, fun:(function anonymous() {allElements[5].style.position = "absolute";})}, +{origCount:229, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:230, fun:(function anonymous() {allElements[5].style.clear = "both";})}, +{origCount:231, fun:(function anonymous() {allElements[4].style.clear = "left";})}, +{origCount:232, fun:(function anonymous() {allElements[10].style.position = "fixed";})}, +{origCount:233, fun:(function anonymous() {allElements[2].style.overflow = "scroll";})}, +{origCount:234, fun:(function anonymous() {allElements[12].style.background = "#fcd";})}, +{origCount:235, fun:(function anonymous() {allElements[6].style.color = "black";})}, +{origCount:236, fun:(function anonymous() {allElements[3].style.position = "absolute";})}, +{origCount:237, fun:(function anonymous() {allElements[8].style.color = "red";})}, +{origCount:238, fun:(function anonymous() {allElements[12].style.background = "transparent";})}, +{origCount:239, fun:(function anonymous() {allElements[10].style['float'] = "none";})}, +{origCount:240, fun:(function anonymous() {allElements[6].style['float'] = "right";})}, +{origCount:241, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:242, fun:(function anonymous() {allElements[0].style.color = "red";})}, +{origCount:243, fun:(function anonymous() {allElements[10].style['float'] = "none";})}, +{origCount:244, fun:(function anonymous() {allElements[1].style.width = "1px";})}, +{origCount:245, fun:(function anonymous() {allElements[3].style.position = "fixed";})}, +{origCount:246, fun:(function anonymous() {allElements[11].style.clear = "left";})}, +{origCount:247, fun:(function anonymous() {allElements[2].style.position = "absolute";})}, +{origCount:248, fun:(function anonymous() {allElements[9].style.background = "#fcd";})}, +{origCount:249, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:250, fun:(function anonymous() {allElements[1].style.height = "100px";})}, +{origCount:251, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:252, fun:(function anonymous() {allElements[2].style.display = "block";})}, +{origCount:253, fun:(function anonymous() {allElements[12].style.background = "#fcd";})}, +{origCount:254, fun:(function anonymous() {allElements[4].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:255, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:256, fun:(function anonymous() {allElements[0].style.height = "auto";})}, +{origCount:257, fun:(function anonymous() {allElements[0].style.height = "100px";})}, +{origCount:258, fun:(function anonymous() {allElements[5].style.clear = "right";})}, +{origCount:259, fun:(function anonymous() {allElements[7].style.height = "100px";})}, +{origCount:260, fun:(function anonymous() {allElements[11].style.background = "transparent";})}, +{origCount:261, fun:(function anonymous() {allElements[11].style.width = "20em";})}, +{origCount:262, fun:(function anonymous() {allElements[10].style.width = "1px";})}, +{origCount:263, fun:(function anonymous() {allElements[3].style.clear = "left";})}, +{origCount:264, fun:(function anonymous() {allElements[7].style['float'] = "left";})}, +{origCount:265, fun:(function anonymous() {allElements[1].style['float'] = "none";})}, +{origCount:266, fun:(function anonymous() {allElements[4].style.overflow = "scroll";})}, +{origCount:267, fun:(function anonymous() {allElements[9].style.height = "auto";})}, +{origCount:268, fun:(function anonymous() {allElements[7].style.background = "transparent";})}, +{origCount:269, fun:(function anonymous() {allElements[5].style.display = "table";})}, +{origCount:270, fun:(function anonymous() {allElements[7].style.width = "200%";})}, +{origCount:271, fun:(function anonymous() {allElements[7].style.clear = "left";})}, +{origCount:272, fun:(function anonymous() {allElements[9].style.visibility = "hidden";})}, +{origCount:273, fun:(function anonymous() {allElements[6].style.height = "10%";})}, +{origCount:274, fun:(function anonymous() {allElements[3].style.position = "fixed";})}, +{origCount:275, fun:(function anonymous() {allElements[6].style.display = "block";})}, +{origCount:276, fun:(function anonymous() {allElements[7].style.overflow = "visible";})}, +{origCount:277, fun:(function anonymous() {allElements[12].style['float'] = "none";})}, +{origCount:278, fun:(function anonymous() {allElements[0].style['float'] = "none";})}, +{origCount:279, fun:(function anonymous() {allElements[2].style.height = "10%";})}, +{origCount:280, fun:(function anonymous() {allElements[11].style.clear = "right";})}, +{origCount:281, fun:(function anonymous() {allElements[6].style.clear = "both";})}, +{origCount:282, fun:(function anonymous() {allElements[6].style.display = "-moz-box";})}, +{origCount:283, fun:(function anonymous() {allElements[3].style.height = "100px";})}, +{origCount:284, fun:(function anonymous() {allElements[2].style.color = "blue";})}, +{origCount:285, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:286, fun:(function anonymous() {allElements[4].style.background = "transparent";})}, +{origCount:287, fun:(function anonymous() {allElements[5].style.height = "auto";})}, +{origCount:288, fun:(function anonymous() {allElements[3].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:289, fun:(function anonymous() {allElements[5].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:290, fun:(function anonymous() {allElements[4].style.clear = "right";})}, +{origCount:291, fun:(function anonymous() {allElements[3].style.overflow = "auto";})}, +{origCount:292, fun:(function anonymous() {allElements[10].style.display = "-moz-stack";})}, +{origCount:293, fun:(function anonymous() {allElements[2].style.color = "red";})}, +{origCount:294, fun:(function anonymous() {allElements[0].style.display = "-moz-groupbox";})}, +{origCount:295, fun:(function anonymous() {allElements[7].style.position = "fixed";})}, +{origCount:296, fun:(function anonymous() {allElements[4].style.color = "green";})}, +{origCount:297, fun:(function anonymous() {allElements[9].style.display = "-moz-box";})}, +{origCount:298, fun:(function anonymous() {allElements[1].style.color = "green";})}, +{origCount:299, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:300, fun:(function anonymous() {allElements[8].style.color = "red";})}, +{origCount:301, fun:(function anonymous() {allElements[8].style['float'] = "left";})}, +{origCount:302, fun:(function anonymous() {allElements[3].style.height = "2em";})}, +{origCount:303, fun:(function anonymous() {allElements[1].style.width = "auto";})}, +{origCount:304, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:305, fun:(function anonymous() {allElements[8].style.width = "20em";})}, +{origCount:306, fun:(function anonymous() {allElements[2].style.height = "2em";})}, +{origCount:307, fun:(function anonymous() {allElements[7].style.color = "red";})}, +{origCount:308, fun:(function anonymous() {allElements[2].style.display = "-moz-inline-box";})}, +{origCount:309, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:310, fun:(function anonymous() {allElements[7].style.display = "-moz-deck";})}, +{origCount:311, fun:(function anonymous() {allElements[2].style.visibility = "hidden";})}, +{origCount:312, fun:(function anonymous() {allElements[9].style.clear = "both";})}, +{origCount:313, fun:(function anonymous() {allElements[6].style['float'] = "left";})}, +{origCount:314, fun:(function anonymous() {allElements[12].style.position = "static";})}, +{origCount:315, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:316, fun:(function anonymous() {allElements[8].style.visibility = "visible";})}, +{origCount:317, fun:(function anonymous() {allElements[8].style.background = "#fcd";})}, +{origCount:318, fun:(function anonymous() {allElements[1].style.visibility = "collapse";})}, +{origCount:319, fun:(function anonymous() {allElements[3].style.position = "static";})}, +{origCount:320, fun:(function anonymous() {allElements[8].style.overflow = "hidden";})}, +{origCount:321, fun:(function anonymous() {allElements[8].style.clear = "left";})}, +{origCount:322, fun:(function anonymous() {allElements[8].style.position = "static";})}, +{origCount:323, fun:(function anonymous() {allElements[1].style['float'] = "none";})}, +{origCount:324, fun:(function anonymous() {allElements[5].style.visibility = "hidden";})}, +{origCount:325, fun:(function anonymous() {allElements[12].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:326, fun:(function anonymous() {allElements[3].style.overflow = "visible";})}, +{origCount:327, fun:(function anonymous() {allElements[8].style.visibility = "collapse";})}, +{origCount:328, fun:(function anonymous() {allElements[7].style.position = "static";})}, +{origCount:329, fun:(function anonymous() {allElements[5].style.visibility = "collapse";})}, +{origCount:330, fun:(function anonymous() {allElements[8].style.visibility = "visible";})}, +{origCount:331, fun:(function anonymous() {allElements[8].style.height = "auto";})}, +{origCount:332, fun:(function anonymous() {allElements[10].style.overflow = "scroll";})}, +{origCount:333, fun:(function anonymous() {allElements[7].style.overflow = "visible";})}, +{origCount:334, fun:(function anonymous() {allElements[5].style.visibility = "visible";})}, +{origCount:335, fun:(function anonymous() {allElements[8].style.position = "fixed";})}, +{origCount:336, fun:(function anonymous() {allElements[10].style.display = "-moz-grid-line";})}, +{origCount:337, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:338, fun:(function anonymous() {allElements[3].style.position = "absolute";})}, +{origCount:339, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:340, fun:(function anonymous() {allElements[2].style.display = "-moz-groupbox";})}, +{origCount:341, fun:(function anonymous() {allElements[10].style.overflow = "auto";})}, +{origCount:342, fun:(function anonymous() {allElements[10].style['float'] = "left";})}, +{origCount:343, fun:(function anonymous() {allElements[8].style.clear = "both";})}, +{origCount:344, fun:(function anonymous() {allElements[8].style.clear = "right";})}, +{origCount:345, fun:(function anonymous() {allElements[2].style.color = "blue";})}, +{origCount:346, fun:(function anonymous() {allElements[10].style.height = "10%";})}, +{origCount:347, fun:(function anonymous() {allElements[11].style.overflow = "hidden";})}, +{origCount:348, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:349, fun:(function anonymous() {allElements[0].style['float'] = "left";})}, +{origCount:350, fun:(function anonymous() {allElements[11].style.width = "10%";})}, +{origCount:351, fun:(function anonymous() {allElements[11].style.overflow = "hidden";})}, +{origCount:352, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:353, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:354, fun:(function anonymous() {allElements[9].style.position = "static";})}, +{origCount:355, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:356, fun:(function anonymous() {allElements[1].style.position = "fixed";})}, +{origCount:357, fun:(function anonymous() {allElements[6].style.position = "fixed";})}, +{origCount:358, fun:(function anonymous() {allElements[12].style.display = "block";})}, +{origCount:359, fun:(function anonymous() {allElements[10].style.display = "-moz-inline-block";})}, +{origCount:360, fun:(function anonymous() {allElements[6].style.height = "100px";})}, +{origCount:361, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:362, fun:(function anonymous() {allElements[2].style['float'] = "right";})}, +{origCount:363, fun:(function anonymous() {allElements[0].style.display = "-moz-grid-group";})}, +{origCount:364, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:365, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:366, fun:(function anonymous() {allElements[3].style.position = "relative";})}, +{origCount:367, fun:(function anonymous() {allElements[8].style.position = "static";})}, +{origCount:368, fun:(function anonymous() {allElements[3].style.position = "relative";})}, +{origCount:369, fun:(function anonymous() {allElements[5].style.width = "auto";})}, +{origCount:370, fun:(function anonymous() {allElements[8].style.clear = "none";})}, +{origCount:371, fun:(function anonymous() {allElements[4].style.color = "red";})}, +{origCount:372, fun:(function anonymous() {allElements[11].style.width = "auto";})}, +{origCount:373, fun:(function anonymous() {allElements[9].style['float'] = "right";})}, +{origCount:374, fun:(function anonymous() {allElements[2].style.width = "20em";})}, +{origCount:375, fun:(function anonymous() {allElements[10].style.position = "relative";})}, +{origCount:376, fun:(function anonymous() {allElements[12].style.position = "relative";})}, +{origCount:377, fun:(function anonymous() {allElements[0].style.display = "-moz-grid";})}, +{origCount:378, fun:(function anonymous() {allElements[5].style.clear = "left";})}, +{origCount:379, fun:(function anonymous() {allElements[8].style.color = "green";})}, +{origCount:380, fun:(function anonymous() {allElements[0].style.clear = "both";})}, +{origCount:381, fun:(function anonymous() {allElements[0].style['float'] = "left";})}, +{origCount:382, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:383, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:384, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:385, fun:(function anonymous() {allElements[7].style['float'] = "right";})}, +{origCount:386, fun:(function anonymous() {allElements[11].style.display = "table-row";})}, +{origCount:387, fun:(function anonymous() {allElements[3].style.position = "absolute";})}, +{origCount:388, fun:(function anonymous() {allElements[2].style.height = "200%";})}, +{origCount:389, fun:(function anonymous() {allElements[1].style.clear = "none";})}, +{origCount:390, fun:(function anonymous() {allElements[4].style.position = "static";})}, +{origCount:391, fun:(function anonymous() {allElements[4].style.position = "relative";})}, +{origCount:392, fun:(function anonymous() {allElements[7].style.position = "fixed";})}, +{origCount:393, fun:(function anonymous() {allElements[4].style.background = "transparent";})}, +{origCount:394, fun:(function anonymous() {allElements[2].style.height = "200%";})}, +{origCount:395, fun:(function anonymous() {allElements[6].style.position = "relative";})}, +{origCount:396, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:397, fun:(function anonymous() {allElements[0].style.background = "transparent";})}, +{origCount:398, fun:(function anonymous() {allElements[2].style.position = "static";})}, +{origCount:399, fun:(function anonymous() {allElements[4].style['float'] = "none";})}, +{origCount:400, fun:(function anonymous() {allElements[1].style.height = "200%";})}, +{origCount:401, fun:(function anonymous() {allElements[10].style.color = "green";})}, +{origCount:402, fun:(function anonymous() {allElements[11].style.overflow = "hidden";})}, +{origCount:403, fun:(function anonymous() {allElements[8].style.height = "200%";})}, +{origCount:404, fun:(function anonymous() {allElements[9].style.visibility = "hidden";})}, +{origCount:405, fun:(function anonymous() {allElements[4].style.display = "block";})}, +{origCount:406, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:407, fun:(function anonymous() {allElements[0].style.width = "auto";})}, +{origCount:408, fun:(function anonymous() {allElements[0].style.position = "static";})}, +{origCount:409, fun:(function anonymous() {allElements[2].style['float'] = "right";})}, +{origCount:410, fun:(function anonymous() {allElements[1].style.display = "-moz-grid-group";})}, +{origCount:411, fun:(function anonymous() {allElements[2].style.visibility = "hidden";})}, +{origCount:412, fun:(function anonymous() {allElements[9].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:413, fun:(function anonymous() {allElements[2].style.width = "auto";})}, +{origCount:414, fun:(function anonymous() {allElements[0].style.display = "-moz-inline-box";})}, +{origCount:415, fun:(function anonymous() {allElements[9].style.clear = "none";})}, +{origCount:416, fun:(function anonymous() {allElements[6].style['float'] = "none";})}, +{origCount:417, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:418, fun:(function anonymous() {allElements[5].style.position = "absolute";})}, +{origCount:419, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:420, fun:(function anonymous() {allElements[0].style.height = "2em";})}, +{origCount:421, fun:(function anonymous() {allElements[0].style['float'] = "right";})}, +{origCount:422, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:423, fun:(function anonymous() {allElements[8].style.display = "-moz-inline-box";})}, +{origCount:424, fun:(function anonymous() {allElements[12].style.clear = "none";})}, +{origCount:425, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:426, fun:(function anonymous() {allElements[12].style.overflow = "scroll";})}, +{origCount:427, fun:(function anonymous() {allElements[4].style.height = "200%";})}, +{origCount:428, fun:(function anonymous() {allElements[12].style.visibility = "collapse";})}, +{origCount:429, fun:(function anonymous() {allElements[2].style.clear = "right";})}, +{origCount:430, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:431, fun:(function anonymous() {allElements[2].style.color = "blue";})}, +{origCount:432, fun:(function anonymous() {allElements[9].style.clear = "right";})}, +{origCount:433, fun:(function anonymous() {allElements[7].style.background = "transparent";})}, +{origCount:434, fun:(function anonymous() {allElements[1].style.width = "10%";})}, +{origCount:435, fun:(function anonymous() {allElements[9].style.width = "10%";})}, +{origCount:436, fun:(function anonymous() {allElements[11].style.display = "table-column-group";})}, +{origCount:437, fun:(function anonymous() {allElements[0].style.visibility = "visible";})}, +{origCount:438, fun:(function anonymous() {allElements[6].style.color = "black";})}, +{origCount:439, fun:(function anonymous() {allElements[9].style.position = "relative";})}, +{origCount:440, fun:(function anonymous() {allElements[1].style.visibility = "hidden";})}, +{origCount:441, fun:(function anonymous() {allElements[2].style.overflow = "hidden";})}, +{origCount:442, fun:(function anonymous() {allElements[3].style.color = "black";})}, +{origCount:443, fun:(function anonymous() {allElements[9].style.height = "200%";})}, +{origCount:444, fun:(function anonymous() {allElements[1].style.height = "200%";})}, +{origCount:445, fun:(function anonymous() {allElements[9].style['float'] = "right";})}, +{origCount:446, fun:(function anonymous() {allElements[1].style.color = "green";})}, +{origCount:447, fun:(function anonymous() {allElements[6].style.clear = "left";})}, +{origCount:448, fun:(function anonymous() {allElements[6].style.height = "2em";})}, +{origCount:449, fun:(function anonymous() {allElements[5].style.overflow = "visible";})}, +{origCount:450, fun:(function anonymous() {allElements[8].style.visibility = "collapse";})}, +{origCount:451, fun:(function anonymous() {allElements[9].style.color = "blue";})}, +{origCount:452, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:453, fun:(function anonymous() {allElements[10].style.color = "red";})}, +{origCount:454, fun:(function anonymous() {allElements[8].style.display = "table-cell";})}, +{origCount:455, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:456, fun:(function anonymous() {allElements[2].style.overflow = "auto";})}, +{origCount:457, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:458, fun:(function anonymous() {allElements[9].style.clear = "left";})}, +{origCount:459, fun:(function anonymous() {allElements[12].style.clear = "right";})}, +{origCount:460, fun:(function anonymous() {allElements[9].style.position = "absolute";})}, +{origCount:461, fun:(function anonymous() {allElements[6].style.position = "fixed";})}, +{origCount:462, fun:(function anonymous() {allElements[7].style.color = "blue";})}, +{origCount:463, fun:(function anonymous() {allElements[5].style.position = "absolute";})}, +{origCount:464, fun:(function anonymous() {allElements[5].style.display = "-moz-popup";})}, +{origCount:465, fun:(function anonymous() {allElements[1].style.position = "static";})}, +{origCount:466, fun:(function anonymous() {allElements[9].style.position = "absolute";})}, +{origCount:467, fun:(function anonymous() {allElements[11].style.background = "transparent";})}, +{origCount:468, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:469, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:470, fun:(function anonymous() {allElements[0].style.display = "table-row";})}, +{origCount:471, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:472, fun:(function anonymous() {allElements[8].style.position = "fixed";})}, +{origCount:473, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:474, fun:(function anonymous() {allElements[1].style.color = "red";})}, +{origCount:475, fun:(function anonymous() {allElements[9].style.height = "2em";})}, +{origCount:476, fun:(function anonymous() {allElements[7].style.display = "-moz-grid";})}, +{origCount:477, fun:(function anonymous() {allElements[0].style.height = "2em";})}, +{origCount:478, fun:(function anonymous() {allElements[6].style.position = "absolute";})}, +{origCount:479, fun:(function anonymous() {allElements[5].style.clear = "none";})}, +{origCount:480, fun:(function anonymous() {allElements[3].style.overflow = "hidden";})}, +{origCount:481, fun:(function anonymous() {allElements[3].style['float'] = "none";})}, +{origCount:482, fun:(function anonymous() {allElements[0].style['float'] = "none";})}, +{origCount:483, fun:(function anonymous() {allElements[11].style.height = "100px";})}, +{origCount:484, fun:(function anonymous() {allElements[3].style.display = "-moz-inline-grid";})}, +{origCount:485, fun:(function anonymous() {allElements[7].style.display = "block";})}, +{origCount:486, fun:(function anonymous() {allElements[3].style.visibility = "visible";})}, +{origCount:487, fun:(function anonymous() {allElements[9].style.clear = "left";})}, +{origCount:488, fun:(function anonymous() {allElements[5].style.width = "200%";})}, +{origCount:489, fun:(function anonymous() {allElements[8].style['float'] = "right";})}, +{origCount:490, fun:(function anonymous() {allElements[12].style.height = "100px";})}, +{origCount:491, fun:(function anonymous() {allElements[8].style.display = "-moz-deck";})}, +{origCount:492, fun:(function anonymous() {allElements[3].style.clear = "right";})}, +{origCount:493, fun:(function anonymous() {allElements[1].style['float'] = "none";})}, +{origCount:494, fun:(function anonymous() {allElements[8].style.overflow = "visible";})}, +{origCount:495, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:496, fun:(function anonymous() {allElements[7].style.color = "red";})}, +{origCount:497, fun:(function anonymous() {allElements[8].style.clear = "right";})}, +{origCount:498, fun:(function anonymous() {allElements[2].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:499, fun:(function anonymous() {allElements[5].style.height = "100px";})}, +{origCount:500, fun:(function anonymous() {allElements[11].style.clear = "none";})}, +{origCount:501, fun:(function anonymous() {allElements[12].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:502, fun:(function anonymous() {allElements[0].style.display = "-moz-grid";})}, +{origCount:503, fun:(function anonymous() {allElements[7].style.height = "100px";})}, +{origCount:504, fun:(function anonymous() {allElements[12].style.visibility = "visible";})}, +{origCount:505, fun:(function anonymous() {allElements[8].style.background = "#fcd";})}, +{origCount:506, fun:(function anonymous() {allElements[0].style.color = "black";})}, +{origCount:507, fun:(function anonymous() {allElements[6].style.overflow = "hidden";})}, +{origCount:508, fun:(function anonymous() {allElements[6].style.background = "transparent";})}, +{origCount:509, fun:(function anonymous() {allElements[5].style.color = "black";})}, +{origCount:510, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:511, fun:(function anonymous() {allElements[10].style.position = "fixed";})}, +{origCount:512, fun:(function anonymous() {allElements[0].style.clear = "right";})}, +{origCount:513, fun:(function anonymous() {allElements[11].style.display = "table-caption";})}, +{origCount:514, fun:(function anonymous() {allElements[10].style.clear = "right";})}, +{origCount:515, fun:(function anonymous() {allElements[1].style.visibility = "hidden";})}, +{origCount:516, fun:(function anonymous() {allElements[4].style.clear = "left";})}, +{origCount:517, fun:(function anonymous() {allElements[10].style['float'] = "none";})}, +{origCount:518, fun:(function anonymous() {allElements[12].style.overflow = "scroll";})}, +{origCount:519, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:520, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:521, fun:(function anonymous() {allElements[10].style.height = "200%";})}, +{origCount:522, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:523, fun:(function anonymous() {allElements[10].style.color = "black";})}, +{origCount:524, fun:(function anonymous() {allElements[11].style.background = "transparent";})}, +{origCount:525, fun:(function anonymous() {allElements[6].style.visibility = "collapse";})}, +{origCount:526, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:527, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:528, fun:(function anonymous() {allElements[5].style.background = "transparent";})}, +{origCount:529, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:530, fun:(function anonymous() {allElements[8].style.height = "auto";})}, +{origCount:531, fun:(function anonymous() {allElements[9].style.background = "#fcd";})}, +{origCount:532, fun:(function anonymous() {allElements[4].style.height = "auto";})}, +{origCount:533, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:534, fun:(function anonymous() {allElements[10].style.width = "20em";})}, +{origCount:535, fun:(function anonymous() {allElements[6].style.position = "fixed";})}, +{origCount:536, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:537, fun:(function anonymous() {allElements[10].style.clear = "none";})}, +{origCount:538, fun:(function anonymous() {allElements[4].style.height = "auto";})}, +{origCount:539, fun:(function anonymous() {allElements[3].style.clear = "right";})}, +{origCount:540, fun:(function anonymous() {allElements[1].style.width = "200%";})}, +{origCount:541, fun:(function anonymous() {allElements[2].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:542, fun:(function anonymous() {allElements[12].style.clear = "left";})}, +{origCount:543, fun:(function anonymous() {allElements[10].style.visibility = "hidden";})}, +{origCount:544, fun:(function anonymous() {allElements[3].style.height = "auto";})}, +{origCount:545, fun:(function anonymous() {allElements[7].style.visibility = "collapse";})}, +{origCount:546, fun:(function anonymous() {allElements[4].style.width = "auto";})}, +{origCount:547, fun:(function anonymous() {allElements[10].style.height = "auto";})}, +{origCount:548, fun:(function anonymous() {allElements[6].style['float'] = "none";})}, +{origCount:549, fun:(function anonymous() {allElements[10].style.overflow = "auto";})}, +{origCount:550, fun:(function anonymous() {allElements[1].style.height = "auto";})}, +{origCount:551, fun:(function anonymous() {allElements[11].style.overflow = "hidden";})}, +{origCount:552, fun:(function anonymous() {allElements[6].style.background = "transparent";})}, +{origCount:553, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:554, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:555, fun:(function anonymous() {allElements[8].style.color = "green";})}, +{origCount:556, fun:(function anonymous() {allElements[10].style.background = "#fcd";})}, +{origCount:557, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:558, fun:(function anonymous() {allElements[6].style.overflow = "hidden";})}, +{origCount:559, fun:(function anonymous() {allElements[10].style.clear = "right";})}, +{origCount:560, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:561, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:562, fun:(function anonymous() {allElements[6].style.position = "static";})}, +{origCount:563, fun:(function anonymous() {allElements[1].style.overflow = "hidden";})}, +{origCount:564, fun:(function anonymous() {allElements[6].style.display = "inline";})}, +{origCount:565, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:566, fun:(function anonymous() {allElements[7].style.visibility = "visible";})}, +{origCount:567, fun:(function anonymous() {allElements[1].style.color = "blue";})}, +{origCount:568, fun:(function anonymous() {allElements[1].style.clear = "both";})}, +{origCount:569, fun:(function anonymous() {allElements[0].style.position = "relative";})}, +{origCount:570, fun:(function anonymous() {allElements[5].style.height = "100px";})}, +{origCount:571, fun:(function anonymous() {allElements[6].style.height = "auto";})}, +{origCount:572, fun:(function anonymous() {allElements[10].style['float'] = "left";})}, +{origCount:573, fun:(function anonymous() {allElements[8].style.position = "absolute";})}, +{origCount:574, fun:(function anonymous() {allElements[7].style.background = "#fcd";})}, +{origCount:575, fun:(function anonymous() {allElements[12].style.display = "-moz-popup";})}, +{origCount:576, fun:(function anonymous() {allElements[2].style.position = "absolute";})}, +{origCount:577, fun:(function anonymous() {allElements[9].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:578, fun:(function anonymous() {allElements[11].style.overflow = "visible";})}, +{origCount:579, fun:(function anonymous() {allElements[2].style.display = "-moz-inline-grid";})}, +{origCount:580, fun:(function anonymous() {allElements[0].style.display = "-moz-popup";})}, +{origCount:581, fun:(function anonymous() {allElements[10].style['float'] = "right";})}, +{origCount:582, fun:(function anonymous() {allElements[12].style.height = "10%";})}, +{origCount:583, fun:(function anonymous() {allElements[10].style.position = "static";})}, +{origCount:584, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:585, fun:(function anonymous() {allElements[8].style.height = "auto";})}, +{origCount:586, fun:(function anonymous() {allElements[4].style.color = "green";})}, +{origCount:587, fun:(function anonymous() {allElements[7].style.color = "red";})}, +{origCount:588, fun:(function anonymous() {allElements[7].style.visibility = "collapse";})}, +{origCount:589, fun:(function anonymous() {allElements[11].style['float'] = "left";})}, +{origCount:590, fun:(function anonymous() {allElements[11].style.visibility = "hidden";})}, +{origCount:591, fun:(function anonymous() {allElements[12].style.overflow = "visible";})}, +{origCount:592, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:593, fun:(function anonymous() {allElements[2].style.display = "table-cell";})}, +{origCount:594, fun:(function anonymous() {allElements[1].style.color = "black";})}, +{origCount:595, fun:(function anonymous() {allElements[11].style.color = "green";})}, +{origCount:596, fun:(function anonymous() {allElements[9].style.color = "red";})}, +{origCount:597, fun:(function anonymous() {allElements[3].style['float'] = "none";})}, +{origCount:598, fun:(function anonymous() {allElements[10].style.display = "inline";})}, +{origCount:599, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:600, fun:(function anonymous() {allElements[7].style.width = "10%";})}, +{origCount:601, fun:(function anonymous() {allElements[9].style['float'] = "left";})}, +{origCount:602, fun:(function anonymous() {allElements[6].style.width = "10%";})}, +{origCount:603, fun:(function anonymous() {allElements[5].style.position = "absolute";})}, +{origCount:604, fun:(function anonymous() {allElements[11].style.position = "static";})}, +{origCount:605, fun:(function anonymous() {allElements[3].style.clear = "none";})}, +{origCount:606, fun:(function anonymous() {allElements[0].style['float'] = "right";})}, +{origCount:607, fun:(function anonymous() {allElements[6].style.position = "static";})}, +{origCount:608, fun:(function anonymous() {allElements[3].style.height = "2em";})}, +{origCount:609, fun:(function anonymous() {allElements[7].style.width = "20em";})}, +{origCount:610, fun:(function anonymous() {allElements[11].style.overflow = "scroll";})}, +{origCount:611, fun:(function anonymous() {allElements[8].style.position = "relative";})}, +{origCount:612, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:613, fun:(function anonymous() {allElements[3].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:614, fun:(function anonymous() {allElements[11].style.height = "auto";})}, +{origCount:615, fun:(function anonymous() {allElements[7].style['float'] = "right";})}, +{origCount:616, fun:(function anonymous() {allElements[10].style.overflow = "scroll";})}, +{origCount:617, fun:(function anonymous() {allElements[0].style.color = "green";})}, +{origCount:618, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:619, fun:(function anonymous() {allElements[11].style.height = "10%";})}, +{origCount:620, fun:(function anonymous() {allElements[4].style.height = "200%";})}, +{origCount:621, fun:(function anonymous() {allElements[6].style.display = "-moz-popup";})}, +{origCount:622, fun:(function anonymous() {allElements[8].style.position = "relative";})}, +{origCount:623, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:624, fun:(function anonymous() {allElements[8].style.height = "auto";})}, +{origCount:625, fun:(function anonymous() {allElements[5].style['float'] = "right";})}, +{origCount:626, fun:(function anonymous() {allElements[10].style.background = "transparent";})}, +{origCount:627, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:628, fun:(function anonymous() {allElements[5].style.display = "list-item";})}, +{origCount:629, fun:(function anonymous() {allElements[5].style.height = "100px";})}, +{origCount:630, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:631, fun:(function anonymous() {allElements[11].style.clear = "both";})}, +{origCount:632, fun:(function anonymous() {allElements[2].style.overflow = "visible";})}, +{origCount:633, fun:(function anonymous() {allElements[1].style.visibility = "hidden";})}, +{origCount:634, fun:(function anonymous() {allElements[1].style['float'] = "none";})}, +{origCount:635, fun:(function anonymous() {allElements[6].style.height = "2em";})}, +{origCount:636, fun:(function anonymous() {allElements[9].style.position = "relative";})}, +{origCount:637, fun:(function anonymous() {allElements[3].style.clear = "left";})}, +{origCount:638, fun:(function anonymous() {allElements[6].style.display = "table-header-group";})}, +{origCount:639, fun:(function anonymous() {allElements[10].style.display = "-moz-box";})}, +{origCount:640, fun:(function anonymous() {allElements[8].style.color = "blue";})}, +{origCount:641, fun:(function anonymous() {allElements[6].style.width = "200%";})}, +{origCount:642, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:643, fun:(function anonymous() {allElements[7].style.height = "10%";})}, +{origCount:644, fun:(function anonymous() {allElements[8].style.width = "1px";})}, +{origCount:645, fun:(function anonymous() {allElements[5].style.clear = "right";})}, +{origCount:646, fun:(function anonymous() {allElements[2].style.display = "table-row-group";})}, +{origCount:647, fun:(function anonymous() {allElements[4].style.color = "blue";})}, +{origCount:648, fun:(function anonymous() {allElements[5].style.color = "red";})}, +{origCount:649, fun:(function anonymous() {allElements[10].style.background = "transparent";})}, +{origCount:650, fun:(function anonymous() {allElements[10].style.visibility = "visible";})}, +{origCount:651, fun:(function anonymous() {allElements[12].style.height = "auto";})}, +{origCount:652, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:653, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:654, fun:(function anonymous() {allElements[2].style.clear = "none";})}, +{origCount:655, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:656, fun:(function anonymous() {allElements[10].style.width = "200%";})}, +{origCount:657, fun:(function anonymous() {allElements[4].style.overflow = "scroll";})}, +{origCount:658, fun:(function anonymous() {allElements[12].style.clear = "none";})}, +{origCount:659, fun:(function anonymous() {allElements[12].style['float'] = "none";})}, +{origCount:660, fun:(function anonymous() {allElements[10].style.overflow = "scroll";})}, +{origCount:661, fun:(function anonymous() {allElements[12].style.clear = "left";})}, +{origCount:662, fun:(function anonymous() {allElements[10].style.clear = "right";})}, +{origCount:663, fun:(function anonymous() {allElements[9].style.clear = "none";})}, +{origCount:664, fun:(function anonymous() {allElements[2].style.overflow = "hidden";})}, +{origCount:665, fun:(function anonymous() {allElements[7].style.overflow = "visible";})}, +{origCount:666, fun:(function anonymous() {allElements[4].style.width = "1px";})}, +{origCount:667, fun:(function anonymous() {allElements[11].style.color = "blue";})}, +{origCount:668, fun:(function anonymous() {allElements[8].style.position = "relative";})}, +{origCount:669, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:670, fun:(function anonymous() {allElements[4].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:671, fun:(function anonymous() {allElements[2].style['float'] = "right";})}, +{origCount:672, fun:(function anonymous() {allElements[10].style['float'] = "left";})}, +{origCount:673, fun:(function anonymous() {allElements[10].style.clear = "right";})}, +{origCount:674, fun:(function anonymous() {allElements[5].style.color = "black";})}, +{origCount:675, fun:(function anonymous() {allElements[2].style.clear = "right";})}, +{origCount:676, fun:(function anonymous() {allElements[5].style.height = "200%";})}, +{origCount:677, fun:(function anonymous() {allElements[8].style.position = "absolute";})}, +{origCount:678, fun:(function anonymous() {allElements[3].style.clear = "none";})}, +{origCount:679, fun:(function anonymous() {allElements[7].style.position = "relative";})}, +{origCount:680, fun:(function anonymous() {allElements[1].style.background = "transparent";})}, +{origCount:681, fun:(function anonymous() {allElements[3].style.position = "static";})}, +{origCount:682, fun:(function anonymous() {allElements[5].style['float'] = "left";})}, +{origCount:683, fun:(function anonymous() {allElements[0].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:684, fun:(function anonymous() {allElements[7].style.display = "-moz-grid-line";})}, +{origCount:685, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:686, fun:(function anonymous() {allElements[9].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:687, fun:(function anonymous() {allElements[3].style.background = "#fcd";})}, +{origCount:688, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:689, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:690, fun:(function anonymous() {allElements[10].style.display = "table-cell";})}, +{origCount:691, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:692, fun:(function anonymous() {allElements[3].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:693, fun:(function anonymous() {allElements[3].style.height = "200%";})}, +{origCount:694, fun:(function anonymous() {allElements[2].style.height = "2em";})}, +{origCount:695, fun:(function anonymous() {allElements[8].style.clear = "both";})}, +{origCount:696, fun:(function anonymous() {allElements[11].style.clear = "none";})}, +{origCount:697, fun:(function anonymous() {allElements[6].style.clear = "right";})}, +{origCount:698, fun:(function anonymous() {allElements[9].style.color = "red";})}, +{origCount:699, fun:(function anonymous() {allElements[1].style['float'] = "left";})}, +{origCount:700, fun:(function anonymous() {allElements[12].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:701, fun:(function anonymous() {allElements[10].style.display = "-moz-deck";})}, +{origCount:702, fun:(function anonymous() {allElements[12].style.height = "auto";})}, +{origCount:703, fun:(function anonymous() {allElements[12].style.clear = "none";})}, +{origCount:704, fun:(function anonymous() {allElements[1].style.visibility = "hidden";})}, +{origCount:705, fun:(function anonymous() {allElements[11].style['float'] = "right";})}, +{origCount:706, fun:(function anonymous() {allElements[8].style.overflow = "hidden";})}, +{origCount:707, fun:(function anonymous() {allElements[11].style.display = "-moz-grid-group";})}, +{origCount:708, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:709, fun:(function anonymous() {allElements[4].style.clear = "right";})}, +{origCount:710, fun:(function anonymous() {allElements[4].style['float'] = "right";})}, +{origCount:711, fun:(function anonymous() {allElements[7].style.height = "auto";})}, +{origCount:712, fun:(function anonymous() {allElements[2].style.clear = "left";})}, +{origCount:713, fun:(function anonymous() {allElements[11].style.clear = "right";})}, +{origCount:714, fun:(function anonymous() {allElements[11].style.display = "table-header-group";})}, +{origCount:715, fun:(function anonymous() {allElements[8].style.height = "2em";})}, +{origCount:716, fun:(function anonymous() {allElements[7].style.color = "green";})}, +{origCount:717, fun:(function anonymous() {allElements[1].style.width = "auto";})}, +{origCount:718, fun:(function anonymous() {allElements[9].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:719, fun:(function anonymous() {allElements[10].style.height = "2em";})}, +{origCount:720, fun:(function anonymous() {allElements[8].style.width = "auto";})}, +{origCount:721, fun:(function anonymous() {allElements[10].style.background = "#fcd";})}, +{origCount:722, fun:(function anonymous() {allElements[9].style.display = "table-row-group";})}, +{origCount:723, fun:(function anonymous() {allElements[8].style.overflow = "scroll";})}, +{origCount:724, fun:(function anonymous() {allElements[2].style.display = "table-caption";})}, +{origCount:725, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:726, fun:(function anonymous() {allElements[5].style.visibility = "collapse";})}, +{origCount:727, fun:(function anonymous() {allElements[12].style.position = "absolute";})}, +{origCount:728, fun:(function anonymous() {allElements[9].style.color = "red";})}, +{origCount:729, fun:(function anonymous() {allElements[1].style.display = "table-row";})}, +{origCount:730, fun:(function anonymous() {allElements[6].style.color = "black";})}, +{origCount:731, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:732, fun:(function anonymous() {allElements[0].style.color = "black";})}, +{origCount:733, fun:(function anonymous() {allElements[0].style.clear = "both";})}, +{origCount:734, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:735, fun:(function anonymous() {allElements[5].style.width = "20em";})}, +{origCount:736, fun:(function anonymous() {allElements[9].style['float'] = "left";})}, +{origCount:737, fun:(function anonymous() {allElements[12].style.height = "10%";})}, +{origCount:738, fun:(function anonymous() {allElements[7].style.height = "10%";})}, +{origCount:739, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:740, fun:(function anonymous() {allElements[7].style.visibility = "hidden";})}, +{origCount:741, fun:(function anonymous() {allElements[9].style.visibility = "collapse";})}, +{origCount:742, fun:(function anonymous() {allElements[11].style.display = "-moz-inline-grid";})}, +{origCount:743, fun:(function anonymous() {allElements[7].style.position = "static";})}, +{origCount:744, fun:(function anonymous() {allElements[0].style.display = "-moz-box";})}, +{origCount:745, fun:(function anonymous() {allElements[11].style.clear = "both";})}, +{origCount:746, fun:(function anonymous() {allElements[4].style.position = "fixed";})}, +{origCount:747, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:748, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:749, fun:(function anonymous() {allElements[0].style.width = "1px";})}, +{origCount:750, fun:(function anonymous() {allElements[6].style.visibility = "hidden";})}, +{origCount:751, fun:(function anonymous() {allElements[8].style.position = "absolute";})}, +{origCount:752, fun:(function anonymous() {allElements[0].style.color = "green";})}, +{origCount:753, fun:(function anonymous() {allElements[0].style.clear = "both";})}, +{origCount:754, fun:(function anonymous() {allElements[0].style.overflow = "auto";})}, +{origCount:755, fun:(function anonymous() {allElements[6].style.clear = "left";})}, +{origCount:756, fun:(function anonymous() {allElements[10].style.position = "static";})}, +{origCount:757, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:758, fun:(function anonymous() {allElements[8].style.color = "black";})}, +{origCount:759, fun:(function anonymous() {allElements[0].style.position = "relative";})}, +{origCount:760, fun:(function anonymous() {allElements[12].style.overflow = "auto";})}, +{origCount:761, fun:(function anonymous() {allElements[10].style.visibility = "hidden";})}, +{origCount:762, fun:(function anonymous() {allElements[0].style.visibility = "collapse";})}, +{origCount:763, fun:(function anonymous() {allElements[12].style.height = "100px";})}, +{origCount:764, fun:(function anonymous() {allElements[2].style.overflow = "visible";})}, +{origCount:765, fun:(function anonymous() {allElements[12].style.overflow = "auto";})}, +{origCount:766, fun:(function anonymous() {allElements[10].style.position = "fixed";})}, +{origCount:767, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:768, fun:(function anonymous() {allElements[1].style.display = "table-cell";})}, +{origCount:769, fun:(function anonymous() {allElements[7].style.clear = "both";})}, +{origCount:770, fun:(function anonymous() {allElements[8].style.position = "relative";})}, +{origCount:771, fun:(function anonymous() {allElements[10].style.color = "red";})}, +{origCount:772, fun:(function anonymous() {allElements[6].style.display = "-moz-inline-box";})}, +{origCount:773, fun:(function anonymous() {allElements[2].style.overflow = "hidden";})}, +{origCount:774, fun:(function anonymous() {allElements[2].style['float'] = "none";})}, +{origCount:775, fun:(function anonymous() {allElements[0].style.clear = "left";})}, +{origCount:776, fun:(function anonymous() {allElements[12].style.display = "table-cell";})}, +{origCount:777, fun:(function anonymous() {allElements[7].style.background = "transparent";})}, +{origCount:778, fun:(function anonymous() {allElements[2].style['float'] = "right";})}, +{origCount:779, fun:(function anonymous() {allElements[3].style.overflow = "scroll";})}, +{origCount:780, fun:(function anonymous() {allElements[2].style.width = "1px";})}, +{origCount:781, fun:(function anonymous() {allElements[4].style.clear = "both";})}, +{origCount:782, fun:(function anonymous() {allElements[3].style.height = "auto";})}, +{origCount:783, fun:(function anonymous() {allElements[3].style.color = "green";})}, +{origCount:784, fun:(function anonymous() {allElements[10].style.color = "red";})}, +{origCount:785, fun:(function anonymous() {allElements[3].style.position = "static";})}, +{origCount:786, fun:(function anonymous() {allElements[1].style.position = "absolute";})}, +{origCount:787, fun:(function anonymous() {allElements[8].style.height = "100px";})}, +{origCount:788, fun:(function anonymous() {allElements[6].style.overflow = "scroll";})}, +{origCount:789, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:790, fun:(function anonymous() {allElements[3].style.display = "-moz-grid-line";})}, +{origCount:791, fun:(function anonymous() {allElements[2].style.visibility = "collapse";})}, +{origCount:792, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:793, fun:(function anonymous() {allElements[11].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:794, fun:(function anonymous() {allElements[7].style['float'] = "right";})}, +{origCount:795, fun:(function anonymous() {allElements[5].style.display = "table-column";})}, +{origCount:796, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:797, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:798, fun:(function anonymous() {allElements[8].style.position = "static";})}, +{origCount:799, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:800, fun:(function anonymous() {allElements[8].style.overflow = "visible";})}, +{origCount:801, fun:(function anonymous() {allElements[10].style.height = "100px";})}, +{origCount:802, fun:(function anonymous() {allElements[0].style.clear = "right";})}, +{origCount:803, fun:(function anonymous() {allElements[9].style.color = "black";})}, +{origCount:804, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:805, fun:(function anonymous() {allElements[0].style.clear = "none";})}, +{origCount:806, fun:(function anonymous() {allElements[7].style.width = "200%";})}, +{origCount:807, fun:(function anonymous() {allElements[2].style.overflow = "visible";})}, +{origCount:808, fun:(function anonymous() {allElements[4].style.overflow = "visible";})}, +{origCount:809, fun:(function anonymous() {allElements[5].style.display = "table-row";})}, +{origCount:810, fun:(function anonymous() {allElements[10].style.clear = "none";})}, +{origCount:811, fun:(function anonymous() {allElements[0].style.color = "red";})}, +{origCount:812, fun:(function anonymous() {allElements[5].style.clear = "right";})}, +{origCount:813, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:814, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:815, fun:(function anonymous() {allElements[12].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:816, fun:(function anonymous() {allElements[3].style.visibility = "visible";})}, +{origCount:817, fun:(function anonymous() {allElements[11].style.clear = "none";})}, +{origCount:818, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:819, fun:(function anonymous() {allElements[8].style.position = "relative";})}, +{origCount:820, fun:(function anonymous() {allElements[7].style.height = "auto";})}, +{origCount:821, fun:(function anonymous() {allElements[5].style.clear = "both";})}, +{origCount:822, fun:(function anonymous() {allElements[9].style.overflow = "auto";})}, +{origCount:823, fun:(function anonymous() {allElements[9].style.position = "static";})}, +{origCount:824, fun:(function anonymous() {allElements[11].style.position = "absolute";})}, +{origCount:825, fun:(function anonymous() {allElements[9].style.width = "200%";})}, +{origCount:826, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:827, fun:(function anonymous() {allElements[11].style.position = "static";})}, +{origCount:828, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:829, fun:(function anonymous() {allElements[5].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:830, fun:(function anonymous() {allElements[6].style.position = "fixed";})}, +{origCount:831, fun:(function anonymous() {allElements[9].style['float'] = "right";})}, +{origCount:832, fun:(function anonymous() {allElements[6].style['float'] = "none";})}, +{origCount:833, fun:(function anonymous() {allElements[2].style.background = "transparent";})}, +{origCount:834, fun:(function anonymous() {allElements[3].style.overflow = "scroll";})}, +{origCount:835, fun:(function anonymous() {allElements[0].style.height = "auto";})}, +{origCount:836, fun:(function anonymous() {allElements[0].style.position = "static";})}, +{origCount:837, fun:(function anonymous() {allElements[8].style.display = "-moz-grid-line";})}, +{origCount:838, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:839, fun:(function anonymous() {allElements[5].style.width = "1px";})}, +{origCount:840, fun:(function anonymous() {allElements[4].style.position = "fixed";})}, +{origCount:841, fun:(function anonymous() {allElements[7].style.clear = "none";})}, +{origCount:842, fun:(function anonymous() {allElements[6].style.display = "table-column";})}, +{origCount:843, fun:(function anonymous() {allElements[7].style.visibility = "visible";})}, +{origCount:844, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:845, fun:(function anonymous() {allElements[7].style.height = "2em";})}, +{origCount:846, fun:(function anonymous() {allElements[5].style.display = "table-column";})}, +{origCount:847, fun:(function anonymous() {allElements[0].style.clear = "both";})}, +{origCount:848, fun:(function anonymous() {allElements[11].style['float'] = "right";})}, +{origCount:849, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:850, fun:(function anonymous() {allElements[9].style.overflow = "scroll";})}, +{origCount:851, fun:(function anonymous() {allElements[8].style.height = "200%";})}, +{origCount:852, fun:(function anonymous() {allElements[5].style.height = "200%";})}, +{origCount:853, fun:(function anonymous() {allElements[5].style.clear = "none";})}, +{origCount:854, fun:(function anonymous() {allElements[2].style.background = "#fcd";})}, +{origCount:855, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:856, fun:(function anonymous() {allElements[4].style.clear = "both";})}, +{origCount:857, fun:(function anonymous() {allElements[8].style.width = "10%";})}, +{origCount:858, fun:(function anonymous() {allElements[4].style.color = "red";})}, +{origCount:859, fun:(function anonymous() {allElements[9].style.height = "10%";})}, +{origCount:860, fun:(function anonymous() {allElements[4].style.visibility = "hidden";})}, +{origCount:861, fun:(function anonymous() {allElements[7].style.clear = "left";})}, +{origCount:862, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:863, fun:(function anonymous() {allElements[7].style.color = "green";})}, +{origCount:864, fun:(function anonymous() {allElements[1].style.clear = "left";})}, +{origCount:865, fun:(function anonymous() {allElements[12].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:866, fun:(function anonymous() {allElements[6].style.width = "auto";})}, +{origCount:867, fun:(function anonymous() {allElements[1].style.height = "100px";})}, +{origCount:868, fun:(function anonymous() {allElements[3].style.display = "-moz-inline-block";})}, +{origCount:869, fun:(function anonymous() {allElements[5].style.visibility = "visible";})}, +{origCount:870, fun:(function anonymous() {allElements[11].style.color = "blue";})}, +{origCount:871, fun:(function anonymous() {allElements[1].style.position = "static";})}, +{origCount:872, fun:(function anonymous() {allElements[6].style.visibility = "visible";})}, +{origCount:873, fun:(function anonymous() {allElements[7].style.color = "red";})}, +{origCount:874, fun:(function anonymous() {allElements[8].style.color = "blue";})}, +{origCount:875, fun:(function anonymous() {allElements[1].style['float'] = "right";})}, +{origCount:876, fun:(function anonymous() {allElements[6].style['float'] = "right";})}, +{origCount:877, fun:(function anonymous() {allElements[1].style.clear = "left";})}, +{origCount:878, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:879, fun:(function anonymous() {allElements[11].style.display = "inline";})}, +{origCount:880, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:881, fun:(function anonymous() {allElements[10].style.color = "black";})}, +{origCount:882, fun:(function anonymous() {allElements[0].style.visibility = "hidden";})}, +{origCount:883, fun:(function anonymous() {allElements[1].style.color = "green";})}, +{origCount:884, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:885, fun:(function anonymous() {allElements[2].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:886, fun:(function anonymous() {allElements[0].style.display = "list-item";})}, +{origCount:887, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:888, fun:(function anonymous() {allElements[6].style.overflow = "hidden";})}, +{origCount:889, fun:(function anonymous() {allElements[12].style.clear = "left";})}, +{origCount:890, fun:(function anonymous() {allElements[1].style.clear = "none";})}, +{origCount:891, fun:(function anonymous() {allElements[4].style.clear = "left";})}, +{origCount:892, fun:(function anonymous() {allElements[1].style.position = "relative";})}, +{origCount:893, fun:(function anonymous() {allElements[11].style.position = "absolute";})}, +{origCount:894, fun:(function anonymous() {allElements[12].style.background = "#fcd";})}, +{origCount:895, fun:(function anonymous() {allElements[10].style.position = "relative";})}, +{origCount:896, fun:(function anonymous() {allElements[10].style.display = "-moz-box";})}, +{origCount:897, fun:(function anonymous() {allElements[6].style.position = "fixed";})}, +{origCount:898, fun:(function anonymous() {allElements[1].style.overflow = "scroll";})}, +{origCount:899, fun:(function anonymous() {allElements[3].style.width = "10%";})}, +{origCount:900, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:901, fun:(function anonymous() {allElements[6].style.background = "transparent";})}, +{origCount:902, fun:(function anonymous() {allElements[5].style.visibility = "visible";})}, +{origCount:903, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:904, fun:(function anonymous() {allElements[0].style.overflow = "scroll";})}, +{origCount:905, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:906, fun:(function anonymous() {allElements[6].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:907, fun:(function anonymous() {allElements[1].style.height = "200%";})}, +{origCount:908, fun:(function anonymous() {allElements[12].style.display = "table-row";})}, +{origCount:909, fun:(function anonymous() {allElements[5].style.height = "10%";})}, +{origCount:910, fun:(function anonymous() {allElements[11].style.position = "relative";})}, +{origCount:911, fun:(function anonymous() {allElements[10].style.display = "-moz-stack";})}, +{origCount:912, fun:(function anonymous() {allElements[7].style.color = "green";})}, +{origCount:913, fun:(function anonymous() {allElements[8].style.clear = "left";})}, +{origCount:914, fun:(function anonymous() {allElements[5].style.clear = "right";})}, +{origCount:915, fun:(function anonymous() {allElements[3].style['float'] = "left";})}, +{origCount:916, fun:(function anonymous() {allElements[8].style.display = "table-header-group";})}, +{origCount:917, fun:(function anonymous() {allElements[12].style.display = "-moz-grid-group";})}, +{origCount:918, fun:(function anonymous() {allElements[8].style.position = "fixed";})}, +{origCount:919, fun:(function anonymous() {allElements[1].style.clear = "none";})}, +{origCount:920, fun:(function anonymous() {allElements[10].style.height = "10%";})}, +{origCount:921, fun:(function anonymous() {allElements[0].style['float'] = "left";})}, +{origCount:922, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:923, fun:(function anonymous() {allElements[0].style.display = "-moz-inline-grid";})}, +{origCount:924, fun:(function anonymous() {allElements[8].style.clear = "left";})}, +{origCount:925, fun:(function anonymous() {allElements[6].style.clear = "right";})}, +{origCount:926, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:927, fun:(function anonymous() {allElements[9].style.height = "100px";})}, +{origCount:928, fun:(function anonymous() {allElements[11].style.color = "blue";})}, +{origCount:929, fun:(function anonymous() {allElements[0].style.clear = "left";})}, +{origCount:930, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:931, fun:(function anonymous() {allElements[10].style['float'] = "none";})}, +{origCount:932, fun:(function anonymous() {allElements[3].style.display = "-moz-inline-box";})}, +{origCount:933, fun:(function anonymous() {allElements[4].style.width = "1px";})}, +{origCount:934, fun:(function anonymous() {allElements[5].style.display = "table-row";})}, +{origCount:935, fun:(function anonymous() {allElements[12].style.height = "2em";})}, +{origCount:936, fun:(function anonymous() {allElements[4].style.visibility = "collapse";})}, +{origCount:937, fun:(function anonymous() {allElements[0].style.background = "transparent";})}, +{origCount:938, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:939, fun:(function anonymous() {allElements[11].style.overflow = "scroll";})}, +{origCount:940, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:941, fun:(function anonymous() {allElements[10].style.background = "#fcd";})}, +{origCount:942, fun:(function anonymous() {allElements[0].style.width = "20em";})}, +{origCount:943, fun:(function anonymous() {allElements[1].style.overflow = "scroll";})}, +{origCount:944, fun:(function anonymous() {allElements[5].style.clear = "left";})}, +{origCount:945, fun:(function anonymous() {allElements[3].style.display = "table";})}, +{origCount:946, fun:(function anonymous() {allElements[2].style.display = "table-footer-group";})}, +{origCount:947, fun:(function anonymous() {allElements[6].style.visibility = "visible";})}, +{origCount:948, fun:(function anonymous() {allElements[9].style.display = "-moz-inline-block";})}, +{origCount:949, fun:(function anonymous() {allElements[2].style.clear = "right";})}, +{origCount:950, fun:(function anonymous() {allElements[4].style.overflow = "visible";})}, +{origCount:951, fun:(function anonymous() {allElements[8].style.width = "200%";})}, +{origCount:952, fun:(function anonymous() {allElements[5].style.overflow = "hidden";})}, +{origCount:953, fun:(function anonymous() {allElements[2].style.height = "auto";})}, +{origCount:954, fun:(function anonymous() {allElements[3].style.overflow = "visible";})}, +{origCount:955, fun:(function anonymous() {allElements[2].style.color = "blue";})}, +{origCount:956, fun:(function anonymous() {allElements[2].style.width = "10%";})}, +{origCount:957, fun:(function anonymous() {allElements[11].style.visibility = "collapse";})}, +{origCount:958, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:959, fun:(function anonymous() {allElements[9].style.position = "fixed";})}, +{origCount:960, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:961, fun:(function anonymous() {allElements[0].style.clear = "right";})}, +{origCount:962, fun:(function anonymous() {allElements[0].style['float'] = "left";})}, +{origCount:963, fun:(function anonymous() {allElements[1].style.width = "1px";})}, +{origCount:964, fun:(function anonymous() {allElements[9].style.height = "2em";})}, +{origCount:965, fun:(function anonymous() {allElements[3].style.width = "20em";})}, +{origCount:966, fun:(function anonymous() {allElements[1].style.width = "200%";})}, +{origCount:967, fun:(function anonymous() {allElements[10].style.overflow = "hidden";})}, +{origCount:968, fun:(function anonymous() {allElements[9].style.clear = "both";})}, +{origCount:969, fun:(function anonymous() {allElements[2].style.clear = "both";})}, +{origCount:970, fun:(function anonymous() {allElements[9].style['float'] = "left";})}, +{origCount:971, fun:(function anonymous() {allElements[8].style.clear = "left";})}, +{origCount:972, fun:(function anonymous() {allElements[6].style.height = "auto";})}, +{origCount:973, fun:(function anonymous() {allElements[7].style.background = "#fcd";})}, +{origCount:974, fun:(function anonymous() {allElements[4].style.clear = "none";})}, +{origCount:975, fun:(function anonymous() {allElements[2].style.position = "relative";})}, +{origCount:976, fun:(function anonymous() {allElements[8].style['float'] = "left";})}, +{origCount:977, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:978, fun:(function anonymous() {allElements[8].style.height = "100px";})}, +{origCount:979, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:980, fun:(function anonymous() {allElements[11].style.clear = "left";})}, +{origCount:981, fun:(function anonymous() {allElements[1].style.color = "blue";})}, +{origCount:982, fun:(function anonymous() {allElements[6].style.height = "100px";})}, +{origCount:983, fun:(function anonymous() {allElements[2].style.overflow = "scroll";})}, +{origCount:984, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:985, fun:(function anonymous() {allElements[9].style.clear = "both";})}, +{origCount:986, fun:(function anonymous() {allElements[4].style.height = "10%";})}, +{origCount:987, fun:(function anonymous() {allElements[0].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:988, fun:(function anonymous() {allElements[2].style.background = "transparent";})}, +{origCount:989, fun:(function anonymous() {allElements[4].style.color = "green";})}, +{origCount:990, fun:(function anonymous() {allElements[11].style.color = "green";})}, +{origCount:991, fun:(function anonymous() {allElements[2].style.clear = "left";})}, +{origCount:992, fun:(function anonymous() {allElements[8].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:993, fun:(function anonymous() {allElements[10].style.background = "transparent";})}, +{origCount:994, fun:(function anonymous() {allElements[11].style.overflow = "auto";})}, +{origCount:995, fun:(function anonymous() {allElements[5].style.overflow = "visible";})}, +{origCount:996, fun:(function anonymous() {allElements[11].style.visibility = "collapse";})}, +{origCount:997, fun:(function anonymous() {allElements[7].style.clear = "both";})}, +{origCount:998, fun:(function anonymous() {allElements[12].style.position = "fixed";})}, +{origCount:999, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:1000, fun:(function anonymous() {allElements[6].style.display = "-moz-box";})}, +{origCount:1001, fun:(function anonymous() {allElements[5].style.overflow = "auto";})}, +{origCount:1002, fun:(function anonymous() {allElements[9].style.height = "2em";})}, +{origCount:1003, fun:(function anonymous() {allElements[11].style['float'] = "left";})}, +{origCount:1004, fun:(function anonymous() {allElements[2].style['float'] = "none";})}, +{origCount:1005, fun:(function anonymous() {allElements[0].style.overflow = "scroll";})}, +{origCount:1006, fun:(function anonymous() {allElements[12].style.background = "transparent";})}, +{origCount:1007, fun:(function anonymous() {allElements[4].style.visibility = "hidden";})}, +{origCount:1008, fun:(function anonymous() {allElements[7].style.overflow = "scroll";})}, +{origCount:1009, fun:(function anonymous() {allElements[1].style.width = "auto";})}, +{origCount:1010, fun:(function anonymous() {allElements[3].style.overflow = "hidden";})}, +{origCount:1011, fun:(function anonymous() {allElements[7].style.display = "table-header-group";})}, +{origCount:1012, fun:(function anonymous() {allElements[5].style.display = "-moz-box";})}, +{origCount:1013, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:1014, fun:(function anonymous() {allElements[3].style.height = "auto";})}, +{origCount:1015, fun:(function anonymous() {allElements[2].style.overflow = "auto";})}, +{origCount:1016, fun:(function anonymous() {allElements[3].style['float'] = "right";})}, +{origCount:1017, fun:(function anonymous() {allElements[0].style.height = "2em";})}, +{origCount:1018, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:1019, fun:(function anonymous() {allElements[11].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1020, fun:(function anonymous() {allElements[12].style.visibility = "hidden";})}, +{origCount:1021, fun:(function anonymous() {allElements[3].style.clear = "both";})}, +{origCount:1022, fun:(function anonymous() {allElements[3].style.visibility = "visible";})}, +{origCount:1023, fun:(function anonymous() {allElements[4].style.overflow = "auto";})}, +{origCount:1024, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:1025, fun:(function anonymous() {allElements[7].style.display = "table";})}, +{origCount:1026, fun:(function anonymous() {allElements[6].style.color = "blue";})}, +{origCount:1027, fun:(function anonymous() {allElements[2].style.color = "black";})}, +{origCount:1028, fun:(function anonymous() {allElements[1].style.color = "black";})}, +{origCount:1029, fun:(function anonymous() {allElements[8].style['float'] = "right";})}, +{origCount:1030, fun:(function anonymous() {allElements[2].style.display = "-moz-grid-group";})}, +{origCount:1031, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:1032, fun:(function anonymous() {allElements[12].style.height = "auto";})}, +{origCount:1033, fun:(function anonymous() {allElements[1].style.clear = "both";})}, +{origCount:1034, fun:(function anonymous() {allElements[11].style.width = "auto";})}, +{origCount:1035, fun:(function anonymous() {allElements[10].style.position = "relative";})}, +{origCount:1036, fun:(function anonymous() {allElements[3].style.position = "fixed";})}, +{origCount:1037, fun:(function anonymous() {allElements[8].style.clear = "both";})}, +{origCount:1038, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:1039, fun:(function anonymous() {allElements[11].style.overflow = "auto";})}, +{origCount:1040, fun:(function anonymous() {allElements[7].style.height = "200%";})}, +{origCount:1041, fun:(function anonymous() {allElements[11].style.width = "200%";})}, +{origCount:1042, fun:(function anonymous() {allElements[3].style.overflow = "visible";})}, +{origCount:1043, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:1044, fun:(function anonymous() {allElements[8].style.clear = "none";})}, +{origCount:1045, fun:(function anonymous() {allElements[7].style.width = "10%";})}, +{origCount:1046, fun:(function anonymous() {allElements[2].style.height = "100px";})}, +{origCount:1047, fun:(function anonymous() {allElements[12].style.clear = "left";})}, +{origCount:1048, fun:(function anonymous() {allElements[2].style.overflow = "visible";})}, +{origCount:1049, fun:(function anonymous() {allElements[4].style.background = "transparent";})}, +{origCount:1050, fun:(function anonymous() {allElements[11].style['float'] = "none";})}, +{origCount:1051, fun:(function anonymous() {allElements[3].style['float'] = "right";})}, +{origCount:1052, fun:(function anonymous() {allElements[9].style.height = "auto";})}, +{origCount:1053, fun:(function anonymous() {allElements[11].style.display = "-moz-grid";})}, +{origCount:1054, fun:(function anonymous() {allElements[0].style.position = "fixed";})}, +{origCount:1055, fun:(function anonymous() {allElements[7].style.width = "20em";})}, +{origCount:1056, fun:(function anonymous() {allElements[0].style.height = "100px";})}, +{origCount:1057, fun:(function anonymous() {allElements[10].style.clear = "none";})}, +{origCount:1058, fun:(function anonymous() {allElements[2].style.width = "10%";})}, +{origCount:1059, fun:(function anonymous() {allElements[9].style.visibility = "collapse";})}, +{origCount:1060, fun:(function anonymous() {allElements[10].style.display = "-moz-inline-stack";})}, +{origCount:1061, fun:(function anonymous() {allElements[10].style.height = "200%";})}, +{origCount:1062, fun:(function anonymous() {allElements[1].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1063, fun:(function anonymous() {allElements[3].style.clear = "right";})}, +{origCount:1064, fun:(function anonymous() {allElements[7].style.overflow = "auto";})}, +{origCount:1065, fun:(function anonymous() {allElements[6].style.visibility = "visible";})}, +{origCount:1066, fun:(function anonymous() {allElements[5].style['float'] = "right";})}, +{origCount:1067, fun:(function anonymous() {allElements[11].style.height = "200%";})}, +{origCount:1068, fun:(function anonymous() {allElements[1].style.position = "static";})}, +{origCount:1069, fun:(function anonymous() {allElements[8].style.clear = "none";})}, +{origCount:1070, fun:(function anonymous() {allElements[11].style.display = "-moz-groupbox";})}, +{origCount:1071, fun:(function anonymous() {allElements[2].style.visibility = "visible";})}, +{origCount:1072, fun:(function anonymous() {allElements[0].style.background = "transparent";})}, +{origCount:1073, fun:(function anonymous() {allElements[10].style.width = "auto";})}, +{origCount:1074, fun:(function anonymous() {allElements[12].style.clear = "right";})}, +{origCount:1075, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:1076, fun:(function anonymous() {allElements[0].style.width = "200%";})}, +{origCount:1077, fun:(function anonymous() {allElements[10].style.clear = "left";})}, +{origCount:1078, fun:(function anonymous() {allElements[7].style.display = "-moz-deck";})}, +{origCount:1079, fun:(function anonymous() {allElements[9].style.color = "green";})}, +{origCount:1080, fun:(function anonymous() {allElements[10].style.color = "black";})}, +{origCount:1081, fun:(function anonymous() {allElements[1].style.width = "200%";})}, +{origCount:1082, fun:(function anonymous() {allElements[2].style.position = "fixed";})}, +{origCount:1083, fun:(function anonymous() {allElements[3].style.height = "100px";})}, +{origCount:1084, fun:(function anonymous() {allElements[12].style.background = "#fcd";})}, +{origCount:1085, fun:(function anonymous() {allElements[7].style.visibility = "collapse";})}, +{origCount:1086, fun:(function anonymous() {allElements[6].style.clear = "both";})}, +{origCount:1087, fun:(function anonymous() {allElements[3].style.overflow = "visible";})}, +{origCount:1088, fun:(function anonymous() {allElements[2].style.width = "10%";})}, +{origCount:1089, fun:(function anonymous() {allElements[9].style.color = "red";})}, +{origCount:1090, fun:(function anonymous() {allElements[3].style.display = "-moz-inline-stack";})}, +{origCount:1091, fun:(function anonymous() {allElements[4].style['float'] = "right";})}, +{origCount:1092, fun:(function anonymous() {allElements[2].style.overflow = "visible";})}, +{origCount:1093, fun:(function anonymous() {allElements[4].style.clear = "none";})}, +{origCount:1094, fun:(function anonymous() {allElements[1].style.display = "table-row";})}, +{origCount:1095, fun:(function anonymous() {allElements[1].style.display = "-moz-deck";})}, +{origCount:1096, fun:(function anonymous() {allElements[7].style.overflow = "visible";})}, +{origCount:1097, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:1098, fun:(function anonymous() {allElements[9].style.width = "20em";})}, +{origCount:1099, fun:(function anonymous() {allElements[3].style.color = "green";})}, +{origCount:1100, fun:(function anonymous() {allElements[0].style.overflow = "auto";})}, +{origCount:1101, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:1102, fun:(function anonymous() {allElements[9].style.background = "#fcd";})}, +{origCount:1103, fun:(function anonymous() {allElements[7].style.clear = "none";})}, +{origCount:1104, fun:(function anonymous() {allElements[2].style['float'] = "none";})}, +{origCount:1105, fun:(function anonymous() {allElements[2].style.clear = "none";})}, +{origCount:1106, fun:(function anonymous() {allElements[10].style.color = "blue";})}, +{origCount:1107, fun:(function anonymous() {allElements[7].style.clear = "none";})}, +{origCount:1108, fun:(function anonymous() {allElements[10].style.height = "10%";})}, +{origCount:1109, fun:(function anonymous() {allElements[0].style.overflow = "scroll";})}, +{origCount:1110, fun:(function anonymous() {allElements[7].style.display = "-moz-grid-group";})}, +{origCount:1111, fun:(function anonymous() {allElements[12].style.overflow = "visible";})}, +{origCount:1112, fun:(function anonymous() {allElements[6].style.width = "20em";})}, +{origCount:1113, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:1114, fun:(function anonymous() {allElements[10].style['float'] = "none";})}, +{origCount:1115, fun:(function anonymous() {allElements[5].style.width = "auto";})}, +{origCount:1116, fun:(function anonymous() {allElements[11].style.display = "table-caption";})}, +{origCount:1117, fun:(function anonymous() {allElements[8].style.width = "200%";})}, +{origCount:1118, fun:(function anonymous() {allElements[1].style.width = "1px";})}, +{origCount:1119, fun:(function anonymous() {allElements[8].style.background = "transparent";})}, +{origCount:1120, fun:(function anonymous() {allElements[9].style['float'] = "none";})}, +{origCount:1121, fun:(function anonymous() {allElements[9].style['float'] = "none";})}, +{origCount:1122, fun:(function anonymous() {allElements[1].style.display = "list-item";})}, +{origCount:1123, fun:(function anonymous() {allElements[3].style['float'] = "none";})}, +{origCount:1124, fun:(function anonymous() {allElements[8].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1125, fun:(function anonymous() {allElements[7].style.height = "auto";})}, +{origCount:1126, fun:(function anonymous() {allElements[7].style.height = "10%";})}, +{origCount:1127, fun:(function anonymous() {allElements[0].style.display = "-moz-inline-box";})}, +{origCount:1128, fun:(function anonymous() {allElements[3].style.clear = "right";})}, +{origCount:1129, fun:(function anonymous() {allElements[11].style.clear = "left";})}, +{origCount:1130, fun:(function anonymous() {allElements[1].style.color = "black";})}, +{origCount:1131, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:1132, fun:(function anonymous() {allElements[4].style.width = "10%";})}, +{origCount:1133, fun:(function anonymous() {allElements[2].style.display = "-moz-grid";})}, +{origCount:1134, fun:(function anonymous() {allElements[4].style.height = "100px";})}, +{origCount:1135, fun:(function anonymous() {allElements[4].style.clear = "both";})}, +{origCount:1136, fun:(function anonymous() {allElements[6].style.position = "static";})}, +{origCount:1137, fun:(function anonymous() {allElements[2].style['float'] = "left";})}, +{origCount:1138, fun:(function anonymous() {allElements[0].style.overflow = "scroll";})}, +{origCount:1139, fun:(function anonymous() {allElements[3].style.display = "table-cell";})}, +{origCount:1140, fun:(function anonymous() {allElements[4].style.color = "blue";})}, +{origCount:1141, fun:(function anonymous() {allElements[9].style.clear = "left";})}, +{origCount:1142, fun:(function anonymous() {allElements[9].style.clear = "none";})}, +{origCount:1143, fun:(function anonymous() {allElements[11].style['float'] = "left";})}, +{origCount:1144, fun:(function anonymous() {allElements[7].style.display = "-moz-inline-block";})}, +{origCount:1145, fun:(function anonymous() {allElements[3].style.clear = "none";})}, +{origCount:1146, fun:(function anonymous() {allElements[2].style.visibility = "collapse";})}, +{origCount:1147, fun:(function anonymous() {allElements[12].style['float'] = "none";})}, +{origCount:1148, fun:(function anonymous() {allElements[12].style.background = "transparent";})}, +{origCount:1149, fun:(function anonymous() {allElements[6].style.width = "1px";})}, +{origCount:1150, fun:(function anonymous() {allElements[1].style.width = "10%";})}, +{origCount:1151, fun:(function anonymous() {allElements[1].style['float'] = "none";})}, +{origCount:1152, fun:(function anonymous() {allElements[0].style.width = "1px";})}, +{origCount:1153, fun:(function anonymous() {allElements[2].style.width = "20em";})}, +{origCount:1154, fun:(function anonymous() {allElements[0].style.display = "-moz-popup";})}, +{origCount:1155, fun:(function anonymous() {allElements[0].style.color = "red";})}, +{origCount:1156, fun:(function anonymous() {allElements[6].style.visibility = "visible";})}, +{origCount:1157, fun:(function anonymous() {allElements[12].style.background = "#fcd";})}, +{origCount:1158, fun:(function anonymous() {allElements[9].style.visibility = "hidden";})}, +{origCount:1159, fun:(function anonymous() {allElements[4].style.overflow = "scroll";})}, +{origCount:1160, fun:(function anonymous() {allElements[1].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1161, fun:(function anonymous() {allElements[6].style.display = "block";})}, +{origCount:1162, fun:(function anonymous() {allElements[11].style.background = "#fcd";})}, +{origCount:1163, fun:(function anonymous() {allElements[9].style.visibility = "collapse";})}, +{origCount:1164, fun:(function anonymous() {allElements[5].style.background = "#fcd";})}, +{origCount:1165, fun:(function anonymous() {allElements[4].style.clear = "left";})}, +{origCount:1166, fun:(function anonymous() {allElements[0].style['float'] = "right";})}, +{origCount:1167, fun:(function anonymous() {allElements[10].style.width = "200%";})}, +{origCount:1168, fun:(function anonymous() {allElements[1].style['float'] = "left";})}, +{origCount:1169, fun:(function anonymous() {allElements[4].style.height = "auto";})}, +{origCount:1170, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:1171, fun:(function anonymous() {allElements[4].style.color = "blue";})}, +{origCount:1172, fun:(function anonymous() {allElements[11].style.visibility = "visible";})}, +{origCount:1173, fun:(function anonymous() {allElements[1].style.position = "absolute";})}, +{origCount:1174, fun:(function anonymous() {allElements[3].style.visibility = "visible";})}, +{origCount:1175, fun:(function anonymous() {allElements[12].style.position = "fixed";})}, +{origCount:1176, fun:(function anonymous() {allElements[5].style.display = "table-column-group";})}, +{origCount:1177, fun:(function anonymous() {allElements[2].style.clear = "right";})}, +{origCount:1178, fun:(function anonymous() {allElements[9].style.overflow = "hidden";})}, +{origCount:1179, fun:(function anonymous() {allElements[3].style.width = "20em";})}, +{origCount:1180, fun:(function anonymous() {allElements[4].style.position = "relative";})}, +{origCount:1181, fun:(function anonymous() {allElements[5].style.width = "20em";})}, +{origCount:1182, fun:(function anonymous() {allElements[10].style.visibility = "visible";})}, +{origCount:1183, fun:(function anonymous() {allElements[0].style.overflow = "scroll";})}, +{origCount:1184, fun:(function anonymous() {allElements[5].style.color = "red";})}, +{origCount:1185, fun:(function anonymous() {allElements[4].style.clear = "right";})}, +{origCount:1186, fun:(function anonymous() {allElements[5].style.overflow = "hidden";})}, +{origCount:1187, fun:(function anonymous() {allElements[10].style.clear = "none";})}, +{origCount:1188, fun:(function anonymous() {allElements[1].style.position = "fixed";})}, +{origCount:1189, fun:(function anonymous() {allElements[9].style.width = "1px";})}, +{origCount:1190, fun:(function anonymous() {allElements[0].style.color = "blue";})}, +{origCount:1191, fun:(function anonymous() {allElements[5].style.position = "static";})}, +{origCount:1192, fun:(function anonymous() {allElements[4].style.overflow = "hidden";})}, +{origCount:1193, fun:(function anonymous() {allElements[2].style.position = "relative";})}, +{origCount:1194, fun:(function anonymous() {allElements[4].style.position = "absolute";})}, +{origCount:1195, fun:(function anonymous() {allElements[4].style['float'] = "none";})}, +{origCount:1196, fun:(function anonymous() {allElements[7].style.color = "black";})}, +{origCount:1197, fun:(function anonymous() {allElements[4].style.color = "blue";})}, +{origCount:1198, fun:(function anonymous() {allElements[1].style.position = "absolute";})}, +{origCount:1199, fun:(function anonymous() {allElements[5].style.overflow = "scroll";})}, +{origCount:1200, fun:(function anonymous() {allElements[6].style.visibility = "visible";})}, +{origCount:1201, fun:(function anonymous() {allElements[11].style.clear = "right";})}, +{origCount:1202, fun:(function anonymous() {allElements[12].style.position = "static";})}, +{origCount:1203, fun:(function anonymous() {allElements[2].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1204, fun:(function anonymous() {allElements[11].style.visibility = "hidden";})}, +{origCount:1205, fun:(function anonymous() {allElements[7].style.color = "red";})}, +{origCount:1206, fun:(function anonymous() {allElements[7].style.clear = "right";})}, +{origCount:1207, fun:(function anonymous() {allElements[4].style.clear = "none";})}, +{origCount:1208, fun:(function anonymous() {allElements[4].style.display = "list-item";})}, +{origCount:1209, fun:(function anonymous() {allElements[12].style.background = "transparent";})}, +{origCount:1210, fun:(function anonymous() {allElements[7].style['float'] = "left";})}, +{origCount:1211, fun:(function anonymous() {allElements[8].style.color = "red";})}, +{origCount:1212, fun:(function anonymous() {allElements[7].style.width = "20em";})}, +{origCount:1213, fun:(function anonymous() {allElements[9].style.clear = "right";})}, +{origCount:1214, fun:(function anonymous() {allElements[8].style.height = "100px";})}, +{origCount:1215, fun:(function anonymous() {allElements[8].style.color = "red";})}, +{origCount:1216, fun:(function anonymous() {allElements[2].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1217, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:1218, fun:(function anonymous() {allElements[5].style.position = "relative";})}, +{origCount:1219, fun:(function anonymous() {allElements[0].style['float'] = "left";})}, +{origCount:1220, fun:(function anonymous() {allElements[10].style.overflow = "visible";})}, +{origCount:1221, fun:(function anonymous() {allElements[3].style.overflow = "visible";})}, +{origCount:1222, fun:(function anonymous() {allElements[8].style.visibility = "hidden";})}, +{origCount:1223, fun:(function anonymous() {allElements[6].style.visibility = "hidden";})}, +{origCount:1224, fun:(function anonymous() {allElements[3].style['float'] = "right";})}, +{origCount:1225, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:1226, fun:(function anonymous() {allElements[12].style['float'] = "left";})}, +{origCount:1227, fun:(function anonymous() {allElements[9].style.display = "list-item";})}, +{origCount:1228, fun:(function anonymous() {allElements[1].style.width = "20em";})}, +{origCount:1229, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:1230, fun:(function anonymous() {allElements[12].style.overflow = "auto";})}, +{origCount:1231, fun:(function anonymous() {allElements[5].style.overflow = "hidden";})}, +{origCount:1232, fun:(function anonymous() {allElements[12].style.overflow = "auto";})}, +{origCount:1233, fun:(function anonymous() {allElements[2].style.height = "2em";})}, +{origCount:1234, fun:(function anonymous() {allElements[5].style.display = "table-cell";})}, +{origCount:1235, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:1236, fun:(function anonymous() {allElements[8].style.height = "200%";})}, +{origCount:1237, fun:(function anonymous() {allElements[5].style.clear = "both";})}, +{origCount:1238, fun:(function anonymous() {allElements[12].style.height = "auto";})}, +{origCount:1239, fun:(function anonymous() {allElements[7].style.overflow = "auto";})}, +{origCount:1240, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:1241, fun:(function anonymous() {allElements[9].style.visibility = "visible";})}, +{origCount:1242, fun:(function anonymous() {allElements[2].style.display = "-moz-deck";})}, +{origCount:1243, fun:(function anonymous() {allElements[5].style.color = "black";})}, +{origCount:1244, fun:(function anonymous() {allElements[10].style.clear = "none";})}, +{origCount:1245, fun:(function anonymous() {allElements[10].style['float'] = "right";})}, +{origCount:1246, fun:(function anonymous() {allElements[11].style.width = "20em";})}, +{origCount:1247, fun:(function anonymous() {allElements[4].style.background = "#fcd";})}, +{origCount:1248, fun:(function anonymous() {allElements[8].style.position = "fixed";})}, +{origCount:1249, fun:(function anonymous() {allElements[3].style.clear = "both";})}, +{origCount:1250, fun:(function anonymous() {allElements[7].style.visibility = "collapse";})}, +{origCount:1251, fun:(function anonymous() {allElements[0].style.overflow = "visible";})}, +{origCount:1252, fun:(function anonymous() {allElements[12].style.height = "100px";})}, +{origCount:1253, fun:(function anonymous() {allElements[10].style.clear = "right";})}, +{origCount:1254, fun:(function anonymous() {allElements[0].style.overflow = "hidden";})}, +{origCount:1255, fun:(function anonymous() {allElements[1].style.overflow = "hidden";})}, +{origCount:1256, fun:(function anonymous() {allElements[3].style.position = "static";})}, +{origCount:1257, fun:(function anonymous() {allElements[1].style.width = "10%";})}, +{origCount:1258, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:1259, fun:(function anonymous() {allElements[3].style.overflow = "auto";})}, +{origCount:1260, fun:(function anonymous() {allElements[4].style.color = "green";})}, +{origCount:1261, fun:(function anonymous() {allElements[10].style.width = "auto";})}, +{origCount:1262, fun:(function anonymous() {allElements[11].style.overflow = "hidden";})}, +{origCount:1263, fun:(function anonymous() {allElements[1].style.clear = "none";})}, +{origCount:1264, fun:(function anonymous() {allElements[11].style['float'] = "right";})}, +{origCount:1265, fun:(function anonymous() {allElements[7].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1266, fun:(function anonymous() {allElements[7].style.overflow = "visible";})}, +{origCount:1267, fun:(function anonymous() {allElements[5].style['float'] = "left";})}, +{origCount:1268, fun:(function anonymous() {allElements[5].style.position = "fixed";})}, +{origCount:1269, fun:(function anonymous() {allElements[0].style.visibility = "hidden";})}, +{origCount:1270, fun:(function anonymous() {allElements[9].style.height = "100px";})}, +{origCount:1271, fun:(function anonymous() {allElements[10].style.height = "200%";})}, +{origCount:1272, fun:(function anonymous() {allElements[9].style.position = "absolute";})}, +{origCount:1273, fun:(function anonymous() {allElements[12].style.clear = "both";})}, +{origCount:1274, fun:(function anonymous() {allElements[11].style.visibility = "visible";})}, +{origCount:1275, fun:(function anonymous() {allElements[11].style.position = "fixed";})}, +{origCount:1276, fun:(function anonymous() {allElements[6].style.width = "20em";})}, +{origCount:1277, fun:(function anonymous() {allElements[12].style.height = "200%";})}, +{origCount:1278, fun:(function anonymous() {allElements[10].style.display = "list-item";})}, +{origCount:1279, fun:(function anonymous() {allElements[5].style.clear = "left";})}, +{origCount:1280, fun:(function anonymous() {allElements[3].style.clear = "left";})}, +{origCount:1281, fun:(function anonymous() {allElements[8].style.position = "fixed";})}, +{origCount:1282, fun:(function anonymous() {allElements[1].style.overflow = "auto";})}, +{origCount:1283, fun:(function anonymous() {allElements[0].style.height = "10%";})}, +{origCount:1284, fun:(function anonymous() {allElements[10].style['float'] = "right";})}, +{origCount:1285, fun:(function anonymous() {allElements[10].style.clear = "both";})}, +{origCount:1286, fun:(function anonymous() {allElements[7].style.background = "transparent";})}, +{origCount:1287, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:1288, fun:(function anonymous() {allElements[9].style.display = "-moz-box";})}, +{origCount:1289, fun:(function anonymous() {allElements[0].style.width = "auto";})}, +{origCount:1290, fun:(function anonymous() {allElements[8].style.color = "black";})}, +{origCount:1291, fun:(function anonymous() {allElements[1].style['float'] = "right";})}, +{origCount:1292, fun:(function anonymous() {allElements[9].style.position = "relative";})}, +{origCount:1293, fun:(function anonymous() {allElements[12].style.clear = "none";})}, +{origCount:1294, fun:(function anonymous() {allElements[3].style.width = "1px";})}, +{origCount:1295, fun:(function anonymous() {allElements[12].style.color = "red";})}, +{origCount:1296, fun:(function anonymous() {allElements[6].style.display = "-moz-inline-block";})}, +{origCount:1297, fun:(function anonymous() {allElements[4].style.width = "10%";})}, +{origCount:1298, fun:(function anonymous() {allElements[11].style.height = "2em";})}, +{origCount:1299, fun:(function anonymous() {allElements[6].style.height = "2em";})}, +{origCount:1300, fun:(function anonymous() {allElements[8].style.visibility = "collapse";})}, +{origCount:1301, fun:(function anonymous() {allElements[9].style.position = "absolute";})}, +{origCount:1302, fun:(function anonymous() {allElements[2].style.color = "green";})}, +{origCount:1303, fun:(function anonymous() {allElements[5].style.overflow = "auto";})}, +{origCount:1304, fun:(function anonymous() {allElements[11].style.visibility = "collapse";})}, +{origCount:1305, fun:(function anonymous() {allElements[12].style.color = "black";})}, +{origCount:1306, fun:(function anonymous() {allElements[12].style.background = "transparent";})}, +{origCount:1307, fun:(function anonymous() {allElements[6].style['float'] = "left";})}, +{origCount:1308, fun:(function anonymous() {allElements[11].style['float'] = "right";})}, +{origCount:1309, fun:(function anonymous() {allElements[6].style.clear = "none";})}, +{origCount:1310, fun:(function anonymous() {allElements[10].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1311, fun:(function anonymous() {allElements[3].style.display = "-moz-grid-group";})}, +{origCount:1312, fun:(function anonymous() {allElements[3].style['float'] = "right";})}, +{origCount:1313, fun:(function anonymous() {allElements[2].style.color = "blue";})}, +{origCount:1314, fun:(function anonymous() {allElements[5].style.visibility = "hidden";})}, +{origCount:1315, fun:(function anonymous() {allElements[6].style.background = "transparent";})}, +{origCount:1316, fun:(function anonymous() {allElements[9].style['float'] = "right";})}, +{origCount:1317, fun:(function anonymous() {allElements[7].style.background = "#fcd";})}, +{origCount:1318, fun:(function anonymous() {allElements[5].style.visibility = "collapse";})}, +{origCount:1319, fun:(function anonymous() {allElements[9].style.clear = "both";})}, +{origCount:1320, fun:(function anonymous() {allElements[11].style.color = "green";})}, +{origCount:1321, fun:(function anonymous() {allElements[4].style.clear = "none";})}, +{origCount:1322, fun:(function anonymous() {allElements[6].style.display = "-moz-deck";})}, +{origCount:1323, fun:(function anonymous() {allElements[9].style.clear = "none";})}, +{origCount:1324, fun:(function anonymous() {allElements[6].style.position = "static";})}, +{origCount:1325, fun:(function anonymous() {allElements[2].style.overflow = "scroll";})}, +{origCount:1326, fun:(function anonymous() {allElements[3].style.background = "transparent";})}, +{origCount:1327, fun:(function anonymous() {allElements[1].style.overflow = "auto";})}, +{origCount:1328, fun:(function anonymous() {allElements[2].style.visibility = "hidden";})}, +{origCount:1329, fun:(function anonymous() {allElements[10].style.overflow = "hidden";})}, +{origCount:1330, fun:(function anonymous() {allElements[6].style.overflow = "visible";})}, +{origCount:1331, fun:(function anonymous() {allElements[8].style.width = "auto";})}, +{origCount:1332, fun:(function anonymous() {allElements[7].style.width = "200%";})}, +{origCount:1333, fun:(function anonymous() {allElements[11].style.width = "200%";})}, +{origCount:1334, fun:(function anonymous() {allElements[10].style.visibility = "collapse";})}, +{origCount:1335, fun:(function anonymous() {allElements[11].style.background = "transparent";})}, +{origCount:1336, fun:(function anonymous() {allElements[5].style.overflow = "visible";})}, +{origCount:1337, fun:(function anonymous() {allElements[12].style['float'] = "right";})}, +{origCount:1338, fun:(function anonymous() {allElements[10].style.background = "#fcd";})}, +{origCount:1339, fun:(function anonymous() {allElements[6].style['float'] = "right";})}, +{origCount:1340, fun:(function anonymous() {allElements[4].style.visibility = "visible";})}, +{origCount:1341, fun:(function anonymous() {allElements[10].style.height = "auto";})}, +{origCount:1342, fun:(function anonymous() {allElements[3].style.position = "static";})}, +{origCount:1343, fun:(function anonymous() {allElements[2].style.display = "-moz-box";})}, +{origCount:1344, fun:(function anonymous() {allElements[12].style.color = "red";})}, +{origCount:1345, fun:(function anonymous() {allElements[0].style.clear = "none";})}, +{origCount:1346, fun:(function anonymous() {allElements[10].style.clear = "left";})}, +{origCount:1347, fun:(function anonymous() {allElements[8].style['float'] = "none";})}, +{origCount:1348, fun:(function anonymous() {allElements[0].style.visibility = "collapse";})}, +{origCount:1349, fun:(function anonymous() {allElements[4].style.visibility = "hidden";})}, +{origCount:1350, fun:(function anonymous() {allElements[0].style.position = "absolute";})}, +{origCount:1351, fun:(function anonymous() {allElements[6].style.display = "-moz-grid-group";})}, +{origCount:1352, fun:(function anonymous() {allElements[1].style.height = "100px";})}, +{origCount:1353, fun:(function anonymous() {allElements[5].style['float'] = "none";})}, +{origCount:1354, fun:(function anonymous() {allElements[9].style['float'] = "none";})}, +{origCount:1355, fun:(function anonymous() {allElements[5].style.display = "table-footer-group";})}, +{origCount:1356, fun:(function anonymous() {allElements[0].style.clear = "both";})}, +{origCount:1357, fun:(function anonymous() {allElements[11].style.clear = "none";})}, +{origCount:1358, fun:(function anonymous() {allElements[5].style.color = "green";})}, +{origCount:1359, fun:(function anonymous() {allElements[1].style['float'] = "left";})}, +{origCount:1360, fun:(function anonymous() {allElements[3].style.background = "#fcd";})}, +{origCount:1361, fun:(function anonymous() {allElements[5].style.display = "block";})}, +{origCount:1362, fun:(function anonymous() {allElements[11].style.width = "1px";})}, +{origCount:1363, fun:(function anonymous() {allElements[2].style['float'] = "right";})}, +{origCount:1364, fun:(function anonymous() {allElements[8].style.display = "table-column";})}, +{origCount:1365, fun:(function anonymous() {allElements[9].style.width = "20em";})}, +{origCount:1366, fun:(function anonymous() {allElements[10].style.visibility = "visible";})}, +{origCount:1367, fun:(function anonymous() {allElements[4].style['float'] = "none";})}, +{origCount:1368, fun:(function anonymous() {allElements[9].style.visibility = "hidden";})}, +{origCount:1369, fun:(function anonymous() {allElements[5].style.width = "200%";})}, +{origCount:1370, fun:(function anonymous() {allElements[9].style.background = "transparent";})}, +{origCount:1371, fun:(function anonymous() {allElements[2].style.color = "red";})}, +{origCount:1372, fun:(function anonymous() {allElements[2].style.width = "auto";})}, +{origCount:1373, fun:(function anonymous() {allElements[1].style.background = "#fcd";})}, +{origCount:1374, fun:(function anonymous() {allElements[5].style.width = "10%";})}, +{origCount:1375, fun:(function anonymous() {allElements[6].style.overflow = "visible";})}, +{origCount:1376, fun:(function anonymous() {allElements[10].style.display = "-moz-inline-block";})}, +{origCount:1377, fun:(function anonymous() {allElements[8].style.visibility = "collapse";})}, +{origCount:1378, fun:(function anonymous() {allElements[7].style.display = "inline";})}, +{origCount:1379, fun:(function anonymous() {allElements[11].style.position = "fixed";})}, +{origCount:1380, fun:(function anonymous() {allElements[1].style.display = "-moz-stack";})}, +{origCount:1381, fun:(function anonymous() {allElements[7].style.clear = "left";})}, +{origCount:1382, fun:(function anonymous() {allElements[9].style.overflow = "auto";})}, +{origCount:1383, fun:(function anonymous() {allElements[0].style.height = "10%";})}, +{origCount:1384, fun:(function anonymous() {allElements[10].style.overflow = "scroll";})}, +{origCount:1385, fun:(function anonymous() {allElements[7].style.height = "100px";})}, +{origCount:1386, fun:(function anonymous() {allElements[8].style.overflow = "auto";})}, +{origCount:1387, fun:(function anonymous() {allElements[6].style.background = "#fcd";})}, +{origCount:1388, fun:(function anonymous() {allElements[7].style.width = "auto";})}, +{origCount:1389, fun:(function anonymous() {allElements[3].style.position = "relative";})}, +{origCount:1390, fun:(function anonymous() {allElements[12].style.width = "10%";})}, +{origCount:1391, fun:(function anonymous() {allElements[1].style.position = "absolute";})}, +{origCount:1392, fun:(function anonymous() {allElements[1].style.background = "url(http://www.google.com/images/logo_sm.gif)";})}, +{origCount:1393, fun:(function anonymous() {allElements[5].style.clear = "left";})}, +{origCount:1394, fun:(function anonymous() {allElements[4].style['float'] = "left";})}, +{origCount:1395, fun:(function anonymous() {allElements[6].style.width = "20em";})}, +{origCount:1396, fun:(function anonymous() {allElements[0].style.height = "200%";})}, +{origCount:1397, fun:(function anonymous() {allElements[8].style.width = "200%";})}, +{origCount:1398, fun:(function anonymous() {allElements[6].style.height = "auto";})}, +{origCount:1399, fun:(function anonymous() {allElements[2].style.overflow = "scroll";})}, +{origCount:1400, fun:(function anonymous() {allElements[1].style.clear = "left";})}, +{origCount:1401, fun:(function anonymous() {allElements[7].style.display = "-moz-box";})}, +{origCount:1402, fun:(function anonymous() {allElements[0].style['float'] = "none";})}, +{origCount:1403, fun:(function anonymous() {allElements[0].style.clear = "none";})}, +{origCount:1404, fun:(function anonymous() {allElements[10].style.height = "100px";})}, +{origCount:1405, fun:(function anonymous() {allElements[11].style.width = "20em";})}, +{origCount:1406, fun:(function anonymous() {allElements[9].style.clear = "both";})}, +{origCount:1407, fun:(function anonymous() {allElements[7].style.position = "static";})}, +{origCount:1408, fun:(function anonymous() {allElements[12].style['float'] = "none";})}, +{origCount:1409, fun:(function anonymous() {allElements[4].style.position = "static";})}, +{origCount:1410, fun:(function anonymous() {allElements[0].style.height = "200%";})}, +{origCount:1411, fun:(function anonymous() {allElements[7].style['float'] = "none";})}, +{origCount:1412, fun:(function anonymous() {allElements[3].style.clear = "none";})}, +{origCount:1413, fun:(function anonymous() {allElements[6].style.color = "green";})}, +{origCount:1414, fun:(function anonymous() {allElements[10].style.height = "200%";})}, +{origCount:1415, fun:(function anonymous() {allElements[7].style.overflow = "visible";})} + + ]; + + +var output = eval(commands.toSource().replace(/anonymous/g,"")).toSource().replace( /\)\},/g , ")},\n"); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-311583.js b/js/src/tests/js1_5/extensions/regress-311583.js new file mode 100644 index 000000000..512427cc1 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-311583.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311583; +var summary = 'uneval(array) should use elision for holes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var a = new Array(3); +a[0] = a[2] = 0; + +actual = uneval(a); +expect = '[0, , 0]'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-311792-01.js b/js/src/tests/js1_5/extensions/regress-311792-01.js new file mode 100644 index 000000000..0df7dd3b2 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-311792-01.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311792; +var summary = 'Root Array.prototype methods'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function index_getter() +{ + gc(); + return 100; +} + +var a = [0, 1]; +a.__defineGetter__(0, index_getter); + +uneval(a.slice(0, 1)); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-311792-02.js b/js/src/tests/js1_5/extensions/regress-311792-02.js new file mode 100644 index 000000000..3b0141559 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-311792-02.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311792; +var summary = 'Root Array.prototype methods'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var subverted = 0; + +function index_getter() +{ + delete a[0]; + gc(); + for (var i = 0; i != 1 << 14; ++i) { + var tmp = new String("test"); + tmp = null; + } + return 1; +} + +function index_setter(value) +{ + subverted = value; +} + +var a = [ Math.sqrt(2), 0 ]; +a.__defineGetter__(1, index_getter); +a.__defineSetter__(1, index_setter); + +a.reverse(); +printStatus(subverted) + + reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-313763.js b/js/src/tests/js1_5/extensions/regress-313763.js new file mode 100644 index 000000000..c5ecfb2d8 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-313763.js @@ -0,0 +1,46 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313763; +var summary = 'Root jsarray.c creatures'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus ('This bug requires TOO_MUCH_GC'); + +var N = 0x80000002; +var array = Array(N); +array[N - 1] = 1; +array[N - 2] = 2; + +// Set getter not to wait until engine loops through 2^31 holes in the array. +var LOOP_TERMINATOR = "stop_long_loop"; +array.__defineGetter__(N - 2, function() { + throw "stop_long_loop"; + }); + +var prepared_string = String(1); +array.__defineGetter__(N - 1, function() { + var tmp = prepared_string; + prepared_string = null; + return tmp; + }) + + + try { + array.unshift(1); + } catch (e) { + if (e !== LOOP_TERMINATOR) + throw e; + } + +var expect = "1"; +var actual = array[N]; +printStatus(expect === actual); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-313803.js b/js/src/tests/js1_5/extensions/regress-313803.js new file mode 100644 index 000000000..27aafd144 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-313803.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313803; +var summary = 'uneval() on func with embedded objects with getter or setter'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var func = function ff() { + obj = { get foo() { return "foo"; }}; + return 1; +}; + +actual = uneval(func); + +expect = '(function ff() {obj = {get foo () {return "foo";}};return 1;})'; + +compareSource(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-313938.js b/js/src/tests/js1_5/extensions/regress-313938.js new file mode 100644 index 000000000..e4fec8032 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-313938.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313938; +var summary = 'Root access in jsscript.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); + reportCompare("Script not defined, Test skipped.", + "Script not defined, Test skipped.", + summary); +} +else +{ + var str = " 2;".substring(1); + "1".substring(2); + expect = Script.prototype.compile(str).toSource(); + + var likeString = { + toString: function() { + var tmp = str; + str = null; + return tmp; + } + }; + + TWO = 2.0; + + var likeObject = { + valueOf: function() { + if (typeof gc == "function") + gc(); + for (var i = 0; i != 40000; ++i) { + var tmp = 1e100 * TWO; + } + return this; + } + } + + var s = Script.prototype.compile(likeString, likeObject); + var actual = s.toSource(); + printStatus(expect === actual); + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-314874.js b/js/src/tests/js1_5/extensions/regress-314874.js new file mode 100644 index 000000000..d0329d8a5 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-314874.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 314874; +var summary = 'Function.call/apply with non-primitive argument'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var thisArg = { valueOf: function() { return {a: 'a', b: 'b'}; } }; + + var f = function () { return (this); }; + + expect = f.call(thisArg); + + thisArg.f = f; + + actual = thisArg.f(); + + delete thisArg.f; + + expect = expect.toSource(); + actual = actual.toSource(); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-315509-02.js b/js/src/tests/js1_5/extensions/regress-315509-02.js new file mode 100644 index 000000000..40e64b7ea --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-315509-02.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 315509; +var summary = 'Array.prototype.unshift do not crash on Arrays with holes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function x1() { + var a = new Array(1); + a.unshift(1); +} +function x2() { + var a = new Array(1); + a.unshift.call(a, 1); +} +function x3() { + var a = new Array(1); + a.x = a.unshift; + a.x(1); +} +function x4() { + var a = new Array(1); + a.__defineSetter__("x", a.unshift); + a.x = 1; +} + +for (var i = 0; i < 10; i++) +{ + x1(); + x2(); + x3(); + x4(); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-319683.js b/js/src/tests/js1_5/extensions/regress-319683.js new file mode 100644 index 000000000..47e0e8042 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-319683.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 319683; +var summary = 'Do not crash in call_enumerate'; +var actual = 'No Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +function crash(){ + function f(){ + var x; + function g(){ + x=1; //reference anything here or will not crash. + } + } + + //apply an object to the __proto__ attribute + f.__proto__={}; + + //the following call will cause crash + f(); +} + +crash(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-322957.js b/js/src/tests/js1_5/extensions/regress-322957.js new file mode 100644 index 000000000..0ae58b84e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-322957.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322957; +var summary = 'TryMethod should not eat getter exceptions'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { get toSource() { throw "EXCEPTION"; } }; + +var got_proper_exception = -1; + +try { + uneval(obj); +} catch (e) { + got_proper_exception = (e === "EXCEPTION"); +} + +expect = true; +actual = got_proper_exception; +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-327608.js b/js/src/tests/js1_5/extensions/regress-327608.js new file mode 100644 index 000000000..57f1b09b2 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-327608.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 327608; +var summary = 'Do not assume we will find the prototype property'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print('This test runs only in the browser'); + +function countProps(obj) +{ + var c; + for (var prop in obj) + ++c; + return c; +} + +function init() +{ + var inp = document.getElementsByTagName("input")[0]; + countProps(inp); + gc(); + var blurfun = inp.blur; + blurfun.__proto__ = null; + countProps(blurfun); + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); +} + +if (typeof window != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + + document.write('<input>'); + window.addEventListener("load", init, false); +} +else +{ + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-328443.js b/js/src/tests/js1_5/extensions/regress-328443.js new file mode 100644 index 000000000..897ee8fc1 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-328443.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328443; +var summary = 'Uncatchable exception with |new (G.call) (F);| when F proto is null'; +var actual = ''; +var expect = 'Exception caught'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var F = (function(){}); +F.__proto__ = null; + +var G = (function(){}); + +var z; + +z = "uncatchable exception!!!"; +try { + new (G.call) (F); + + actual = "No exception"; +} catch (er) { + actual = "Exception caught"; + printStatus("Exception was caught: " + er); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-328556.js b/js/src/tests/js1_5/extensions/regress-328556.js new file mode 100644 index 000000000..7a5b21041 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-328556.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328556; +var summary = 'Do not Assert: growth == (size_t)-1 || (nchars + 1) * sizeof(char16_t) == growth, in jsarray.c'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var D = []; +D.foo = D; +uneval(D); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-330569.js b/js/src/tests/js1_5/extensions/regress-330569.js new file mode 100644 index 000000000..986429fae --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-330569.js @@ -0,0 +1,94 @@ +// |reftest| skip -- Yarr doesn't bail on complex regexps. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330569; +var summary = 'RegExp - throw InternalError on too complex regular expressions'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var s; + expect = 'InternalError: regular expression too complex'; + + s = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' + + '<html>\n' + + '<head>\n' + + '<meta http-equiv="content-type" content="text/html; charset=windows-1250">\n' + + '<meta name="generator" content="PSPad editor, www.pspad.com">\n' + + '<title></title>\n'+ + '</head>\n' + + '<body>\n' + + '<!-- hello -->\n' + + '<script language="JavaScript">\n' + + 'var s = document. body. innerHTML;\n' + + 'var d = s. replace (/<!--(.*|\n)*-->/, "");\n' + + 'alert (d);\n' + + '</script>\n' + + '</body>\n' + + '</html>\n'; + + try + { + /<!--(.*|\n)*-->/.exec(s); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': /<!--(.*|\\n)*-->/.exec(s)'); + + function testre( re, n ) { + for ( var i= 0; i <= n; ++i ) { + re.test( Array( i+1 ).join() ); + } + } + + try + { + testre( /(?:,*)*x/, 22 ); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': testre( /(?:,*)*x/, 22 )'); + + try + { + testre( /(?:,|,)*x/, 22 ); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': testre( /(?:,|,)*x/, 22 )'); + + try + { + testre( /(?:,|,|,|,|,)*x/, 10 ); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': testre( /(?:,|,|,|,|,)*x/, 10 )'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-333541.js b/js/src/tests/js1_5/extensions/regress-333541.js new file mode 100644 index 000000000..cc868daf3 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-333541.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 333541; +var summary = '1..toSource()'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function a(){ + return 1..toSource(); +} + +try +{ + expect = 'function a() {\n return 1..toSource();\n}'; + actual = a.toString(); + compareSource(expect, actual, summary + ': 1'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 1'); +} + +try +{ + expect = 'function a() {return 1..toSource();}'; + actual = a.toSource(); + compareSource(expect, actual, summary + ': 2'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 2'); +} + +expect = a; +actual = a.valueOf(); +reportCompare(expect, actual, summary + ': 3'); + +try +{ + expect = 'function a() {\n return 1..toSource();\n}'; + actual = "" + a; + compareSource(expect, actual, summary + ': 4'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 4'); +} diff --git a/js/src/tests/js1_5/extensions/regress-336409-1.js b/js/src/tests/js1_5/extensions/regress-336409-1.js new file mode 100644 index 000000000..32dbb3633 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-336409-1.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) slow -- no results reported. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336409; +var summary = 'Integer overflow in js_obj_toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 64; + printStatus('Creating ' + n + 'MB string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating object'); + var o = {f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; + print(actual); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-336409-2.js b/js/src/tests/js1_5/extensions/regress-336409-2.js new file mode 100644 index 000000000..b979eb208 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-336409-2.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!xulRuntime.shell&&((Android||(isDebugBuild&&xulRuntime.OS=="Linux")||xulRuntime.XPCOMABI.match(/x86_64/)))) slow -- can fail silently due to out of memory, bug 615011 - timeouts on slow debug Linux +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336409; +var summary = 'Integer overflow in js_obj_toSource'; +var actual = 'No Crash'; +var expect = /(No Crash|InternalError: allocation size overflow|out of memory)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 128; + printStatus('Creating ' + n + 'MB string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating object'); + var o = {f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + actual = ex + ''; + print(actual); +} + +reportMatch(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-336410-1.js b/js/src/tests/js1_5/extensions/regress-336410-1.js new file mode 100644 index 000000000..5362d0d94 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-336410-1.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) slow -- can fail silently due to out of memory +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336410; +var summary = 'Integer overflow in array_toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 64; + printStatus('Creating ' + n + 'M length string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating array'); + var o=[r, r, r, r, r, r, r, r, r]; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + expect = '\(InternalError: allocation size overflow|out of memory\)'; + actual = ex + ''; + print(actual); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-336410-2.js b/js/src/tests/js1_5/extensions/regress-336410-2.js new file mode 100644 index 000000000..4ce18b65a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-336410-2.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!xulRuntime.shell&&((isDebugBuild&&xulRuntime.OS=="Linux")||Android||xulRuntime.XPCOMABI.match(/x86_64/)||xulRuntime.OS=="WINNT")) slow -- can fail silently due to out of memory, bug 621348 - timeouts on slow debug Linux +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336410; +var summary = 'Integer overflow in array_toSource'; +var actual = 'No Crash'; +var expect = /(No Crash|InternalError: allocation size overflow|out of memory)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 128; + printStatus('Creating ' + n + 'M length string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating array'); + var o=[r, r, r, r, r, r, r, r, r]; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + actual = ex + ''; + print(actual); +} + +reportMatch(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-338804-01.js b/js/src/tests/js1_5/extensions/regress-338804-01.js new file mode 100644 index 000000000..9fb3a4a89 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-338804-01.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus ('Uses Intel Assembly'); + +// <script> +// SpiderMonkey Script() GC hazard exploit +// +// scale: magic number ;-) +// BonEcho/2.0a2: 3000 +// Firefox/1.5.0.4: 2000 +// +var rooter, scale = 3000; + +/* + if(typeof(setTimeout) != "undefined") { + setTimeout(exploit, 2000); + } else { + exploit(); + } +*/ + +function exploit() { + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + Script({ toString: fillHeap }); + Script({ toString: fillHeap }); + } +} + +function createPayload() { + var result = "\u9090", i; + for(i = 0; i < 9; i++) { + result += result; + } + /* mov eax, 0xdeadfeed; mov ebx, eax; mov ecx, eax; mov edx, eax; int3 */ + result += "\uEDB8\uADFE\u89DE\u89C3\u89C1\uCCC2"; + return result; +} + +function fillHeap() { + rooter = []; + var payload = createPayload(), block = "", s2 = scale * 2, i; + for(i = 0; i < scale; i++) { + rooter[i] = block = block + payload; + } + for(; i < s2; i++) { + rooter[i] = payload + i; + } + return ""; +} + +// </script> + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-338804-02.js b/js/src/tests/js1_5/extensions/regress-338804-02.js new file mode 100644 index 000000000..e1e2a77ee --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-338804-02.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus ('Uses Intel Assembly'); + +// <script> +// SpiderMonkey Script() GC hazard exploit +// +// scale: magic number ;-) +// BonEcho/2.0a2: 3000 +// Firefox/1.5.0.4: 2000 +// +var rooter, scale = 2000; + +exploit(); +/* + if(typeof(setTimeout) != "undefined") { + setTimeout(exploit, 2000); + } else { + exploit(); + } +*/ + +function exploit() { + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + Script({ toString: fillHeap }); + Script({ toString: fillHeap }); + } +} + +function createPayload() { + var result = "\u9090", i; + for(i = 0; i < 9; i++) { + result += result; + } + /* mov eax, 0xdeadfeed; mov ebx, eax; mov ecx, eax; mov edx, eax; int3 */ + result += "\uEDB8\uADFE\u89DE\u89C3\u89C1\uCCC2"; + return result; +} + +function fillHeap() { + rooter = []; + var payload = createPayload(), block = "", s2 = scale * 2, i; + for(i = 0; i < scale; i++) { + rooter[i] = block = block + payload; + } + for(; i < s2; i++) { + rooter[i] = payload + i; + } + return ""; +} + +// </script> + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-338804-03.js b/js/src/tests/js1_5/extensions/regress-338804-03.js new file mode 100644 index 000000000..b3e759725 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-338804-03.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Script != 'undefined') +{ + Script({ toString: fillHeap }); +} +RegExp({ toString: fillHeap }); + +function fillHeap() { + if (typeof gc == 'function') gc(); + var x = 1, tmp; + for (var i = 0; i != 50000; ++i) { + tmp = x / 3; + } +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-339685.js b/js/src/tests/js1_5/extensions/regress-339685.js new file mode 100644 index 000000000..295a08068 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-339685.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 339685; +var summary = 'Setting __proto__ null should not affect __iterator__'; +var actual = ''; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var d = { a:2, b:3 }; + +d.__proto__ = null; + +try { + for (var p in d) + ; + actual = 'No Error'; +} catch(e) { + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-341956-01.js b/js/src/tests/js1_5/extensions/regress-341956-01.js new file mode 100644 index 000000000..be5865384 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-341956-01.js @@ -0,0 +1,68 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - unshift'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + + var a = []; + a[N - 1] = 1; + a.__defineGetter__(N - 1, function() { + var tmp = []; + tmp[N - 2] = 0; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return 10; + }); + + +// The following always-throw getter is to stop unshift from doing +// 2^32 iterations. + var toStop = "stringToStop"; + a[N - 3] = 0; + a.__defineGetter__(N - 3, function() { throw toStop; }); + + var good = false; + + try { + a.unshift(1); + } catch (e) { + if (e === toStop) + good = true; + } + + expect = true; + actual = good; + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-341956-02.js b/js/src/tests/js1_5/extensions/regress-341956-02.js new file mode 100644 index 000000000..61fe4ff9d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-341956-02.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - pop'; +var actual = ''; +var expect = 'GETTER RESULT'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + var a = []; + a[N - 1] = 0; + + var expected = "GETTER RESULT"; + + a.__defineGetter__(N - 1, function() { + delete a[N - 1]; + var tmp = []; + tmp[N - 2] = 1; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return expected; + }); + + actual = a.pop(); + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-341956-03.js b/js/src/tests/js1_5/extensions/regress-341956-03.js new file mode 100644 index 000000000..b52f4148b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-341956-03.js @@ -0,0 +1,72 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - reverse'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + var a = []; + a[N - 1] = 0; + + var expected = "GETTER RESULT"; + + a.__defineGetter__(N - 1, function() { + delete a[N - 1]; + var tmp = []; + tmp[N - 2] = 1; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return expected; + }); + +// The following always-throw getter is to stop unshift from doing +// 2^32 iterations. + var toStop = "stringToStop"; + a[N - 3] = 0; + a.__defineGetter__(N - 3, function() { throw toStop; }); + + + var good = false; + + try { + a.reverse(); + } catch (e) { + if (e === toStop) + good = true; + } + + expect = true; + actual = good; + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-342960.js b/js/src/tests/js1_5/extensions/regress-342960.js new file mode 100644 index 000000000..715427df7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-342960.js @@ -0,0 +1,46 @@ +// |reftest| skip-if(!xulRuntime.shell&&(Android||xulRuntime.OS=="WINNT"||xulRuntime.OS=="Linux")) silentfail slow -- bug 528464 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 342960; +var summary = 'Do not crash on large string toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(5); + + function v() + { + var meg=""; + var r=""; + var i; + print("don't interrupt the script. let it go."); + for(i=0;i<1024*1024;i++) meg += "v"; + for(i=0;i<1024/8;i++) r += meg; + var o={f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + print('done obj'); + var rr=r.toSource(); + print('done toSource()'); + } + + v(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-345967.js b/js/src/tests/js1_5/extensions/regress-345967.js new file mode 100644 index 000000000..58b72e3ad --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-345967.js @@ -0,0 +1,68 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 345967; +var summary = 'Yet another unrooted atom in jsarray.c'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(3); + + print('This test will probably run out of memory'); + print('This test really should only fail on 64 bit machines'); + + var JSVAL_INT_MAX = (1 << 30) - 1; + + var a = new Array(JSVAL_INT_MAX + 2); + a[JSVAL_INT_MAX] = 0; + a[JSVAL_INT_MAX + 1] = 1; + + a.__defineGetter__(JSVAL_INT_MAX, function() { return 0; }); + + a.__defineSetter__(JSVAL_INT_MAX, function(value) { + delete a[JSVAL_INT_MAX + 1]; + var tmp = []; + tmp[JSVAL_INT_MAX + 2] = 2; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + }); + + + a.shift(); + + expect = 0; + actual = a[JSVAL_INT_MAX]; + if (expect !== actual) + print("BAD"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-346494-01.js b/js/src/tests/js1_5/extensions/regress-346494-01.js new file mode 100644 index 000000000..755c3ddf4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-346494-01.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346494; +var summary = 'various try...catch tests'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var pfx = "(function (x) {try {throw x}", + cg1 = " catch (e if e === 42) {var v = 'catch guard 1 ' + e; actual += v + ','; print(v);}" + cg2 = " catch (e if e === 43) {var v = 'catch guard 2 ' + e; actual += v + ','; print(v);}" + cat = " catch (e) {var v = 'catch all ' + e; actual += v + ','; print(v);}" + fin = " finally{var v = 'fin'; actual += v + ','; print(v)}", + end = "})"; + + var exphash = { + pfx: "(function (y) { var result = ''; y = y + ',';", + cg1: "result += (y === '42,') ? ('catch guard 1 ' + y):'';", + cg2: "result += (y === '43,') ? ('catch guard 2 ' + y):'';", + cat: "result += /catch guard/.test(result) ? '': ('catch all ' + y);", + fin: "result += 'fin,';", + end: "return result;})" + }; + + var src = [ + pfx + fin + end, + pfx + cat + end, + pfx + cat + fin + end, + pfx + cg1 + end, + pfx + cg1 + fin + end, + pfx + cg1 + cat + end, + pfx + cg1 + cat + fin + end, + pfx + cg1 + cg2 + end, + pfx + cg1 + cg2 + fin + end, + pfx + cg1 + cg2 + cat + end, + pfx + cg1 + cg2 + cat + fin + end, + ]; + + var expsrc = [ + exphash.pfx + exphash.fin + exphash.end, + exphash.pfx + exphash.cat + exphash.end, + exphash.pfx + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.end, + exphash.pfx + exphash.cg1 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + ]; + + for (var i in src) { + print("\n=== " + src[i]); + var f = eval(src[i]); + print(src[i]); + var exp = eval(expsrc[i]); + // dis(f); + print('decompiling: ' + f); + + actual = ''; + try { expect = exp(42); f(42) } catch (e) { print('tried f(42), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(43); f(43) } catch (e) { print('tried f(43), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(44); f(44) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + } + + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-346494.js b/js/src/tests/js1_5/extensions/regress-346494.js new file mode 100644 index 000000000..bca6c4ec1 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-346494.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346494; +var summary = 'try-catch-finally scope'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function g() + { + try + { + throw "foo"; + } + catch(e if e == "bar") + { + } + catch(e if e == "baz") + { + } + finally + { + } + } + + expect = "foo"; + try + { + g(); + actual = 'No Exception'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + function h() + { + try + { + throw "foo"; + } + catch(e if e == "bar") + { + } + catch(e) + { + } + finally + { + } + } + + expect = "No Exception"; + try + { + h(); + actual = 'No Exception'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-350312-01.js b/js/src/tests/js1_5/extensions/regress-350312-01.js new file mode 100644 index 000000000..13ebce63f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-350312-01.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var tmp; + + function f() + { + try { + try { + throw 1; + } catch (e) { + throw e; + } finally { + tmp = true; + } + } catch (e) { + return e; + } + } + + var ex = f(); + + var passed = ex === 1; + if (!passed) { + print("Failed!"); + print("ex="+uneval(ex)); + } + reportCompare(true, passed, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-350312-02.js b/js/src/tests/js1_5/extensions/regress-350312-02.js new file mode 100644 index 000000000..20bab7e24 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-350312-02.js @@ -0,0 +1,112 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function createPrint(obj) + { + return new Function("actual += " + obj + " + ','; " + + "print(" + obj + ");"); + } + + function createThrow(obj) + { + return new Function("throw " + obj + "; "); + } + + + function f(a, b, c) + { + try { + a(); + } catch (e if e == null) { + b(); + } finally { + c(); + } + } + + print('test 1'); + expect = 'a,c,'; + actual = ''; + try + { + f(createPrint("'a'"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 1'); + + print('test 2'); + expect = 'c,caught a'; + actual = ''; + try + { + f(createThrow("'a'"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 2'); + + print('test 3'); + expect = 'b,c,'; + actual = ''; + try + { + f(createThrow("null"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 3'); + + print('test 4'); + expect = 'a,c,'; + actual = ''; + try + { + f(createPrint("'a'"), createThrow("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 4'); + + print('test 5'); + expect = 'c,caught b'; + actual = ''; + try + { + f(createThrow("null"), createThrow("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 5'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-350312-03.js b/js/src/tests/js1_5/extensions/regress-350312-03.js new file mode 100644 index 000000000..edf3cb49e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-350312-03.js @@ -0,0 +1,116 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var pfx = "(function (x) {try {if (x > 41) throw x}", + cg1a = " catch (e if e === 42) {var v = 'catch guard 1 ' + e; actual += v + ',';print(v);}" + cg1b = " catch (e if e === 42) {var v = 'catch guard 1 + throw ' + e; actual += v + ',';print(v); throw e;}" + cg2 = " catch (e if e === 43) {var v = 'catch guard 2 ' + e; actual += v + ',';print(v)}" + cat = " catch (e) {var v = 'catch all ' + e; print(v); if (e == 44) throw e}" + fin = " finally{var v = 'fin'; actual += v + ',';print(v)}", + end = "})"; + + var exphash = { + pfx: "(function (y) { var result = ''; y = y + ',';", + cg1a: " result += (y === '42,') ? ('catch guard 1 ' + y):'';", + cg1b: " result += (y === '42,') ? ('catch guard 1 + throw ' + y):'';", + cg2: " result += (y === '43,') ? ('catch guard 2 ' + y):'';", + cat: " result += (y > 41) ? ('catch all ' + y):'';", + fin: " result += 'fin,';", + end: "return result;})" + }; + + var src = [ + pfx + fin + end, + pfx + cat + end, + pfx + cat + fin + end, + pfx + cg1a + end, + pfx + cg1a + fin + end, + pfx + cg1a + cat + end, + pfx + cg1a + cat + fin + end, + pfx + cg1a + cg2 + end, + pfx + cg1a + cg2 + fin + end, + pfx + cg1a + cg2 + cat + end, + pfx + cg1a + cg2 + cat + fin + end, + pfx + cg1b + end, + pfx + cg1b + fin + end, + pfx + cg1b + cat + end, + pfx + cg1b + cat + fin + end, + pfx + cg1b + cg2 + end, + pfx + cg1b + cg2 + fin + end, + pfx + cg1b + cg2 + cat + end, + pfx + cg1b + cg2 + cat + fin + end, + ]; + + var expsrc = [ + exphash.pfx + exphash.fin + exphash.end, + exphash.pfx + exphash.cat + exphash.end, + exphash.pfx + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.end, + exphash.pfx + exphash.cg1a + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.end, + exphash.pfx + exphash.cg1b + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + ]; + + for (var i in src) { + print("\n=== " + i + ": " + src[i]); + var f = eval(src[i]); + var exp = eval(expsrc[i]); + // dis(f); + print('decompiling: ' + f); + //print('decompiling exp: ' + exp); + + actual = ''; + try { expect = exp(41); f(41) } catch (e) { print('tried f(41), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(42); f(42) } catch (e) { print('tried f(42), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(43); f(43) } catch (e) { print('tried f(43), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(44); f(44) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(45); f(45) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-350531.js b/js/src/tests/js1_5/extensions/regress-350531.js new file mode 100644 index 000000000..fcf9c74fe --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-350531.js @@ -0,0 +1,156 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350531; +var summary = 'exhaustively test parenthesization of binary operator subsets'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + +// Translated from permcomb.py, found at +// http://biotech.embl-ebi.ac.uk:8400/sw/common/share/python/examples/dstruct/classics/permcomb.py +// by searching for "permcomb.py". +// +// This shows bugs, gaps, and verbosities in JS compared to Python: +// 1. Lack of range([start, ] end[, step]). +// 2. ![] => false, indeed !<any-object> => false. +// 3. Missing append or push for strings (if append, then we'd want append for +// arrays too). +// 4. Missing slice operator syntax s[i:j]. +// 5. Lack of + for array concatenation. + + String.prototype.push = function (str) { return this + str; }; + + function permute(list) { + if (!list.length) // shuffle any sequence + return [list]; // empty sequence + var res = []; + for (var i = 0, n = list.length; i < n; i++) { // delete current node + var rest = list.slice(0, i).concat(list.slice(i+1)); + for each (var x in permute(rest)) // permute the others + res.push(list.slice(i, i+1).concat(x)); // add node at front + } + return res; + } + + function subset(list, size) { + if (size == 0 || !list.length) // order matters here + return [list.slice(0, 0)]; // an empty sequence + var result = []; + for (var i = 0, n = list.length; i < n; i++) { + var pick = list.slice(i, i+1); // sequence slice + var rest = list.slice(0, i).concat(list.slice(i+1)); // keep [:i] part + for each (var x in subset(rest, size-1)) + result.push(pick.concat(x)); + } + return result; + } + + function combo(list, size) { + if (size == 0 || !list.length) // order doesn't matter + return [list.slice(0, 0)]; // xyz == yzx + var result = []; + for (var i = 0, n = (list.length - size) + 1; i < n; i++) { + // iff enough left + var pick = list.slice(i, i+1); + var rest = list.slice(i+1); // drop [:i] part + for each (var x in combo(rest, size - 1)) + result.push(pick.concat(x)); + } + return result; + } + + +// Generate all subsets of distinct binary operators and join them from left +// to right, parenthesizing minimally. Decompile, recompile, compress spaces +// and compare to test correct parenthesization. + +// load("permcomb.js"); + + var bops = [ + ["=", "|=", "^=", "&=", "<<=", ">>=", ">>>=", "+=", "-=", "*=", "/=", "%="], + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "!=", "===", "!=="], + ["<", "<=", ">=", ">", "in", "instanceof"], + ["<<", ">>", ">>>"], + ["+", "-"], + ["*", "/", "%"], + ]; + + var prec = {}; + var aops = []; + + for (var i = 0; i < bops.length; i++) { + for (var j = 0; j < bops[i].length; j++) { + var k = bops[i][j]; + prec[k] = i; + aops.push(k); + } + } + +// Theoretically all subsets of size 2 should be enough to test, but in case +// there's some large-scale bug, try up to 5 (or higher? The cost in memory is +// factorially explosive). +next_subset: + for (i = 2; i < 5; i++) { + var sets = subset(aops, i); + gc(); + + for each (var set in sets) { + //print('for each set in sets: ' + (uneval(set)) ); + var src = "(function () {"; + for (j in set) { + var op = set[j], op2 = set[j-1]; + + // Precedence 0 is for assignment ops, which are right- + // associative, so don't force left associativity using + // parentheses. + if (prec[op] && prec[op] < prec[op2]) + src += "("; + } + src += "x "; + for (j in set) { + var op = set[j], op2 = set[j+1]; + + // Parenthesize only if not right-associative (precedence 0) and + // the next op is higher precedence than current. + var term = (prec[op] && prec[op] < prec[op2]) ? " x)" : " x"; + + src += op + term; + if (j < set.length - 1) + src += " "; + } + src += ";})"; + try { + var ref = uneval(eval(src)).replace(/\s+/g, ' '); + if (ref != src) { + actual += "BROKEN! input: " + src + " output: " + ref + " "; + print("BROKEN! input: " + src + " output: " + ref); + break next_subset; + } + } catch (e) {} + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351102-01.js b/js/src/tests/js1_5/extensions/regress-351102-01.js new file mode 100644 index 000000000..4d569dd8c --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351102-01.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + + f = function () { + try { + throw new Error('bad'); + } catch (e if (e = null, gc(), false)) { + } catch (e) { + // e is dangling now + } + }; + + f(); + + reportCompare(expect, actual, summary + ': 1'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351102-02.js b/js/src/tests/js1_5/extensions/regress-351102-02.js new file mode 100644 index 000000000..ce613da15 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351102-02.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + f = function () + { + var a = null; + try { + a(); + } catch (e) { + } + return false; + }; + + try { + throw 1; + } catch (e if f()) { + } catch (e if e == 1) { + print("GOOD"); + } catch (e) { + print("BAD: "+e); + } + + reportCompare(expect, actual, summary + ': 2'); + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351102-06.js b/js/src/tests/js1_5/extensions/regress-351102-06.js new file mode 100644 index 000000000..87e897f99 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351102-06.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + try + { + try { null.a } catch(e if (e = null, gc())) { } + } + catch(ex) + { + } + reportCompare(expect, actual, summary + ': 6'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351448.js b/js/src/tests/js1_5/extensions/regress-351448.js new file mode 100644 index 000000000..0876eef04 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351448.js @@ -0,0 +1,62 @@ +// |reftest| skip -- Yarr doesn't have the same complexity errors at execution time. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351448; +var summary = 'RegExp - throw InternalError on too complex regular expressions'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var strings = [ + "/.X(.+)+X/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+X/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+XX/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+XX/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X]/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X]/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X][X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X][X]/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+[X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+[X]/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X]/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X]/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X][X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X][X]/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X][X](.+)+[X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X][X](.+)+[X]/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')" + ]; + + expect = 'InternalError: regular expression too complex'; + + for (var i = 0; i < strings.length; i++) + { + try + { + eval(strings[i]); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + strings[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351463-01.js b/js/src/tests/js1_5/extensions/regress-351463-01.js new file mode 100644 index 000000000..49e5441df --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351463-01.js @@ -0,0 +1,254 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351463; +var summary = 'Treat hyphens as not special adjacent to CharacterClassEscapes in character classes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var r; + var s = 'a0- z'; + + r = '([\\d-\\s]+)'; + expect = ['0- ', '0- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\d]+)'; + expect = ['0- ', '0- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\D-\\s]+)'; + expect = ['a', 'a'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\D]+)'; + expect = ['a', 'a'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\d-\\S]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\d]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\D-\\S]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\D]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + +// -- + + r = '([\\w-\\s]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\w]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\W-\\s]+)'; + expect = ['- ', '- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\W]+)'; + expect = ['- ', '- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\w-\\S]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\w]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\W-\\S]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\W]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-351973.js b/js/src/tests/js1_5/extensions/regress-351973.js new file mode 100644 index 000000000..008db6353 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-351973.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351973; +var summary = 'GC hazard with unrooted ids in Object.toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function removeAllProperties(o) + { + for (var prop in o) + delete o[prop]; + for (var i = 0; i != 50*1000; ++i) { + var tmp = Math.sqrt(i+0.2); + tmp = 0; + } + if (typeof gc == "function") + gc(); + } + + function run_test() + { + + var o = {}; + o.first = { toSource: function() { removeAllProperties(o); } }; + for (var i = 0; i != 10; ++i) { + o[Math.sqrt(i + 0.1)] = 1; + } + return o.toSource(); + } + + print(run_test()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-352281.js b/js/src/tests/js1_5/extensions/regress-352281.js new file mode 100644 index 000000000..acb074385 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-352281.js @@ -0,0 +1,35 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352281; +var summary = 'decompilation of |while| and function declaration'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f, g; + f = function() { { while(0) function t() { } } } + expect = 'function() { while(0) { function t() { } }}'; + actual = f + ''; + compareSource(expect, actual, summary); + + g = eval(uneval(actual)); + actual = g + ''; + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-352291.js b/js/src/tests/js1_5/extensions/regress-352291.js new file mode 100644 index 000000000..a714e9a4c --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-352291.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352291; +var summary = 'disassembly of regular expression'; +var actual = ''; +var expect = 'TypeError: /g/g is not a function'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof dis != 'function') + { + actual = expect = 'disassembly not supported, test skipped.'; + } + else + { + try + { + dis(/g/g) + } + catch(ex) + { + actual = ex + ''; + } + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-352372.js b/js/src/tests/js1_5/extensions/regress-352372.js new file mode 100644 index 000000000..088f51028 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-352372.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352372; +var summary = 'Do not assert eval("setter/*...")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'ReferenceError: setter is not defined'; + try + { + eval("setter/*\n*/;"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/;")'); + + try + { + eval("setter/*\n*/g"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/g")'); + + try + { + eval("setter/*\n*/ ;"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/ ;")'); + + try + { + eval("setter/*\n*/ g"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/ g")'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-352604.js b/js/src/tests/js1_5/extensions/regress-352604.js new file mode 100644 index 000000000..c6197f6af --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-352604.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352604; +var summary = 'Do not assert: !OBJ_GET_PROTO(cx, ctor)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f() {} + delete Function; + var g = function () {}; + + expect = f.__proto__; + actual = g.__proto__; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-354297.js b/js/src/tests/js1_5/extensions/regress-354297.js new file mode 100644 index 000000000..83a0f22f4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-354297.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354297; +var summary = 'getter/setter can be on index'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test requires GC_MARK_DEBUG'); + + var o = {}; o.__defineGetter__(1, Math.sin); gc() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-354541-01.js b/js/src/tests/js1_5/extensions/regress-354541-01.js new file mode 100644 index 000000000..c177c3be4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-354541-01.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary + ': top level'); + +String.prototype.trim = function() { print('hallo'); }; + +const S = String; +const Sp = String.prototype; + +expect = 'No Error'; +actual = 'No Error'; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; print(String === S); print(String.prototype === Sp); "".trim();'); + s(); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-354541-02.js b/js/src/tests/js1_5/extensions/regress-354541-02.js new file mode 100644 index 000000000..83019d55f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-354541-02.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary + ': in function'); + + String.prototype.trim = function() { print('hallo'); }; + + const S = String; + const Sp = String.prototype; + + expect = 'No Error'; + actual = 'No Error'; + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; print(String === S); print(String.prototype === Sp); "".trim();'); + s(); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-354541-03.js b/js/src/tests/js1_5/extensions/regress-354541-03.js new file mode 100644 index 000000000..2468192e4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-354541-03.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary + ': top level'); + +String.prototype.trim = function() { print('hallo'); }; + +String.prototype.trim = function() { return 'hallo'; }; + +const S = String; +const Sp = String.prototype; + +expect = 'hallo'; +var expectStringInvariant = true + var actualStringInvariant; +var expectStringPrototypeInvariant = true; +var actualStringPrototypeInvariant; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); + reportCompare("Script not defined, Test skipped.", + "Script not defined, Test skipped.", + summary); +} +else +{ + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; actualStringInvariant = (String === S); actualStringPrototypeInvariant = (String.prototype === Sp); actual = "".trim();'); + try + { + s(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'trim() returned'); + reportCompare(expectStringInvariant, actualStringInvariant, + 'String invariant'); + reportCompare(expectStringPrototypeInvariant, + actualStringPrototypeInvariant, + 'String.prototype invariant'); + +} + diff --git a/js/src/tests/js1_5/extensions/regress-354541-04.js b/js/src/tests/js1_5/extensions/regress-354541-04.js new file mode 100644 index 000000000..ee68b0a76 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-354541-04.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary + ': in function'); + + String.prototype.trim = function() { return 'hallo'; }; + + const S = String; + const Sp = String.prototype; + + expect = 'hallo'; + var expectStringInvariant = true; + var actualStringInvariant; + var expectStringPrototypeInvariant = true; + var actualStringPrototypeInvariant; + + if (typeof Script == 'undefined') + { + print('Test skipped. Script is not defined'); + reportCompare("Script not defined, Test skipped.", + "Script not defined, Test skipped.", + summary); + } + else + { + s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; actualStringInvariant = (String === S); actualStringPrototypeInvariant = (String.prototype === Sp); actual = "".trim();'); + try + { + s(); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, 'trim() returned'); + reportCompare(expectStringInvariant, actualStringInvariant, 'String invariant'); + reportCompare(expectStringPrototypeInvariant, + actualStringPrototypeInvariant, + 'String.prototype invariant'); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355339.js b/js/src/tests/js1_5/extensions/regress-355339.js new file mode 100644 index 000000000..9b15bd742 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355339.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355339; +var summary = 'Do not assert: sprop->setter != js_watch_set'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + o = {}; + o.watch("j", function(a,b,c) { print("*",a,b,c) }); + o.unwatch("j"); + o.watch("j", function(a,b,c) { print("*",a,b,c) }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355497.js b/js/src/tests/js1_5/extensions/regress-355497.js new file mode 100644 index 000000000..4f69eefbf --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355497.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355497; +var summary = 'Do not overflow stack with Array.slice, getter'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'InternalError: too much recursion'; + + try + { + var a = { length: 1 }; + a.__defineGetter__(0, [].slice); + a[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 1'); + + try + { + var b = { length: 1 }; + b.__defineGetter__(0, function () { return Array.slice(b);}); + b[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 2'); + + try + { + var c = []; + c.__defineSetter__(0, c.unshift); + c[0] = 1; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 3'); + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355622.js b/js/src/tests/js1_5/extensions/regress-355622.js new file mode 100644 index 000000000..87224a218 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355622.js @@ -0,0 +1,34 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355622; +var summary = 'Do not assert: overwriting'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { export arguments })(); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355655.js b/js/src/tests/js1_5/extensions/regress-355655.js new file mode 100644 index 000000000..9013cb1b9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355655.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355655; +var summary = 'running script can be recompiled'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + expect = 'TypeError: cannot compile over a script that is currently executing'; + actual = ''; + + try + { + t='1';s=Script('s.compile(t);print(t);');s(); + } + catch(ex) + { + actual = ex + ''; + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355820.js b/js/src/tests/js1_5/extensions/regress-355820.js new file mode 100644 index 000000000..dd5de38ea --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355820.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355820; +var summary = 'Remove non-standard Script object'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test will fail in gecko prior to 1.9'); + + expect = 'undefined'; + actual = typeof Script; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-355982.js b/js/src/tests/js1_5/extensions/regress-355982.js new file mode 100644 index 000000000..815f8af15 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-355982.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355982; +var summary = 'Script("") should not fail'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'No Error'; + actual = 'No Error'; + try + { + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + Script(''); + } + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-356402.js b/js/src/tests/js1_5/extensions/regress-356402.js new file mode 100644 index 000000000..33e1e6637 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-356402.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356402; +var summary = 'Do not assert: slot < fp->nvars'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + (function() { new Script('for(var x in x) { }')(); })(); +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-358594-01.js b/js/src/tests/js1_5/extensions/regress-358594-01.js new file mode 100644 index 000000000..db6ea21b7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-01.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + function f() { } + f.__proto__ = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-358594-02.js b/js/src/tests/js1_5/extensions/regress-358594-02.js new file mode 100644 index 000000000..d31d93ff5 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-02.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +function f() { } +f.__proto__ = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-358594-03.js b/js/src/tests/js1_5/extensions/regress-358594-03.js new file mode 100644 index 000000000..f27c41d25 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-03.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + f = function () { }; + f.__proto__ = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-358594-04.js b/js/src/tests/js1_5/extensions/regress-358594-04.js new file mode 100644 index 000000000..5444293d0 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-04.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +f = function () { }; +f.__proto__ = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-358594-05.js b/js/src/tests/js1_5/extensions/regress-358594-05.js new file mode 100644 index 000000000..0c6f9a1a4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-05.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + f = function () { }; + f.hhhhhhhhh = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-358594-06.js b/js/src/tests/js1_5/extensions/regress-358594-06.js new file mode 100644 index 000000000..b4dc4fcd9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-358594-06.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +f = function () { }; +f.hhhhhhhhh = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-359024.js b/js/src/tests/js1_5/extensions/regress-359024.js new file mode 100644 index 000000000..a2a178cba --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-359024.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 359024; +var summary = 'Do not crash with Script...'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print(expect = actual = 'Test skipped. Script object required.'); + } + else + { + var scri=new Script(" var s=new Date(); var a=0; for(var i=0;i<1024*1024;i++) {a=i } var e=new Date(); print('time2='+(e-s)/1000);"); + scri.compile(); + scri.exec(); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-361346.js b/js/src/tests/js1_5/extensions/regress-361346.js new file mode 100644 index 000000000..297c3b1f2 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361346.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361346; +var summary = 'Crash with setter, watch, GC'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +Object.defineProperty(this, "x", { set: new Function, enumerable: true, configurable: true }); +this.watch('x', function(){}); +gc(); +x = {}; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-361360.js b/js/src/tests/js1_5/extensions/regress-361360.js new file mode 100644 index 000000000..98e6575d9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361360.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361360; +var summary = 'Do not assert: !caller || caller->pc involving setter and watch'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + this.__defineSetter__('x', eval); + this.watch('x', function(){}); + x = 3; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-361552.js b/js/src/tests/js1_5/extensions/regress-361552.js new file mode 100644 index 000000000..eed54e6dd --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361552.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361552; +var summary = 'Crash with setter, watch, Script'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + this.__defineSetter__('x', gc); + this.watch('x', new Script('')); + x = 3; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-361558.js b/js/src/tests/js1_5/extensions/regress-361558.js new file mode 100644 index 000000000..a9a3ae725 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361558.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361558; +var summary = 'Do not assert: sprop->setter != js_watch_set'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +({}.__proto__.watch('x', print)); ({}.watch('x', print)); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-361571.js b/js/src/tests/js1_5/extensions/regress-361571.js new file mode 100644 index 000000000..bf89d794b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361571.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361571; +var summary = 'Do not assert: fp->scopeChain == parent'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + o = {}; + o.__defineSetter__('y', eval); + o.watch('y', function () { return "";}); + o.y = 1; + } + catch(ex) + { + printStatus('Note eval can no longer be called directly'); + expect = 'EvalError: function eval must be called directly, and not by way of a function of another name'; + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-361856.js b/js/src/tests/js1_5/extensions/regress-361856.js new file mode 100644 index 000000000..e7e2f675b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361856.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361856; +var summary = 'Do not assert: overwriting @ js_AddScopeProperty'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function testit() { + var obj = {}; + obj.watch("foo", function(){}); + delete obj.foo; + obj = null; + gc(); + } + testit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-361964.js b/js/src/tests/js1_5/extensions/regress-361964.js new file mode 100644 index 000000000..fcb8bba01 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-361964.js @@ -0,0 +1,54 @@ +// |reftest| skip -- slow, alert not dismissed, now busted by harness +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361964; +var summary = 'Crash [@ MarkGCThingChildren] involving watch and setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var doc; + if (typeof document == 'undefined') + { + doc = {}; + } + else + { + doc = document; + } + + if (typeof alert == 'undefined') + { + alert = print; + } + +// Crash: + doc.watch("title", function(a,b,c,d) { + return { toString : function() { alert(1); } }; + }); + doc.title = "xxx"; + +// No crash: + doc.watch("title", function() { + return { toString : function() { alert(1); } }; + }); + doc.title = "xxx"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-363258.js b/js/src/tests/js1_5/extensions/regress-363258.js new file mode 100644 index 000000000..4e48b1261 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-363258.js @@ -0,0 +1,48 @@ +// |reftest| random -- bug 524788 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 363258; +var summary = 'Timer resolution'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = 0; + var stop = 0; + var i; + var limit = 0; + var incr = 10; + var resolution = 5; + + while (stop - start == 0) + { + limit += incr; + start = Date.now(); + for (i = 0; i < limit; i++) {} + stop = Date.now(); + } + + print('limit=' + limit + ', resolution=' + resolution + ', time=' + (stop - start)); + + expect = true; + actual = (stop - start <= resolution); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-363988.js b/js/src/tests/js1_5/extensions/regress-363988.js new file mode 100644 index 000000000..76f1dccba --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-363988.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 363988; +var summary = 'Do not crash at JS_GetPrivate with large script'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function crash() { + var town = new Array; + + for (var i = 0; i < 0x4001; ++i) { + var si = String(i); + town[i] = [ si, "x" + si, "y" + si, "z" + si ]; + } + + return "town=" + uneval(town) + ";function f() {}"; + } + + if (typeof document != "undefined") + { + // this is required to reproduce the crash. + document.write("<script>", crash(), "<\/script>"); + } + else + { + crash(); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-365527.js b/js/src/tests/js1_5/extensions/regress-365527.js new file mode 100644 index 000000000..4f2afa2f6 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-365527.js @@ -0,0 +1,66 @@ +// |reftest| slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 365527; +var summary = 'JSOP_ARGUMENTS should set obj register'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + counter = 500*1000; + + var obj; + + function getter() + { + obj = { get x() { + return getter(); + }, counter: counter}; + return obj; + } + + + var x; + + function g() + { + x += this.counter; + if (--counter == 0) + throw "Done"; + } + + + function f() + { + arguments=g; + try { + for (;;) { + arguments(); + obj.x; + } + } catch (e) { + } + } + + + getter(); + f(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-365692.js b/js/src/tests/js1_5/extensions/regress-365692.js new file mode 100644 index 000000000..106b8071a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-365692.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 365692; +var summary = 'getter/setter bytecodes should support atoms over 64k'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function g() +{ + return 10; +} + +try +{ + var N = 100*1000; + var src = 'var x = ["'; + var array = Array(N); + for (var i = 0; i != N; ++i) + array[i] = i; + src += array.join('","')+'"]; x.a getter = g; return x.a;'; + var f = Function(src); + if (f() != 10) + throw "Unexpected result"; +} +catch(ex) +{ + if (ex == "Unexpected result") + { + actual = ex; + } +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-365869.js b/js/src/tests/js1_5/extensions/regress-365869.js new file mode 100644 index 000000000..f027cf84a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-365869.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 365869; +var summary = 'strict warning for object literal with duplicate propery names'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (!options().match(/strict/)) + { + options('strict'); + } + if (!options().match(/werror/)) + { + options('werror'); + } + + print('test crash from bug 371292 Comment 9'); + + try + { + expect = "TypeError: can't redefine non-configurable property 5"; + "012345".__defineSetter__(5, function(){}); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-366288.js b/js/src/tests/js1_5/extensions/regress-366288.js new file mode 100644 index 000000000..05f0d2565 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-366288.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366288; +var summary = 'Do not assert !SPROP_HAS_STUB_GETTER with __defineSetter__'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__defineSetter__("x", function(){}); +x = 3; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-366292.js b/js/src/tests/js1_5/extensions/regress-366292.js new file mode 100644 index 000000000..19879769c --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-366292.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366292; +var summary = '__defineSetter__ and JSPROP_SHARED regression'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'undefined'; +this.__defineSetter__("x", function(){}); +actual = String(x); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-366396.js b/js/src/tests/js1_5/extensions/regress-366396.js new file mode 100644 index 000000000..4369be821 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-366396.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366396; +var summary = 'Do not assert !SPROP_HAS_STUB_GETTER on Setter with %='; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__defineSetter__("x", function() {}); x %= 5; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-367118-01.js b/js/src/tests/js1_5/extensions/regress-367118-01.js new file mode 100644 index 000000000..83c4d59d1 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367118-01.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367118; +var summary = 'memory corruption in script_compile'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script or toSource not defined'); + } + else + { + var s = new Script(""); + var o = { + toString : function() { + s.compile(""); + Array(11).join(Array(11).join(Array(101).join("aaaaa"))); + return "a"; + } + }; + s.compile(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367118-02.js b/js/src/tests/js1_5/extensions/regress-367118-02.js new file mode 100644 index 000000000..d54fba896 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367118-02.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367118; +var summary = 'memory corruption in script_compile'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script or toSource not defined'); + } + else + { + var s = new Script(""); + var o = { + toString : function() { + s.compile(""); + print(1); + return "a"; + } + }; + s.compile(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367119-01.js b/js/src/tests/js1_5/extensions/regress-367119-01.js new file mode 100644 index 000000000..4391ab981 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367119-01.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367119; +var summary = 'memory corruption in script_exec'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script or toSource not defined'); + } + else + { + var s = new Script(""); + var o = { + valueOf : function() { + s.compile(""); + Array(11).join(Array(11).join(Array(101).join("aaaaa"))); + return {}; + } + }; + s.exec(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367119-02.js b/js/src/tests/js1_5/extensions/regress-367119-02.js new file mode 100644 index 000000000..990e46486 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367119-02.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367119; +var summary = 'memory corruption in script_exec'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script or toSource not defined'); + } + else + { + var s = new Script(""); + var o = { + valueOf : function() { + s.compile(""); + print(1); + return {}; + } + }; + s.exec(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367120-01.js b/js/src/tests/js1_5/extensions/regress-367120-01.js new file mode 100644 index 000000000..edb379b9e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367120-01.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367120; +var summary = 'memory corruption in script_toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined' || !('toSource' in {})) + { + print('Test skipped. Script or toSource not defined'); + } + else + { + var s = new Script(""); + var o = { + valueOf : function() { + s.compile(""); + Array(11).join(Array(11).join(Array(101).join("aaaaa"))); + return; + } + }; + s.toSource(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367120-02.js b/js/src/tests/js1_5/extensions/regress-367120-02.js new file mode 100644 index 000000000..cf8c3d2f5 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367120-02.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367120; +var summary = 'memory corruption in script_toString'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + var s = new Script(""); + var o = { + valueOf : function() { + s.compile(""); + Array(11).join(Array(11).join(Array(101).join("aaaaa"))); + return; + } + }; + s.toString(o); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367121.js b/js/src/tests/js1_5/extensions/regress-367121.js new file mode 100644 index 000000000..f74e6dfd3 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367121.js @@ -0,0 +1,64 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367121; +var summary = 'self modifying script detection'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + actual = expect = 'Test skipped - Test must be run in the browser.'; + reportCompare(expect, actual, summary); + } + else if (typeof Script == 'undefined') + { + actual = expect = 'Test skipped - Test requires Script object..'; + reportCompare(expect, actual, summary); + } + else + { + gDelayTestDriverEnd = true; + } + + exitFunc ('test'); +} + +function handleLoad() +{ + var iframe = document.body.appendChild(document.createElement('iframe')); + var d = iframe.contentDocument; + + d.addEventListener("test", function(e) { + s.compile(""); + Array(11).join(Array(11).join(Array(101).join("aaaaa"))); + }, true); + + var e = d.createEvent("Events"); + e.initEvent("test", true, true); + var s = new Script("d.dispatchEvent(e);"); + s.exec(); + + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} + +if (typeof window != 'undefined') +{ + window.onload = handleLoad; +} diff --git a/js/src/tests/js1_5/extensions/regress-367501-01.js b/js/src/tests/js1_5/extensions/regress-367501-01.js new file mode 100644 index 000000000..4a84475d0 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367501-01.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367501; +var summary = 'getter/setter issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = 'undefined'; + var a = { set x(v) {} }; + actual = a.x + ''; + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367501-02.js b/js/src/tests/js1_5/extensions/regress-367501-02.js new file mode 100644 index 000000000..8160a9a70 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367501-02.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367501; +var summary = 'getter/setter crashes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = 'undefined'; + var a = { set x(v) {} }; + for (var i = 0; i < 92169 - 3; ++i) a[i] = 1; + actual = a.x + ''; + actual = a.x + ''; + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367501-03.js b/js/src/tests/js1_5/extensions/regress-367501-03.js new file mode 100644 index 000000000..9d0a88c0b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367501-03.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367501; +var summary = 'getter/setter crashes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = actual = 'No Crash'; + var a = { set x(v) {} }; + for (var i = 0; i < 0x4bf20 - 3; ++i) a[i] = 1; + a.x; + a.x.x; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367501-04.js b/js/src/tests/js1_5/extensions/regress-367501-04.js new file mode 100644 index 000000000..9d4b1993b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367501-04.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367501; +var summary = 'getter/setter crashes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = actual = 'No Crash'; + var a = { set x(v) {} }; + for (var i = 0; i < 0x10050c - 3; ++i) a[i] = 1; + a.x; + typeof a.x; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-367589.js b/js/src/tests/js1_5/extensions/regress-367589.js new file mode 100644 index 000000000..14d7315bf --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-367589.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367589; +var summary = 'Do not assert !SPROP_HAS_STUB_SETTER(sprop) || (sprop->attrs & JSPROP_GETTER)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window != 'undefined') + { + gDelayTestDriverEnd = true; + document.write('<button id="button" onclick="document.getElementsByTagName(\'button\')[0] = \'wtf\';">Crash</button>'); + window.addEventListener('load', crash, false); + } + else + { + reportCompare(expect, actual, summary); + } + + exitFunc ('test'); +} + +function crash() +{ + document.getElementById('button').click(); + setTimeout(checkCrash, 0); +} + +function checkCrash() +{ + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} diff --git a/js/src/tests/js1_5/extensions/regress-369404.js b/js/src/tests/js1_5/extensions/regress-369404.js new file mode 100644 index 000000000..7e3547152 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-369404.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369404; +var summary = 'Do not assert: !SPROP_HAS_STUB_SETTER(sprop) || (sprop->attrs & JSPROP_GETTER) '; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window != 'undefined') + { + gDelayTestDriverEnd = true; + document.write('<span id="r"> </span>' + + '<script>' + + 'f = function(){};' + + 'f.prototype = document.getElementById("r").childNodes;' + + 'j = new f();' + + 'j[0] = null;' + + '</script>'); + window.addEventListener('load', crash, false); + } + else + { + reportCompare(expect, actual, summary); + } + + exitFunc ('test'); +} + +function crash() +{ + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} diff --git a/js/src/tests/js1_5/extensions/regress-369696-01.js b/js/src/tests/js1_5/extensions/regress-369696-01.js new file mode 100644 index 000000000..985ae0f35 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-369696-01.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + q = []; + q.__defineGetter__("0", q.toString); + q[2] = q; + assertEq(q.toSource(), "[\"\", , []]", "wrong string"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-369696-02.js b/js/src/tests/js1_5/extensions/regress-369696-02.js new file mode 100644 index 000000000..1784d977c --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-369696-02.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + +// Bug 762908 requires us to set sp=null; +if (this.window) window.SpecialPowers = null; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function fun() {} + n = fun.prototype; + n.__defineGetter__("prototype", n.toSource); + p = n.__lookupGetter__("prototype"); + n = p; + + assertEq(n, Object.prototype.toSource); + assertEq(p, Object.prototype.toSource); + + n["prototype"] = [n]; + n = p; + + assertEq(n, Object.prototype.toSource); + assertEq(p, Object.prototype.toSource); + + p2 = n["prototype"]; + + assertEq(Array.isArray(p2), true); + assertEq(p2[0], Object.prototype.toSource); + + n = p2; + + assertEq(n.toString, Array.prototype.toString); + n.__defineGetter__("0", n.toString); + n = p; + + assertEq(n, Object.prototype.toSource); + + n.call(this); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-369696-03.js b/js/src/tests/js1_5/extensions/regress-369696-03.js new file mode 100644 index 000000000..da52ab8d6 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-369696-03.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = [[[ { toSource: function() { gc(); }}]]]; + + var a = []; + a[0] = a; + a.toSource = a.toString; + Array.prototype.toSource.call(a); + +//cx->sharpObjectMap.depth == -2 + + (function() { + var tmp = []; + for (var i = 0; i != 30*1000; ++i) { + var tmp2 = []; + tmp.push(tmp2); + tmp2.toSource(); + } + })(); + + gc(); + x.toSource(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-372309.js b/js/src/tests/js1_5/extensions/regress-372309.js new file mode 100644 index 000000000..278ee0a89 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-372309.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 372309; +var summary = 'Root new array objects'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var width = 600; + var height = 600; + + var img1canvas = document.createElement("canvas"); + var img2canvas = document.createElement("canvas"); + + img1canvas.width = img2canvas.width = width; + img1canvas.height = img2canvas.height = height; + img1canvas.getContext("2d").getImageData(0, 0, width, height).data; + img2canvas.getContext("2d").getImageData(0, 0, width, height).data; + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + + exitFunc ('test'); +} + +if (typeof window != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + + window.addEventListener("load", test, false); +} +else +{ + reportCompare(expect, actual, summary); +} + diff --git a/js/src/tests/js1_5/extensions/regress-374589.js b/js/src/tests/js1_5/extensions/regress-374589.js new file mode 100644 index 000000000..829c5dcc3 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-374589.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 374589; +var summary = 'Do not assert decompiling try { } catch(x if true) { } ' + + 'catch(y) { } finally { this.a.b; }'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function () { + try { } catch(x if true) { } catch(y) { } finally { this.a.b; } }; + + expect = 'function () { try { } catch(x if true) { } catch(y) { } ' + + 'finally { this.a.b; } }'; + + actual = f + ''; + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-375183.js b/js/src/tests/js1_5/extensions/regress-375183.js new file mode 100644 index 000000000..e41751a1b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-375183.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375183; +var summary = '__noSuchMethod__ should not allocate beyond fp->script->depth'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = { get __noSuchMethod__() { + print("Executed"); + return new Object(); + }}; + + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':1'); + + obj = { __noSuchMethod__: {} }; + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':2'); + + obj = { } + obj.__noSuchMethod__ = {}; + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':3'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-375344.js b/js/src/tests/js1_5/extensions/regress-375344.js new file mode 100644 index 000000000..41d9eeb15 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-375344.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375344; +var summary = 'accessing prototype of DOM objects should throw catchable error'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof HTMLElement != 'undefined') +{ + expect = /TypeError/; + try + { + print(HTMLElement.prototype.nodeName); + } + catch(ex) + { + actual = ex + ''; + print(actual); + } + reportMatch(expect, actual, summary); +} +else +{ + expect = actual = 'Test can only run in a Gecko 1.9 browser or later.'; + print(actual); + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/js1_5/extensions/regress-375801.js b/js/src/tests/js1_5/extensions/regress-375801.js new file mode 100644 index 000000000..2ed40ae99 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-375801.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375801; +var summary = 'uneval should use "(void 0)" instead of "undefined"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '({a: (void 0)})' + actual = uneval({a: undefined}) + compareSource(expect, actual, summary + ': uneval'); + + expect = 'function() {({a: undefined});}'; + actual = (function() {({a: undefined});}).toString(); + compareSource(expect, actual, summary + ': toString'); + + expect = '(function () {({a: undefined});})'; + actual = (function () {({a: undefined});}).toSource(); + compareSource(expect, actual, summary + ': toSource'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-380581.js b/js/src/tests/js1_5/extensions/regress-380581.js new file mode 100644 index 000000000..504a6f79d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-380581.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 380581; +var summary = 'Incorrect uneval with setter in object literal'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '(function() { })'; + actual = uneval(eval("(function() { })")); + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-380889.js b/js/src/tests/js1_5/extensions/regress-380889.js new file mode 100644 index 000000000..b0e03d666 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-380889.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 380889; +var summary = 'Source disassembler assumes SRC_SWITCH has jump table'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(i) + { + switch(i){ + case 1: + case xyzzy: + } + } + + if (typeof dis != 'undefined') + { + dis(f); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-381211.js b/js/src/tests/js1_5/extensions/regress-381211.js new file mode 100644 index 000000000..079843336 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-381211.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 381211; +var summary = 'uneval with getter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '( { get x() {} } )'; + actual = uneval({get x(){}}); + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-381304.js b/js/src/tests/js1_5/extensions/regress-381304.js new file mode 100644 index 000000000..603b81fba --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-381304.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 381304; +var summary = 'getter/setter with keywords'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj; + + print('1'); + + obj = { + set inn(value) {this.for = value;}, + get inn() {return this.for;} + }; + + expect = '({get inn() { return this.for; }, set inn(value) { this.for = value; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 1'); + + print('2'); + + obj = { + set in(value) {this.for = value;}, + get in() {return this.for;} + }; + + expect = '({ get in() { return this.for; }, set in(value) { this.for = value; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 2'); + + print('3'); + + obj = { + set inn(value) {this.for = value;}, + get in() {return this.for;} + }; + + expect = '({ set inn(value) { this.for = value; }, get in() { return this.for; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 4'); + + print('4'); + + obj = { + set in(value) {this.for = value;}, + get inn() {return this.for;} + }; + + expect = ' ({ set in(value) { this.for = value; }, get inn() { return this.for; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 5'); + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-385134.js b/js/src/tests/js1_5/extensions/regress-385134.js new file mode 100644 index 000000000..041f4d6e7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-385134.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385134; +var summary = 'Do not crash with setter, watch, uneval'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof this.__defineSetter__ != 'undefined' && + typeof this.watch != 'undefined' && + typeof uneval != 'undefined') + { + try { + this.__defineSetter__(0, function(){}); + } catch (exc) { + // In the browser, this fails. Ignore the error. + } + this.watch(0, function(){}); + uneval(this); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-385393-02.js b/js/src/tests/js1_5/extensions/regress-385393-02.js new file mode 100644 index 000000000..a23efb5af --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-385393-02.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (4).__lookupGetter__("w"); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-385393-09.js b/js/src/tests/js1_5/extensions/regress-385393-09.js new file mode 100644 index 000000000..42834824a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-385393-09.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval("this.__defineSetter__('x', gc); this.watch('x', [].slice); x = 1;"); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-390597.js b/js/src/tests/js1_5/extensions/regress-390597.js new file mode 100644 index 000000000..9f8596adc --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-390597.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390597; +var summary = 'watch point + eval-as-setter allows access to dead JSStackFrame'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + try + { + var obj = this, args = null; + obj.__defineSetter__("evil", eval); + obj.watch("evil", function() { return "args = arguments;"; }); + obj.evil = null; + eval("print(args[0]);"); + } + catch(ex) + { + print('Caught ' + ex); + } + } + exploit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-390598.js b/js/src/tests/js1_5/extensions/regress-390598.js new file mode 100644 index 000000000..46167bc81 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-390598.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390598; +var summary = 'array_length_setter is exploitable'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var fun = function () {}; + fun.__proto__ = []; + fun.length = 0x50505050 >> 1; + fun(); + } + exploit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-394967.js b/js/src/tests/js1_5/extensions/regress-394967.js new file mode 100644 index 000000000..e1ed16af7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-394967.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 394967; +var summary = 'Do not assert: !vp[1].isPrimitive()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof evalcx == 'undefined') + { + print('Skipping. This test requires evalcx.'); + } + else + { + var sandbox = evalcx(""); + try + { + evalcx("(1)()", sandbox); + } + catch(ex) + { + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-396326.js b/js/src/tests/js1_5/extensions/regress-396326.js new file mode 100644 index 000000000..4c927b44e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-396326.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396326; +var summary = 'Do not assert trying to disassemble get(var|arg) prop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof dis == 'undefined') + { + print('disassembly not supported. test skipped.'); + reportCompare(expect, actual, summary); + } + else + { + function f1() { var v; return v.prop }; + dis(f1); + reportCompare(expect, actual, summary + + ': function f1() { var v; return v.prop };'); + + function f2(arg) { return arg.prop }; + dis(f2); + reportCompare(expect, actual, summary + + ': function f2(arg) { return arg.prop };'); + + function f3() { return this.prop }; + dis(f3); + reportCompare(expect, actual, summary + + ': function f3() { return this.prop };'); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-406572.js b/js/src/tests/js1_5/extensions/regress-406572.js new file mode 100644 index 000000000..4911d05bc --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-406572.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 406572; +var summary = 'JSOP_CLOSURE unconditionally replaces properties of the variable object - Browser only'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window != 'undefined') +{ + try { + actual = "FAIL: Unexpected exception thrown"; + + var win = window; + var windowString = String(window); + window = 1; + reportCompare(windowString, String(window), "window should be readonly"); + + if (1) + function window() { return 1; } + + // We should reach this line without throwing. Annex B means the + // block-scoped function above gets an assignment to 'window' in the + // nearest 'var' environment, but since 'window' is read-only, the + // assignment silently fails. + actual = ""; + + // The test harness might rely on window having its original value: + // restore it. + window = win; + } catch (e) { + } +} +else +{ + expect = actual = 'Test can only run in a Gecko 1.9 browser or later.'; + print(actual); +} +reportCompare(expect, actual, summary); + + diff --git a/js/src/tests/js1_5/extensions/regress-407501.js b/js/src/tests/js1_5/extensions/regress-407501.js new file mode 100644 index 000000000..444f76e11 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-407501.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407501; +var summary = 'JSOP_NEWINIT lacks SAVE_SP_AND_PC '; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof gczeal == 'function') + { + gczeal(2); + } + + var a = [[[[[[[0]]]]]]]; + if (uneval(a).length == 0) + throw "Unexpected result"; + + if (typeof gczeal == 'function') + { + gczeal(0); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/js/src/tests/js1_5/extensions/regress-407720.js b/js/src/tests/js1_5/extensions/regress-407720.js new file mode 100644 index 000000000..9ecfedfce --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-407720.js @@ -0,0 +1,52 @@ +// |reftest| skip-if(!xulRuntime.shell) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407720; +var summary = 'js_FindClassObject causes crashes with getter/setter - Browser only'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// stop the test after 60 seconds +var start = new Date(); + +if (typeof document != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + document.write('<iframe onload="onLoad()"><\/iframe>'); +} +else +{ + actual = 'No Crash'; + reportCompare(expect, actual, summary); +} + +function onLoad() +{ + + if ( (new Date() - start) < 60*1000) + { + var x = frames[0].Window.prototype; + x.a = x.b = x.c = 1; + x.__defineGetter__("HTML document.all class", function() {}); + frames[0].document.all; + + // retry + frames[0].location = "about:blank"; + } + else + { + actual = 'No Crash'; + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + } +} diff --git a/js/src/tests/js1_5/extensions/regress-412926.js b/js/src/tests/js1_5/extensions/regress-412926.js new file mode 100644 index 000000000..4ab3e671b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-412926.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 412926; +var summary = 'JS_ValueToId(cx, JSVAL_NULL) should return atom for "null" string'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + actual = expect = 'No Errors'; + + var obj = { 'null': 1 }; + + var errors = []; + + if (!obj.hasOwnProperty(null)) + errors.push('null property is not owned'); + + if (!obj.propertyIsEnumerable(null)) + errors.push('null property is not enumerable'); + + var getter_was_called = false; + obj.__defineGetter__(null, function() { getter_was_called = true; return 1; }); + obj['null']; + + if (!getter_was_called) + errors.push('getter was not assigned to the null property'); + + var setter_was_called = false; + obj.__defineSetter__(null, function() { setter_was_called = true; }); + obj['null'] = 2; + + if (!setter_was_called) + errors.push('setter was not assigned to the null property'); + + if (errors.length) + actual = errors.join('; '); + + gc(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-414755.js b/js/src/tests/js1_5/extensions/regress-414755.js new file mode 100644 index 000000000..7a4affe27 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-414755.js @@ -0,0 +1,54 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 414755; +var summary = 'GC hazard due to missing SAVE_SP_AND_PC'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f() + { + var a = 1e10; + var b = 2e10; + var c = 3e10; + + return (a*2) * ((b*2) * c); + } + + if (typeof gczeal == 'function') + { + expect = f(); + + gczeal(2); + + actual = f(); + } + else + { + expect = actual = 'Test requires gczeal, skipped.'; + } + + if (typeof gczeal == 'function') + { + gczeal(0); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-416354.js b/js/src/tests/js1_5/extensions/regress-416354.js new file mode 100644 index 000000000..21432585e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-416354.js @@ -0,0 +1,48 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416354; +var summary = 'GC hazard due to missing SAVE_SP_AND_PC'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(a, b, c) + { + return (-a) * ((-b) * (-c)); + } + + if (typeof gczeal == 'function') + { + expect = f(1.5, 1.25, 1.125); + gczeal(2); + actual = f(1.5, 1.25, 1.125); + } + else + { + expect = actual = 'Test requires gczeal, skipped.'; + } + + if (typeof gczeal == 'function') + { + gczeal(0); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-416460.js b/js/src/tests/js1_5/extensions/regress-416460.js new file mode 100644 index 000000000..7131f0217 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-416460.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416460; +var summary = 'Do not assert: SCOPE_GET_PROPERTY(OBJ_SCOPE(pobj), ATOM_TO_JSID(atom))'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /a/.__proto__.__proto__ = { "2": 3 }; + var b = /b/; + b["2"]; + b["2"]; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-416834.js b/js/src/tests/js1_5/extensions/regress-416834.js new file mode 100644 index 000000000..ffd145cf3 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-416834.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416834; +var summary = 'Do not assert: !entry || entry->kpc == ((PCVCAP_TAG(entry->vcap) > 1) ? (jsbytecode *) JSID_TO_ATOM(id) : cx->fp->pc)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__proto__.x = eval; +for (i = 0; i < 16; ++i) + delete eval; +(function w() { x = 1; })(); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-418730.js b/js/src/tests/js1_5/extensions/regress-418730.js new file mode 100644 index 000000000..4c7d9d26f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-418730.js @@ -0,0 +1,32 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418730; +var summary = 'export * should not halt script'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +for (var i = 0; i < 60; ++i) + this["v" + i] = true; + +expect = 'PASS'; +actual = 'FAIL'; + +try { + print("GO"); + export *; + print("PASS (1)"); +} catch(e) { + print("PASS (2)"); +} + +actual = 'PASS'; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-420612.js b/js/src/tests/js1_5/extensions/regress-420612.js new file mode 100644 index 000000000..a4491095e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-420612.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 420612; +var summary = 'Do not assert: obj == pobj'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = Object.create([]); +obj.unwatch("x"); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/js1_5/extensions/regress-420869-01.js b/js/src/tests/js1_5/extensions/regress-420869-01.js new file mode 100644 index 000000000..a3205dd13 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-420869-01.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 420869; +var summary = 'Throw too much recursion instead of script stack space quota'; +var actual = 'No Error'; +var expect = 'InternalError: too much recursion'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(i) { + if (i == 0) + return 1; + return i*f(i-1); + } + + try + { + f(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-421621.js b/js/src/tests/js1_5/extensions/regress-421621.js new file mode 100644 index 000000000..63532f485 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-421621.js @@ -0,0 +1,22 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 421621; +var summary = 'Do not assert with setter, export/import: (sprop)->slot != SPROP_INVALID_SLOT || !SPROP_HAS_STUB_SETTER(sprop)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var th = this; +this.__defineSetter__('x', function () {}); +export *; +import th.*; +x; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-422592.js b/js/src/tests/js1_5/extensions/regress-422592.js new file mode 100644 index 000000000..18f33d9eb --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-422592.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 422592; +var summary = 'js.c dis/dissrc should not kill script execution'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof dis == 'undefined') + { + expect = actual = 'Test requires function dis. Not tested'; + print(expect); + } + else + { + expect = 'Completed'; + actual = 'Not Completed'; + print('Before dis'); + try + { + dis(print); + } + catch(ex) + { + } + print('After dis'); + actual = 'Completed'; + } + reportCompare(expect, actual, summary); + + if (typeof dissrc == 'undefined') + { + expect = actual = 'Test requires function dissrc. Not tested'; + print(expect); + } + else + { + print('Before dissrc'); + expect = 'Completed'; + actual = 'Not Completed'; + try + { + dissrc(print); + } + catch(ex) + { + } + print('After dissrc'); + actual = 'Completed'; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-424683-01.js b/js/src/tests/js1_5/extensions/regress-424683-01.js new file mode 100644 index 000000000..8786aa319 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-424683-01.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 424683; +var summary = 'Throw too much recursion instead of script stack space quota'; +var actual = 'No Error'; +var expect = 'InternalError: too much recursion'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f() { f(); } + + try + { + f(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-426711.js b/js/src/tests/js1_5/extensions/regress-426711.js new file mode 100644 index 000000000..819aad1f9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-426711.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 426711; +var summary = 'Setting window.__count__ causes a crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window != 'undefined' && '__count__' in window) + { + window.__count__ = 0; + } + else + { + expect = actual = 'Test skipped. Requires window.__count__'; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-427196-01.js b/js/src/tests/js1_5/extensions/regress-427196-01.js new file mode 100644 index 000000000..8d622cf2a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-427196-01.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 427196; +var summary = 'Do not assert: OBJ_SCOPE(pobj)->object == pobj'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function boom() + { + var b = {}; + Array.__proto__ = b; + b.__proto__ = {}; + var c = {}; + c.__proto__ = []; + try { c.__defineSetter__("t", undefined); } catch(e) { } + c.__proto__ = Array; + try { c.__defineSetter__("v", undefined); } catch(e) { } + } + + boom(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-427196-02.js b/js/src/tests/js1_5/extensions/regress-427196-02.js new file mode 100644 index 000000000..2ae4c6121 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-427196-02.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 427196; +var summary = 'Do not assert: OBJ_SCOPE(pobj)->object == pobj'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function boom() + { + var c = {__proto__: []}; + var a = {__proto__: {__proto__: {}}}; + c.hasOwnProperty("t"); + c.__proto__ = a; + c.hasOwnProperty("v"); + } + + boom(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-427196-03.js b/js/src/tests/js1_5/extensions/regress-427196-03.js new file mode 100644 index 000000000..9e618ffab --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-427196-03.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 427196; +var summary = 'Do not assert: OBJ_SCOPE(pobj)->object == pobj'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var c = {__proto__: []}; + var a = {__proto__: {__proto__: {}}}; + c.hasOwnProperty; + c.__proto__ = a; + c.hasOwnProperty; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-429739.js b/js/src/tests/js1_5/extensions/regress-429739.js new file mode 100644 index 000000000..fd38b9efe --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-429739.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 429739; +var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_HAS_PRIVATE'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var actual; + try + { + var o = { __noSuchMethod__: Function }; + actual = (new o.y) + ''; + throw new Error("didn't throw, produced a value"); + } + catch(ex) + { + actual = ex; + } + + reportCompare("TypeError", actual.name, "bad error name"); + reportCompare(true, /is not a constructor/.test(actual), summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-432075.js b/js/src/tests/js1_5/extensions/regress-432075.js new file mode 100644 index 000000000..7fa63fed3 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-432075.js @@ -0,0 +1,25 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 432075; +var summary = 'A function decompiles as [object Function] after export/import'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var a = Function; +var t = this; +export *; +import t.*; +Function = a; + +expect = 'function anonymous() {}'; +actual = (new Function("")) + ''; + +compareSource(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-434837-01.js b/js/src/tests/js1_5/extensions/regress-434837-01.js new file mode 100644 index 000000000..571ed68d7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-434837-01.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 434837; +var summary = '|this| in accessors in prototype chain of array'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = true; + actual = null; + x = [ "one", "two" ]; + Array.prototype.__defineGetter__('test1', function() { actual = (this === x); }); + x.test1; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': x.test1'); + + try + { + expect = false; + actual = null; + Array.prototype.__defineGetter__('test2', function() { actual = (this === Array.prototype) }); + x.test2; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': x.test2'); + + Array.prototype.__defineGetter__('test3', function() { actual = (this === x) }); + Array.prototype.__defineSetter__('test3', function() { actual = (this === x) }); + + try + { + expect = true; + actual = null; + x.test3; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': x.test3 (1)'); + + try + { + expect = true; + actual = null; + x.test3 = 5; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': x.test3 = 5'); + + try + { + expect = true; + actual = null; + x.test3; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': x.test3 (2)'); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-435345-01.js b/js/src/tests/js1_5/extensions/regress-435345-01.js new file mode 100644 index 000000000..28beab473 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-435345-01.js @@ -0,0 +1,100 @@ +// |reftest| fails +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 435345; +var summary = 'Watch the length property of arrays'; +var actual = ''; +var expect = ''; + +// see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Object:watch + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var arr; + + try + { + expect = 'watcher: propname=length, oldval=0, newval=1; '; + actual = ''; + arr = []; + arr.watch('length', watcher); + arr[0] = '0'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 1'); + + try + { + expect = 'watcher: propname=length, oldval=1, newval=2; ' + + 'watcher: propname=length, oldval=2, newval=2; '; + actual = ''; + arr.push(5); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 2'); + + try + { + expect = 'watcher: propname=length, oldval=2, newval=1; '; + actual = ''; + arr.pop(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 3'); + + try + { + expect = 'watcher: propname=length, oldval=1, newval=2; '; + actual = ''; + arr.length++; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 4'); + + try + { + expect = 'watcher: propname=length, oldval=2, newval=5; '; + actual = ''; + arr.length = 5; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 5'); + + exitFunc ('test'); +} + +function watcher(propname, oldval, newval) +{ + actual += 'watcher: propname=' + propname + ', oldval=' + oldval + + ', newval=' + newval + '; '; + + return newval; +} + diff --git a/js/src/tests/js1_5/extensions/regress-435497-01.js b/js/src/tests/js1_5/extensions/regress-435497-01.js new file mode 100644 index 000000000..524e48bb0 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-435497-01.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 435497; +var summary = 'Do not assert op2 == JSOP_INITELEM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('(function() { x, x setter = 0, y; const x; })();'); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-435497-02.js b/js/src/tests/js1_5/extensions/regress-435497-02.js new file mode 100644 index 000000000..a61fdaa20 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-435497-02.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 435497; +var summary = 'Do not assert op2 == JSOP_INITELEM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('(function() { x setter = 0, y; const x; })();'); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-435497-03.js b/js/src/tests/js1_5/extensions/regress-435497-03.js new file mode 100644 index 000000000..619ea6473 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-435497-03.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 435497; +var summary = 'Do not assert op2 == JSOP_INITELEM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('(function() { x getter= function(){} ; var x5, x = 0x99; })();'); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-436741.js b/js/src/tests/js1_5/extensions/regress-436741.js new file mode 100644 index 000000000..be85e5a8d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-436741.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 436741; +var summary = 'Do not assert: OBJ_IS_NATIVE(obj)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + print('This test is only meaningful in the browser.'); + } + else + { + try { window.__proto__.__proto__ = [{}]; } catch (e) {} + for (var j in window); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-437288-01.js b/js/src/tests/js1_5/extensions/regress-437288-01.js new file mode 100644 index 000000000..5a8ea6e38 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-437288-01.js @@ -0,0 +1,29 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 437288; +var summary = 'for loop turning into a while loop'; +var actual = 'No Hang'; +var expect = 'No Hang'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { const x = 1; for (x in null); })(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-44009.js b/js/src/tests/js1_5/extensions/regress-44009.js new file mode 100644 index 000000000..def7fb679 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-44009.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 Feb 2001 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=44009 + * + * SUMMARY: Testing that we don't crash on obj.toSource() + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 44009; +var summary = "Testing that we don't crash on obj.toSource()"; +var obj1 = {}; +var sToSource = ''; +var self = this; //capture a reference to the global JS object - + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj2 = {}; + + // test various objects and scopes - + testThis(self); + testThis(this); + testThis(obj1); + testThis(obj2); + + reportCompare('No Crash', 'No Crash', ''); + + exitFunc ('test'); +} + + +// We're just testing that we don't crash by doing this - +function testThis(obj) +{ + sToSource = obj.toSource(); + obj.prop = obj; + sToSource = obj.toSource(); +} diff --git a/js/src/tests/js1_5/extensions/regress-443569.js b/js/src/tests/js1_5/extensions/regress-443569.js new file mode 100644 index 000000000..a0d3beb87 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-443569.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 443569; +var summary = 'Do not assert: OBJ_IS_NATIVE(obj)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + + window.addEventListener("load", boom, false); +} +else +{ + reportCompare(expect, actual, summary); +} + +function boom() +{ + var r = RegExp.prototype; + r["-1"] = 0; + Array.prototype.__proto__ = r; + []["-1"]; + + reportCompare(expect, actual, summary); + + gDelayTestDriverEnd = false; + jsTestDriverEnd(); +} + + diff --git a/js/src/tests/js1_5/extensions/regress-446386.js b/js/src/tests/js1_5/extensions/regress-446386.js new file mode 100644 index 000000000..b176d9922 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-446386.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 446386; +var summary = 'Do not crash throwing error without compiler pseudo-frame'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof evalcx == 'undefined') + { + print(expect = actual = 'Test skipped. evalcx required.'); + } + else { + try + { + try { + evalcx("."); + throw "must throw"; + } catch (e) { + if (e.name != "SyntaxError") + throw e; + } + } + catch(ex) + { + actual = ex + ''; + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-452168.js b/js/src/tests/js1_5/extensions/regress-452168.js new file mode 100644 index 000000000..20c33f5be --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-452168.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452168; +var summary = 'Do not crash with gczeal 2, JIT: @ avmplus::List or @ nanojit::LirBuffer::validate'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof gczeal == 'undefined') + { + expect = actual = 'Test requires gczeal, skipped.'; + } + else + { + // Enumerate the global once before we turn on gczeal, so we're not + // trying to do all the enumerate hook object creation with a gc on + // every object, because that makes tests time out. + for (z in this); + gczeal(2); + + var a, b; gczeal(2); (function() { for (var p in this) { } })(); + + gczeal(0); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-452178.js b/js/src/tests/js1_5/extensions/regress-452178.js new file mode 100644 index 000000000..9f69fdebe --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-452178.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452178; +var summary = 'Do not assert with JIT: !(sprop->attrs & JSPROP_SHARED)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + Object.defineProperty(this, "q", { get: function(){}, enumerable: true, configurable: true }); + for (var j = 0; j < 4; ++j) q = 1; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-452329.js b/js/src/tests/js1_5/extensions/regress-452329.js new file mode 100644 index 000000000..40f235a59 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-452329.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452329; +var summary = 'Do not assert: *data->pc == JSOP_CALL || *data->pc == JSOP_NEW'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + this.__defineGetter__("x", "".match); if (x) 3; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-452338.js b/js/src/tests/js1_5/extensions/regress-452338.js new file mode 100644 index 000000000..9b2203702 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-452338.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452338; +var summary = 'Do not assert with JIT: obj2 == obj'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 4; ++j) __count__ = 3; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-452565.js b/js/src/tests/js1_5/extensions/regress-452565.js new file mode 100644 index 000000000..6ca0e87c4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-452565.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452565; +var summary = 'Do not assert with JIT: !(sprop->attrs & JSPROP_READONLY)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var c = undefined; (function() { for (var j=0;j<5;++j) { c = 1; } })(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-453249.js b/js/src/tests/js1_5/extensions/regress-453249.js new file mode 100644 index 000000000..910353da9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-453249.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453249; +var summary = 'Do not assert with JIT: s0->isQuad()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +this.__proto__.a = 3; for (var j = 0; j < 4; ++j) { [a]; } + +this.a = 3; for (var j = 0; j < 4; ++j) { [a]; } + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-454040.js b/js/src/tests/js1_5/extensions/regress-454040.js new file mode 100644 index 000000000..63b5e1488 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-454040.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454040; +var summary = 'Do not crash @ js_ComputeFilename'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + this.__defineGetter__("x", Function); + this.__defineSetter__("x", Function); + this.watch("x", x.__proto__); + x = 1; +} +catch(ex) +{ +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-454142.js b/js/src/tests/js1_5/extensions/regress-454142.js new file mode 100644 index 000000000..05f331278 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-454142.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454142; +var summary = 'Do not crash with gczeal, setter, watch'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.watch("x", function(){}); +delete x; +if (typeof gczeal == 'function') +{ + gczeal(2); +} + +this.__defineSetter__("x", function(){}); + +if (typeof gczeal == 'function') +{ + gczeal(0); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-454704.js b/js/src/tests/js1_5/extensions/regress-454704.js new file mode 100644 index 000000000..e9339e4b9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-454704.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454704; +var summary = 'Do not crash with defineGetter and XPC wrapper'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof XPCSafeJSObjectWrapper != 'undefined' && typeof document != 'undefined') + { + gDelayTestDriverEnd = true; + document.addEventListener('load', boom, true); + } + else + { + print(expect = actual = 'Test requires browser.'); + reportCompare(expect, actual, summary); + } + exitFunc ('test'); +} + +function boom() +{ + try + { + var a = []; + g = []; + g.__defineGetter__("f", g.toSource); + a[0] = g; + a[1] = XPCSafeJSObjectWrapper(a); + print("" + a); + } + catch(ex) + { + } + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + reportCompare(expect, actual, summary); +} + diff --git a/js/src/tests/js1_5/extensions/regress-455380.js b/js/src/tests/js1_5/extensions/regress-455380.js new file mode 100644 index 000000000..f0405621d --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-455380.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455380; +var summary = 'Do not assert with JIT: !lhs->isQuad() && !rhs->isQuad()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +const IS_TOKEN_ARRAY = + [0, 0, 0, 0, 0, 0, 0, 0, // 0 + 0, 0, 0, 0, 0, 0, 0, 0, // 8 + 0, 0, 0, 0, 0, 0, 0, 0, // 16 + 0, 0, 0, 0, 0, 0, 0, 0, // 24 + + 0, 1, 0, 1, 1, 1, 1, 1, // 32 + 0, 0, 1, 1, 0, 1, 1, 0, // 40 + 1, 1, 1, 1, 1, 1, 1, 1, // 48 + 1, 1, 0, 0, 0, 0, 0, 0, // 56 + + 0, 1, 1, 1, 1, 1, 1, 1, // 64 + 1, 1, 1, 1, 1, 1, 1, 1, // 72 + 1, 1, 1, 1, 1, 1, 1, 1, // 80 + 1, 1, 1, 0, 0, 0, 1, 1, // 88 + + 1, 1, 1, 1, 1, 1, 1, 1, // 96 + 1, 1, 1, 1, 1, 1, 1, 1, // 104 + 1, 1, 1, 1, 1, 1, 1, 1, // 112 + 1, 1, 1, 0, 1, 0, 1]; // 120 + +const headerUtils = { +normalizeFieldName: function(fieldName) +{ + if (fieldName == "") + throw "error: empty string"; + + for (var i = 0, sz = fieldName.length; i < sz; i++) + { + if (!IS_TOKEN_ARRAY[fieldName.charCodeAt(i)]) + { + throw (fieldName + " is not a valid header field name!"); + } + } + + return fieldName.toLowerCase(); +} +}; + +headerUtils.normalizeFieldName("Host"); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-455408.js b/js/src/tests/js1_5/extensions/regress-455408.js new file mode 100644 index 000000000..358f6ed5b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-455408.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455408; +var summary = 'Do not assert with JIT: "Should not move data from GPR to XMM": false'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (var j = 0; j < 5; ++j) { if (({}).__proto__ = 1) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-455413.js b/js/src/tests/js1_5/extensions/regress-455413.js new file mode 100644 index 000000000..d00ab135b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-455413.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455413; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +this.watch('x', Math.pow); (function() { for(var j=0;j<4;++j){x=1;} })(); + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-459606.js b/js/src/tests/js1_5/extensions/regress-459606.js new file mode 100644 index 000000000..926e1eead --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-459606.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459606; +var summary = '((0.1).toFixed()).toSource()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '(new String("0"))'; + actual = ((0.1).toFixed()).toSource(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-462734-02.js b/js/src/tests/js1_5/extensions/regress-462734-02.js new file mode 100644 index 000000000..f7ccb5977 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-462734-02.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462734; +var summary = 'Do not assert: pobj_ == obj2'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + for (x in function(){}) ([]); + this.__defineGetter__("x", Function); + var obj = Object.create(x); + obj.prototype += []; +} +catch(ex) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-462734-03.js b/js/src/tests/js1_5/extensions/regress-462734-03.js new file mode 100644 index 000000000..c350154fc --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-462734-03.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462734; +var summary = 'Do not assert: pobj_ == obj2'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + Function.prototype.prototype; + var obj = Object.create(Function()); + obj.prototype = obj.prototype; +} +catch(ex) +{ +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-462734-04.js b/js/src/tests/js1_5/extensions/regress-462734-04.js new file mode 100644 index 000000000..a7fbe8f07 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-462734-04.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462734; +var summary = 'Do not assert: pobj_ == obj2'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj; +try +{ + Function.prototype.prototype = function() { return 42; } + obj = Object.create(Function()); + obj.prototype = obj.prototype; +} +catch(ex) +{ +} + +expect = 'object'; +actual = typeof obj.prototype; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-465145.js b/js/src/tests/js1_5/extensions/regress-465145.js new file mode 100644 index 000000000..84f81703b --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-465145.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465145; +var summary = 'Do not crash with watched defined setter'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +this.__defineSetter__("x", function(){}); +this.watch("x", function(){}); +y = this; +for (var z = 0; z < 2; ++z) { x = y }; +this.__defineSetter__("x", function(){}); +for (var z = 0; z < 2; ++z) { x = y }; + + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-465276.js b/js/src/tests/js1_5/extensions/regress-465276.js new file mode 100644 index 000000000..960590d74 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-465276.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465276; +var summary = '((1 * (1))|""'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + expect = '[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]'; + empty = []; + out = []; + for (var j=0;j<10;++j) { empty[42]; out.push((1 * (1)) | ""); } + print(actual = uneval(out)); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-469625.js b/js/src/tests/js1_5/extensions/regress-469625.js new file mode 100644 index 000000000..fef1c0e12 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-469625.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469625; +var summary = 'TM: Do not crash @ js_String_getelem'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + [].__proto__[0] = 'a'; + for (var j = 0; j < 3; ++j) [[, ]] = [,]; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-469761.js b/js/src/tests/js1_5/extensions/regress-469761.js new file mode 100644 index 000000000..c5c9cd9d7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-469761.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469761; +var summary = 'TM: Do not assert: STOBJ_GET_SLOT(callee_obj, JSSLOT_PRIVATE).isInt32()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var o = { __proto__: function(){} }; + for (var j = 0; j < 3; ++j) { try { o.call(3); } catch (e) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-472599.js b/js/src/tests/js1_5/extensions/regress-472599.js new file mode 100644 index 000000000..4cc260fd9 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-472599.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 472599; +var summary = 'Do not assert: STOBJ_GET_SLOT(callee_obj, JSSLOT_PRIVATE).isInt32()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var a = (function(){}).prototype; + a.__proto__ = a.toString; + for (var i = 0; i < 4; ++i) { try{ a.call({}); } catch(e) { } } + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-472787.js b/js/src/tests/js1_5/extensions/regress-472787.js new file mode 100755 index 000000000..d3196f05f --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-472787.js @@ -0,0 +1,31 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 472787; +var summary = 'Do not hang with gczeal, watch and concat'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__defineSetter__("x", Math.sin); +this.watch("x", '' .concat); + +if (typeof gczeal == 'function') +{ + gczeal(2); +} + +x = 1; + +if (typeof gczeal == 'function') +{ + gczeal(0); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-476447.js b/js/src/tests/js1_5/extensions/regress-476447.js new file mode 100644 index 000000000..5590445c4 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-476447.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 476447; +var summary = 'Array getter/setter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Array.prototype.__defineGetter__('lastElement',(function() { return this[this.length-1]})); + Array.prototype.__defineSetter__('lastElement',(function(num){this[this.length-1]=num})); + var testArr=[1,2,3,4]; + + expect = 4; + actual = testArr.lastElement; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-479487.js b/js/src/tests/js1_5/extensions/regress-479487.js new file mode 100644 index 000000000..a5d143f2e --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-479487.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 479487; +var summary = 'js_Array_dense_setelem can call arbitrary JS code'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + Array.prototype[1] = 2; + + Array.prototype.__defineSetter__(32, function() { print("Hello from arbitrary JS");}); + Array.prototype.__defineGetter__(32, function() { return 11; }); + + function f() + { + var a = []; + for (var i = 0; i != 10; ++i) { + a[1 << i] = 9999; + } + return a; + } + + f(); + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-479551.js b/js/src/tests/js1_5/extensions/regress-479551.js new file mode 100644 index 000000000..703ea5b9a --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-479551.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 479551; +var summary = 'Do not assert: (cx)->requestDepth || (cx)->thread == (cx)->runtime->gcThread'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof shapeOf != 'function') + { + print(expect = actual = 'Test skipped: requires shell'); + } + else + { + + var o = {a:3, b:2}; + shapeOf(o); + var p = {}; + p.a =3; + p.b=2; + shapeOf(p); + + + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-480579.js b/js/src/tests/js1_5/extensions/regress-480579.js new file mode 100644 index 000000000..5f3295f18 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-480579.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 480579; +var summary = 'Do not assert: pobj_ == obj2'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '12'; + + a = {x: 1}; + b = {__proto__: a}; + c = {__proto__: b}; + for (i = 0; i < 2; i++) { + print(actual += c.x); + b.x = 2; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-481516.js b/js/src/tests/js1_5/extensions/regress-481516.js new file mode 100644 index 000000000..ab2c257c6 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-481516.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 481516; +var summary = 'TM: pobj_ == obj2'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '1111222'; + + a = {x: 1}; + b = {__proto__: a}; + c = {__proto__: b}; + objs = [{__proto__: a}, {__proto__: a}, {__proto__: a}, b, {__proto__: a}, + {__proto__: a}]; + for (i = 0; i < 6; i++) { + print(actual += ""+c.x); + objs[i].x = 2; + } + print(actual += c.x); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-488995.js b/js/src/tests/js1_5/extensions/regress-488995.js new file mode 100644 index 000000000..f7abbe439 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-488995.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 488995; +var summary = 'Do not crash with watch, __defineSetter__ on svg'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof document == 'undefined') + { + print('Test skipped: requires browser.'); + } + else + { + try + { + var o=document.createElementNS("http://www.w3.org/2000/svg", "svg"); + var p=o.y; + p.watch('animVal', function(id, oldvar, newval) {} ); + p.type='xxx'; + p.__defineSetter__('animVal', function() {}); + p.animVal=0; + } + catch(ex) + { + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-50447-1.js b/js/src/tests/js1_5/extensions/regress-50447-1.js new file mode 100644 index 000000000..688692b09 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-50447-1.js @@ -0,0 +1,173 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * SUMMARY: New properties fileName, lineNumber have been added to Error objects + * in SpiderMonkey. These are non-ECMA extensions and do not exist in Rhino. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=50447 + * + * 2005-04-05 Modified by bclary to support changes to error reporting + * which set default values for the error's fileName and + * lineNumber properties. + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 50447; +var summary = 'Test (non-ECMA) Error object properties fileName, lineNumber'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + testRealError(); + test1(); + test2(); + test3(); + test4(); + + exitFunc('test'); +} + +// Normalize filenames so this test can work on Windows. This +// function is also used on strings that contain filenames. +function normalize(filename) +{ + // Also convert double-backslash to single-slash to handle + // escaped filenames in string literals. + return filename.replace(/\\{1,2}/g, '/'); +} + +function testRealError() +{ + /* throw a real error, and see what it looks like */ + enterFunc ("testRealError"); + + try + { + blabla; + } + catch (e) + { + if (e.fileName.search (/-50447-1\.js$/i) == -1) + reportCompare('PASS', 'FAIL', "expected fileName to end with '-50447-1.js'"); + + reportCompare(60, e.lineNumber, + "lineNumber property returned unexpected value."); + } + + exitFunc ("testRealError"); +} + + +function test1() +{ + /* generate an error with msg, file, and lineno properties */ + enterFunc ("test1"); + + var e = new InternalError ("msg", "file", 2); + reportCompare ("(new InternalError(\"msg\", \"file\", 2))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (2, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test1"); +} + + +function test2() +{ + /* generate an error with only msg property */ + enterFunc ("test2"); + + /* note this test incorporates the path to the + test file and assumes the path to the test case + is a subdirectory of the directory containing jsDriver.pl + */ + var expectedLine = 109; + var expectedFileName = 'js1_5/extensions/regress-50447-1.js'; + if (typeof document != "undefined") { + expectedFileName = document.location.href. + replace(/[^\/]*(\?.*)$/, '') + + expectedFileName; + } + var e = new InternalError ("msg"); + reportCompare ("(new InternalError(\"msg\", \"" + + expectedFileName + "\", " + expectedLine + "))", + normalize(e.toSource()), + "toSource() returned unexpected result."); + reportCompare (expectedFileName, normalize(e.fileName), + "fileName property returned unexpected value."); + reportCompare (expectedLine, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test2"); +} + + +function test3() +{ + /* generate an error with only msg and lineNo properties */ + + /* note this test incorporates the path to the + test file and assumes the path to the test case + is a subdirectory of the directory containing jsDriver.pl + */ + + enterFunc ("test3"); + + var expectedFileName = 'js1_5/extensions/regress-50447-1.js'; + if (typeof document != "undefined") { + expectedFileName = document.location.href. + replace(/[^\/]*(\?.*)$/, '') + + expectedFileName; + } + + var e = new InternalError ("msg"); + e.lineNumber = 10; + reportCompare ("(new InternalError(\"msg\", \"" + + expectedFileName + "\", 10))", + normalize(e.toSource()), + "toSource() returned unexpected result."); + reportCompare (expectedFileName, normalize(e.fileName), + "fileName property returned unexpected value."); + reportCompare (10, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test3"); +} + + +function test4() +{ + /* generate an error with only msg and filename properties */ + enterFunc ("test4"); + + var expectedLine = 163; + + var e = new InternalError ("msg", "file"); + reportCompare ("(new InternalError(\"msg\", \"file\", " + expectedLine + "))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (expectedLine, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test4"); +} diff --git a/js/src/tests/js1_5/extensions/regress-50447.js b/js/src/tests/js1_5/extensions/regress-50447.js new file mode 100644 index 000000000..32044a8ed --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-50447.js @@ -0,0 +1,134 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * SUMMARY: New properties fileName, lineNumber have been added to Error objects + * in SpiderMonkey. These are non-ECMA extensions and do not exist in Rhino. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=50447 + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 50447; +var summary = 'Test (non-ECMA) Error object properties fileName, lineNumber'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + testRealError(); + test1(); + test2(); + test3(); + test4(); + + exitFunc('test'); +} + + +function testRealError() +{ + /* throw a real error, and see what it looks like */ + enterFunc ("testRealError"); + + try + { + blabla; + } + catch (e) + { + if (e.fileName.search (/-50447\.js$/i) == -1) + reportCompare('PASS', 'FAIL', + "expected fileName to end with '-50447.js'"); + + reportCompare (83, e.lineNumber, + "lineNumber property returned unexpected value."); + } + + exitFunc ("testRealError"); +} + + +function test1() +{ + /* generate an error with msg, file, and lineno properties */ + enterFunc ("test1"); + + var e = new InternalError ("msg", "file", 2); + reportCompare ("(new InternalError(\"msg\", \"file\", 2))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (2, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test1"); +} + + +function test2() +{ + /* generate an error with only msg property */ + enterFunc ("test2"); + + var e = new InternalError ("msg"); + reportCompare ("(new InternalError(\"msg\", \"\"))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("", e.fileName, + "fileName property returned unexpected value."); + reportCompare (0, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test2"); +} + + +function test3() +{ + /* generate an error with only msg and lineNo properties */ + enterFunc ("test3"); + + var e = new InternalError ("msg"); + e.lineNumber = 10; + reportCompare ("(new InternalError(\"msg\", \"\", 10))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("", e.fileName, + "fileName property returned unexpected value."); + reportCompare (10, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test3"); +} + + +function test4() +{ + /* generate an error with only msg and filename properties */ + enterFunc ("test4"); + + var e = new InternalError ("msg", "file"); + reportCompare ("(new InternalError(\"msg\", \"file\"))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (0, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test4"); +} diff --git a/js/src/tests/js1_5/extensions/regress-543839.js b/js/src/tests/js1_5/extensions/regress-543839.js new file mode 100644 index 000000000..ce968bfba --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-543839.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Igor Bukanov + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 543839; +var summary = 'js_GetMutableScope caller must lock the object'; +var actual; +var expect = 1; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function test() +{ + for (var i = 0; i != 100; ++i) + var tmp = { a: 1 }; + return 1; +} + +if (typeof evalcx == 'undefined') +{ + print('Skipping. This test requires evalcx.'); + actual = expect; +} else { + test(); + test(); + test(); + actual = evalcx("test()", this); +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/extensions/regress-90596-001.js b/js/src/tests/js1_5/extensions/regress-90596-001.js new file mode 100644 index 000000000..9813b31d7 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-90596-001.js @@ -0,0 +1,265 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 August 2001 + * + * SUMMARY: A [DontEnum] prop, if overridden, should appear in toSource(). + * See http://bugzilla.mozilla.org/show_bug.cgi?id=90596 + * + * NOTE: some inefficiencies in the test are made for the sake of readability. + * Sorting properties alphabetically is done for definiteness in comparisons. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 90596; +var summary = 'A [DontEnum] prop, if overridden, should appear in toSource()'; +var cnCOMMA = ','; +var cnLBRACE = '{'; +var cnRBRACE = '}'; +var cnLPAREN = '('; +var cnRPAREN = ')'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var obj = {}; + + +status = inSection(1); +obj = {toString:9}; +actual = obj.toSource(); +expect = '({toString:9})'; +addThis(); + +status = inSection(2); +obj = {hasOwnProperty:"Hi"}; +actual = obj.toSource(); +expect = '({hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(3); +obj = {toString:9, hasOwnProperty:"Hi"}; +actual = obj.toSource(); +expect = '({toString:9, hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(4); +obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}; +actual = obj.toSource(); +expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; +addThis(); + + +// TRY THE SAME THING IN EVAL CODE +var s = ''; + +status = inSection(5); +s = 'obj = {toString:9}'; +eval(s); +actual = obj.toSource(); +expect = '({toString:9})'; +addThis(); + +status = inSection(6); +s = 'obj = {hasOwnProperty:"Hi"}'; +eval(s); +actual = obj.toSource(); +expect = '({hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(7); +s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = obj.toSource(); +expect = '({toString:9, hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(8); +s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = obj.toSource(); +expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; +addThis(); + + +// TRY THE SAME THING IN FUNCTION CODE +function A() +{ + status = inSection(9); + var s = 'obj = {toString:9}'; + eval(s); + actual = obj.toSource(); + expect = '({toString:9})'; + addThis(); +} +A(); + +function B() +{ + status = inSection(10); + var s = 'obj = {hasOwnProperty:"Hi"}'; + eval(s); + actual = obj.toSource(); + expect = '({hasOwnProperty:"Hi"})'; + addThis(); +} +B(); + +function C() +{ + status = inSection(11); + var s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = obj.toSource(); + expect = '({toString:9, hasOwnProperty:"Hi"})'; + addThis(); +} +C(); + +function D() +{ + status = inSection(12); + var s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = obj.toSource(); + expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; + addThis(); +} +D(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Sort properties alphabetically - + */ +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = sortThis(actual); + expectedvalues[UBound] = sortThis(expect); + UBound++; +} + + +/* + * Takes string of form '({"c", "b", "a", 2})' and returns '({"a","b","c",2})' + */ +function sortThis(sList) +{ + sList = compactThis(sList); + sList = stripParens(sList); + sList = stripBraces(sList); + var arr = sList.split(cnCOMMA); + arr = arr.sort(); + var ret = String(arr); + ret = addBraces(ret); + ret = addParens(ret); + return ret; +} + + +/* + * Strips out any whitespace from the text - + */ +function compactThis(text) +{ + var charCode = 0; + var ret = ''; + + for (var i=0; i<text.length; i++) + { + charCode = text.charCodeAt(i); + + if (!isWhiteSpace(charCode)) + ret += text.charAt(i); + } + + return ret; +} + + +function isWhiteSpace(charCode) +{ + switch (charCode) + { + case (0x0009): + case (0x000B): + case (0x000C): + case (0x0020): + case (0x000A): // '\n' + case (0x000D): // '\r' + return true; + break; + + default: + return false; + } +} + + +/* + * strips off parens at beginning and end of text - + */ +function stripParens(text) +{ + // remember to escape the parens... + var arr = text.match(/^\((.*)\)$/); + + // defend against a null match... + if (arr != null && arr[1] != null) + return arr[1]; + return text; +} + + +/* + * strips off braces at beginning and end of text - + */ +function stripBraces(text) +{ + // remember to escape the braces... + var arr = text.match(/^\{(.*)\}$/); + + // defend against a null match... + if (arr != null && arr[1] != null) + return arr[1]; + return text; +} + + +function addBraces(text) +{ + return cnLBRACE + text + cnRBRACE; +} + + +function addParens(text) +{ + return cnLPAREN + text + cnRPAREN; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-90596-002.js b/js/src/tests/js1_5/extensions/regress-90596-002.js new file mode 100644 index 000000000..ccd267a11 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-90596-002.js @@ -0,0 +1,265 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 August 2001 + * + * SUMMARY: A [DontEnum] prop, if overridden, should appear in uneval(). + * See http://bugzilla.mozilla.org/show_bug.cgi?id=90596 + * + * NOTE: some inefficiencies in the test are made for the sake of readability. + * Sorting properties alphabetically is done for definiteness in comparisons. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 90596; +var summary = 'A [DontEnum] prop, if overridden, should appear in uneval()'; +var cnCOMMA = ','; +var cnLBRACE = '{'; +var cnRBRACE = '}'; +var cnLPAREN = '('; +var cnRPAREN = ')'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var obj = {}; + + +status = inSection(1); +obj = {toString:9}; +actual = uneval(obj); +expect = '({toString:9})'; +addThis(); + +status = inSection(2); +obj = {hasOwnProperty:"Hi"}; +actual = uneval(obj); +expect = '({hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(3); +obj = {toString:9, hasOwnProperty:"Hi"}; +actual = uneval(obj); +expect = '({toString:9, hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(4); +obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}; +actual = uneval(obj); +expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; +addThis(); + + +// TRY THE SAME THING IN EVAL CODE +var s = ''; + +status = inSection(5); +s = 'obj = {toString:9}'; +eval(s); +actual = uneval(obj); +expect = '({toString:9})'; +addThis(); + +status = inSection(6); +s = 'obj = {hasOwnProperty:"Hi"}'; +eval(s); +actual = uneval(obj); +expect = '({hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(7); +s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = uneval(obj); +expect = '({toString:9, hasOwnProperty:"Hi"})'; +addThis(); + +status = inSection(8); +s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; +eval(s); +actual = uneval(obj); +expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; +addThis(); + + +// TRY THE SAME THING IN FUNCTION CODE +function A() +{ + status = inSection(9); + var s = 'obj = {toString:9}'; + eval(s); + actual = uneval(obj); + expect = '({toString:9})'; + addThis(); +} +A(); + +function B() +{ + status = inSection(10); + var s = 'obj = {hasOwnProperty:"Hi"}'; + eval(s); + actual = uneval(obj); + expect = '({hasOwnProperty:"Hi"})'; + addThis(); +} +B(); + +function C() +{ + status = inSection(11); + var s = 'obj = {toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = uneval(obj); + expect = '({toString:9, hasOwnProperty:"Hi"})'; + addThis(); +} +C(); + +function D() +{ + status = inSection(12); + var s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}'; + eval(s); + actual = uneval(obj); + expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})'; + addThis(); +} +D(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Sort properties alphabetically - + */ +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = sortThis(actual); + expectedvalues[UBound] = sortThis(expect); + UBound++; +} + + +/* + * Takes string of form '({"c", "b", "a", 2})' and returns '({"a","b","c",2})' + */ +function sortThis(sList) +{ + sList = compactThis(sList); + sList = stripParens(sList); + sList = stripBraces(sList); + var arr = sList.split(cnCOMMA); + arr = arr.sort(); + var ret = String(arr); + ret = addBraces(ret); + ret = addParens(ret); + return ret; +} + + +/* + * Strips out any whitespace from the text - + */ +function compactThis(text) +{ + var charCode = 0; + var ret = ''; + + for (var i=0; i<text.length; i++) + { + charCode = text.charCodeAt(i); + + if (!isWhiteSpace(charCode)) + ret += text.charAt(i); + } + + return ret; +} + + +function isWhiteSpace(charCode) +{ + switch (charCode) + { + case (0x0009): + case (0x000B): + case (0x000C): + case (0x0020): + case (0x000A): // '\n' + case (0x000D): // '\r' + return true; + break; + + default: + return false; + } +} + + +/* + * strips off parens at beginning and end of text - + */ +function stripParens(text) +{ + // remember to escape the parens... + var arr = text.match(/^\((.*)\)$/); + + // defend against a null match... + if (arr != null && arr[1] != null) + return arr[1]; + return text; +} + + +/* + * strips off braces at beginning and end of text - + */ +function stripBraces(text) +{ + // remember to escape the braces... + var arr = text.match(/^\{(.*)\}$/); + + // defend against a null match... + if (arr != null && arr[1] != null) + return arr[1]; + return text; +} + + +function addBraces(text) +{ + return cnLBRACE + text + cnRBRACE; +} + + +function addParens(text) +{ + return cnLPAREN + text + cnRPAREN; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-96284-001.js b/js/src/tests/js1_5/extensions/regress-96284-001.js new file mode 100644 index 000000000..64a21f0e0 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-96284-001.js @@ -0,0 +1,148 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 03 September 2001 + * + * SUMMARY: Double quotes should be escaped in Error.prototype.toSource() + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96284 + * + * The real point here is this: we should be able to reconstruct an object + * from its toSource() property. We'll test this on various types of objects. + * + * Method: define obj2 = eval(obj1.toSource()) and verify that + * obj2.toSource() == obj1.toSource(). + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 96284; +var summary = 'Double quotes should be escaped in Error.prototype.toSource()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var obj1 = {}; +var obj2 = {}; +var cnTestString = '"This is a \" STUPID \" test string!!!"\\'; + + +// various NativeError objects - +status = inSection(1); +obj1 = Error(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(2); +obj1 = EvalError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(3); +obj1 = RangeError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(4); +obj1 = ReferenceError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(5); +obj1 = SyntaxError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(6); +obj1 = TypeError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(7); +obj1 = URIError(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + + +// other types of objects - +status = inSection(8); +obj1 = new String(cnTestString); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(9); +obj1 = {color:'red', texture:cnTestString, hasOwnProperty:42}; +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(10); +obj1 = function(x) {function g(y){return y+1;} return g(x);}; +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(11); +obj1 = new Number(eval('6')); +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(12); +obj1 = /ad;(lf)kj(2309\/\/)\/\//; +obj2 = eval(obj1.toSource()); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/regress-96284-002.js b/js/src/tests/js1_5/extensions/regress-96284-002.js new file mode 100644 index 000000000..7cecd2645 --- /dev/null +++ b/js/src/tests/js1_5/extensions/regress-96284-002.js @@ -0,0 +1,148 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 03 September 2001 + * + * SUMMARY: Double quotes should be escaped in uneval(new Error('""')) + * See http://bugzilla.mozilla.org/show_bug.cgi?id=96284 + * + * The real point here is this: we should be able to reconstruct an object + * obj from uneval(obj). We'll test this on various types of objects. + * + * Method: define obj2 = eval(uneval(obj1)) and verify that + * obj2.toSource() == obj1.toSource(). + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 96284; +var summary = 'Double quotes should be escaped in Error.prototype.toSource()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var obj1 = {}; +var obj2 = {}; +var cnTestString = '"This is a \" STUPID \" test string!!!"\\'; + + +// various NativeError objects - +status = inSection(1); +obj1 = Error(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(2); +obj1 = EvalError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(3); +obj1 = RangeError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(4); +obj1 = ReferenceError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(5); +obj1 = SyntaxError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(6); +obj1 = TypeError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(7); +obj1 = URIError(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + + +// other types of objects - +status = inSection(8); +obj1 = new String(cnTestString); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(9); +obj1 = {color:'red', texture:cnTestString, hasOwnProperty:42}; +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(10); +obj1 = function(x) {function g(y){return y+1;} return g(x);}; +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(11); +obj1 = new Number(eval('6')); +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + +status = inSection(12); +obj1 = /ad;(lf)kj(2309\/\/)\/\//; +obj2 = eval(uneval(obj1)); +actual = obj2.toSource(); +expect = obj1.toSource(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/extensions/scope-001.js b/js/src/tests/js1_5/extensions/scope-001.js new file mode 100644 index 000000000..b1982126a --- /dev/null +++ b/js/src/tests/js1_5/extensions/scope-001.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = '53268'; +var status = 'Testing scope after changing obj.__proto__'; +var expect= ''; +var actual = ''; +var obj = {}; + +Object.defineProperty(this, "five", { + value: 5, + enumerable: true, + writable: false +}); + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ("test"); + printBugNumber(BUGNUMBER); + printStatus (status); + + + status= 'Step 1: setting obj.__proto__ = global object'; + obj.__proto__ = this; + + actual = obj.five; + expect=5; + reportCompare (expect, actual, status); + + obj.five=1; + actual = obj.five; + expect=5; + reportCompare (expect, actual, status); + + + + status= 'Step 2: setting obj.__proto__ = null'; + obj.__proto__ = null; + + actual = obj.five; + expect=undefined; + reportCompare (expect, actual, status); + + obj.five=2; + actual = obj.five; + expect=2; + reportCompare (expect, actual, status); + + + + status= 'Step 3: setting obj.__proto__ to global object again'; + obj.__proto__ = this; + + actual = obj.five; + expect=2; //<--- (FROM STEP 2 ABOVE) + reportCompare (expect, actual, status); + + obj.five=3; + actual = obj.five; + expect=3; + reportCompare (expect, actual, status); + + + + status= 'Step 4: setting obj.__proto__ to null again'; + obj.__proto__ = null; + + actual = obj.five; + expect=3; //<--- (FROM STEP 3 ABOVE) + reportCompare (expect, actual, status); + + obj.five=4; + actual = obj.five; + expect=4; + reportCompare (expect, actual, status); + + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/extensions/shell.js b/js/src/tests/js1_5/extensions/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/extensions/shell.js diff --git a/js/src/tests/js1_5/extensions/toLocaleFormat-01.js b/js/src/tests/js1_5/extensions/toLocaleFormat-01.js new file mode 100644 index 000000000..02f269125 --- /dev/null +++ b/js/src/tests/js1_5/extensions/toLocaleFormat-01.js @@ -0,0 +1,230 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 291494; +var summary = 'Date.prototype.toLocaleFormat extension'; +var actual = ''; +var expect = ''; +var temp; + +/* + * SpiderMonkey only. + * + * When the output of toLocaleFormat exceeds 100 bytes toLocaleFormat + * defaults to using toString to produce the result. +*/ + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +var date = new Date("06/05/2005 00:00:00 GMT-0000"); + +expect = date.getTimezoneOffset() > 0 ? 'Sat' : 'Sun'; +actual = date.toLocaleFormat('%a'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%a")'); + +expect = date.getTimezoneOffset() > 0 ? 'Saturday' : 'Sunday'; +actual = date.toLocaleFormat('%A'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%A")'); + +expect = 'Jun'; +actual = date.toLocaleFormat('%b'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%b")'); + +expect = 'June'; +actual = date.toLocaleFormat('%B'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%B")'); + +expect = (date.getTimezoneOffset() > 0) ? '04' : '05'; +actual = date.toLocaleFormat('%d'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%d")'); + +expect = '0'; +actual = String((Number(date.toLocaleFormat('%H')) + + date.getTimezoneOffset()/60) % 24); +reportCompare(expect, actual, 'Date.toLocaleFormat(%H)'); + +expect = '12'; +actual = String(Number(date.toLocaleFormat('%I')) + + date.getTimezoneOffset()/60); +reportCompare(expect, actual, 'Date.toLocaleFormat(%I)'); + +expect = String(155 + ((date.getTimezoneOffset() > 0) ? 0 : 1)); +actual = date.toLocaleFormat('%j'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%j")'); + +expect = '06'; +actual = date.toLocaleFormat('%m'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%m")'); + +expect = '00'; +actual = date.toLocaleFormat('%M'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%M")'); + +expect = true; +temp = date.toLocaleFormat('%p'); +actual = temp == 'AM' || date.toLocaleFormat('%p') == 'PM'; +reportCompare(expect, actual, 'Date.toLocaleFormat("%p") is AM or PM'); + +expect = '00'; +actual = date.toLocaleFormat('%S'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%S")'); + +expect = String(22 + ((date.getTimezoneOffset() > 0) ? 0 : 1)); +actual = date.toLocaleFormat('%U'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%U")'); + +expect = String((6 + ((date.getTimezoneOffset() > 0) ? 0 : 1))%7); +actual = date.toLocaleFormat('%w'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%w")'); + +expect = '22'; +actual = date.toLocaleFormat('%W'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%W")'); + +expect = '05'; +actual = date.toLocaleFormat('%y'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%y")'); + +expect = '2005'; +actual = date.toLocaleFormat('%Y'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%Y")'); + +expect = '%'; +actual = date.toLocaleFormat('%%'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%%")'); + + +expect = '1899 99'; +temp='%Y %y'; +actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '1899189918991899189918991899189918991899189918991899189918991899189918991899189918991899'; +temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxx189918991899189918991899189918991899189918991899189918991899189918991899189918991899189918991899'; +temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = new Date(0, 0, 0, 13, 14, 15, 0).toString(); +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxxx189918991899189918991899189918991899'; +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + + +expect = '-51 49'; +temp = '%Y %y'; +actual = new Date(-51, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51'; +temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-51, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51'; +temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-51, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = new Date(-51, 0).toString(); +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-51, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + + +expect = '1851 51'; +temp = '%Y %y'; +actual = new Date(1851, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '1851185118511851185118511851185118511851185118511851185118511851185118511851185118511851'; +temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(1851, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxx185118511851185118511851185118511851185118511851185118511851185118511851185118511851185118511851'; +temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(1851, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = new Date(1851, 0).toString(); +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(1851, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + + +expect = '-1 99'; +temp = '%Y %y'; +actual = new Date(-1, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '-100 00'; +temp = '%Y %y'; +actual = new Date(-100, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '1900 00'; +temp = '%Y %y'; +actual = new Date(0, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '1901 01'; +temp = '%Y %y'; +actual = new Date(1, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '1970 70'; +temp = '%Y %y'; +actual = new Date(1970, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + + +expect = new Date(32767, 0).toString(); +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(32767, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767'; +temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(32767, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767'; +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(32767, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = new Date(32767, 0).toString(); +temp = 'xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(32767, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + + +expect = '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999'; +temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-9999, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999'; +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-9999, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); + +expect = new Date(-9999, 0).toString(); +temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y'; +actual = new Date(-9999, 0).toLocaleFormat(temp); +reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")'); diff --git a/js/src/tests/js1_5/extensions/toLocaleFormat-02.js b/js/src/tests/js1_5/extensions/toLocaleFormat-02.js new file mode 100644 index 000000000..8fb87a0fc --- /dev/null +++ b/js/src/tests/js1_5/extensions/toLocaleFormat-02.js @@ -0,0 +1,105 @@ +// |reftest| fails-if(xulRuntime.OS=="WINNT") skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 291494; +var summary = 'Date.prototype.toLocaleFormat extension'; +var actual = ''; +var expect = ''; +var temp; + +/* + * SpiderMonkey only. + * + * This test uses format strings which are not supported cross + * platform and are expected to fail on at least some platforms + * however they all currently pass on Linux (Fedora Core 6). They are + * included here in order to increase coverage for cases where a crash + * may occur. These failures will be tracked in the + * mozilla/js/tests/public-failures.txt list. + * + */ + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +var date = new Date("06/05/2005 00:00:00 GMT-0000"); + +expect = '20'; +actual = date.toLocaleFormat('%C'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%C")'); + +expect = date.toLocaleFormat('%C%y'); +actual = date.toLocaleFormat('%Y'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%C%y") == ' + + 'Date.toLocaleFormat("%Y")'); + +expect = date.toLocaleFormat('%m/%d/%y'); +actual = date.toLocaleFormat('%D'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%m/%d/%y") == ' + + 'Date.toLocaleFormat("%D")'); + +expect = (date.getTimezoneOffset() > 0) ? ' 4' : ' 5'; +actual = date.toLocaleFormat('%e'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%e")'); + +expect = date.toLocaleFormat('%Y-%m-%d'); +actual = date.toLocaleFormat('%F'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%Y-%m-%d") == ' + + 'Date.toLocaleFormat("%F")'); + +expect = '05'; +actual = date.toLocaleFormat('%g'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%g")'); + +expect = '2005'; +actual = date.toLocaleFormat('%G'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%G")'); + +expect = date.toLocaleFormat('%b'); +actual = date.toLocaleFormat('%h'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%b") == ' + + 'Date.toLocaleFormat("%h")'); + +expect = '\n'; +actual = date.toLocaleFormat('%n'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%n") == "\\n"'); + +expect = date.toLocaleFormat('%I:%M:%S %p'); +actual = date.toLocaleFormat('%r'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%I:%M:%S %p") == ' + + 'Date.toLocaleFormat("%r")'); + +expect = date.toLocaleFormat('%H:%M'); +actual = date.toLocaleFormat('%R'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%H:%M") == ' + + 'Date.toLocaleFormat("%R")'); + +expect = '\t'; +actual = date.toLocaleFormat('%t'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%t") == "\\t"'); + +expect = date.toLocaleFormat('%H:%M:%S'); +actual = date.toLocaleFormat('%T'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%H:%M:%S") == ' + + 'Date.toLocaleFormat("%T")'); + +expect = String(6 + ((date.getTimezoneOffset() > 0) ? 0 : 1)); +actual = date.toLocaleFormat('%u'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%u")'); + +expect = '22'; +actual = date.toLocaleFormat('%V'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%V")'); + +print('Note: For Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%x") ' + + 'to pass in Windows, the Regional Setting for the short date must be ' + + 'set to mm/dd/yyyy'); +expect = date.toLocaleFormat('%m/%d/%Y'); +actual = date.toLocaleFormat('%x'); +reportCompare(expect, actual, 'Date.toLocaleFormat("%m/%d/%Y") == ' + + 'Date.toLocaleFormat("%x")'); diff --git a/js/src/tests/js1_5/shell.js b/js/src/tests/js1_5/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/shell.js diff --git a/js/src/tests/js1_5/template.js b/js/src/tests/js1_5/template.js new file mode 100644 index 000000000..089aae2d6 --- /dev/null +++ b/js/src/tests/js1_5/template.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 99999; +var summary = ''; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} |